2009-06-02 3 views
1

Ich habe ein mehrseitiges Formular, das mehrere Tabellen in MySQL für die eingegebenen Werte verwendet. Eine der Seiten verfügt über ein Formular, bei dem der Benutzer die Möglichkeit haben muss, auf ein + zu klicken, um eine zusätzliche Zeile hinzuzufügen, wenn zusätzliche Informationen hinzugefügt werden sollen. Es kann eine beliebige Anzahl von Zeilen hinzugefügt werden.Jquery -> php -> mysql und dynamische Formularfelder

Wenn der Benutzer auf das + klickt, fügt jquery und php die aktuelle Benutzer-ID in eine Zeile in der Datenbanktabelle ein. Diese wird dann aktualisiert, wenn mehr Informationen eingegeben werden.

Das Problem, das ich habe, ist, wie eine beliebige Anzahl von Zeilen für diese bestimmte ID einfügen - wenn die Daten eingegeben werden, sendet ein Unschärfe-Ereignis die Daten an den PHP-Code für die Aktualisierung der Datenbank. Das Problem, das ich habe, ist jedoch, dass es ALLE Zeilen mit dieser bestimmten Benutzer-ID aktualisiert und nicht die aktuelle.

Was wäre der beste Weg, um die Daten in die neuen Zeilen zu übernehmen und die Datenbank zu aktualisieren - ich nehme an, dass ich den ID-Wert anstelle von Benutzer-ID verwenden muss, da dies einzigartig ist, oder gibt es einen anderen Weg es zu tun?

Vielen Dank für alle Vorschläge, die Sie geben können, dieser mein Geist trübt derzeit ...

Antwort

1

Nun, ich denke, dass Sie ein paar Kennungen verwenden müssen, Ihre Benutzer-ID und die Feld-ID. Für die Bearbeitung würde nur abgelegte ID ausreichen, aber wenn Sie alle Benutzerfelder auflisten müssen, wird eine weitere Referenz benötigt.

1

Sie sind richtig, wenn Sie, dass Sie angeben, verwenden, sollten Sie aktualisieren, anstatt die Fremd den Primärschlüssel der Tabelle Schlüssel (UserId in Ihrem Fall), der häufig auf Ihrem Tisch vorkommt. Dies garantiert, dass Sie die erwartete Zeile aktualisieren.

Eine Alternative wäre, die Zeilen, die Sie aktualisieren, einzugrenzen - zum Beispiel, indem Sie nur den neuesten/den mit der höchsten ID aktualisieren oder eine Kombination von Feldern verwenden, die den Datensatz eindeutig machen. Die Verwendung des Primärschlüssels ist jedoch der beste Weg, um Ihr Problem zu lösen.

1

Ja, Sie benötigen den ID-Wert der Zeilen, die Sie einfügen, nicht nur die Benutzer-ID. Ich nehme an, was Sie tun möchten, ist die mysql LAST_INSERT_ID() von Ihrem Ajax-Skript übergeben, die die Einfügung tut, wenn Sie auf + klicken, und schieben Sie diese ID in die Informationen, die Sie später zum Aktualisieren der Zeile verwenden.

+0

was wäre der beste Weg, um die LAST_INSERT_ID() zurück zum Hauptformular zu bekommen? Wäre ein $ _SESSION die Lösung? – Choog

+0

Mein Gedanke war, dass Sie es als JSON oder XML aus dem Skript zurückgeben würden. – chaos

1

Ja, Ihre beste Wette ist, dass mysql eine eindeutige ID für jede erstellte Zeile zurückgibt, dann stellen Sie sicher, dass Sie immer wenn Sie eine Zeile in Ihrem Formular bearbeiten, die ID mitschicken. Jetzt können Sie jeweils eine Zeile bearbeiten.

+0

Haben Sie einen Vorschlag, wie Sie die zurückgegebene eindeutige ID für jede erstellte Zeile erhalten? Ich sehe, woher du kommst, aber ich weiß nicht, wie ich es in die Praxis umsetzen soll. – Choog

+0

Sie können: - hinzufügen "; select last_insert_id();" am Ende der Einfügeabfrage, um die zuletzt eingefügte ID zu erhalten. - Sie können die ID erhalten, indem Sie mysql_insert_id() aufrufen; - Sie können die ID erhalten, indem Sie mysqli-> insert_id(); Überprüfen Sie die PHP-Referenzen: [http://www.php.net/manual/en/function.mysql-insert-id.php] und und [http://www.php.net/manual/en/mysqli .insert-id.php] dann senden Sie die ID zurück zu durch json zu jquery, überprüfen Sie [http://docs.jquery.com/Ajax/jQuery.ajax] für Beispiele dann auf jedem Update, das Sie gerade übergeben die ID der Zeile, die Sie aktualisieren möchten – justlost