dedlfix: mehrere neue Einträge in MySQL-Datenbank machen - Anzhal unbek.

Beitrag lesen

Hi!

Er wählt mittels Select-Feld aus, wie viele Eingabefelder er bekommt, die er dann ausfüllen kann...

Gut, aber letztlich entscheidet nicht diese Anzahl sondern das was er tatsächlich davon ausgefüllt hat, entnehme ich deinen anderen Worten.

Durchnummeriert als foo1, foo2, ... oder als foo[1], foo[2], ...?
ersteres Name1, Name2, Name3 und das eben mit allen Daten, so dass man an der zahl erkennen kann zu welchem Datensatz sie gehören... ich habe nicht mit einem Array gearbeitet, würde das das ganze vereinfachen?

Jein. Du ersparst dir mit einem Array den zusätzlichen Schritt, den Namen aus Feldnamen und einer Nummer zusammenzusetzen, wenn du gezielt zugreifen willst. Oder wenn du über die Daten in $_POST iterierst, musst du zu Fuß Namen und Nummer trennen, um die Nummer zu erlangen. Mit einem Array entstehen solche Probleme nicht. Es kommt aber drauf an, was du konkret implementieren willst, u.U. sind die Nachteile eines kombinierten Namens weniger relevant. So ein Array hat jedoch den Vorteil, wenn es richtig aufgesetzt ist, dass bestimte Daten schon zusammenhängend vorliegen und du nicht mit Einzelwerten hantieren musst.

Statt Name[x] und Vorname[x] bietet es sich an, die Feldnamen nach diesem Prinzip zu wählen: Item[x][Name], Item[x][Vorname]

Du kannst dann zum Beispiel mit foreach ($_POST['Item'] as $key => $item) über alle Datensätze iterieren, hast deren Nummer in $key stehen (wenn du die für irgendwas benötigst) und in $item stehen schön als Array zusammengefasst alle Daten eines Eintrags ($item['Name'], $item['Vorname'] zum Zugriff verwenden).

Da ich jetzt aber nicht weiß wie viele Datensätze im konkreten Fall eingetragen werden sollen ich aber auch nicht eine Unmenge an leeren Datensätzen erzeugen will hilft es auch nicht, einfach alle Werte zu übergeben?
Auf ein clientseitiges Anpassen der gesendeten Werte würde ich nicht nicht verlassen wollen. Das eintragende Script sollte prüfen, ob alle Daten vorhanden sind und welche aufgrund bestimmter Merkmale nicht bearbeitet werden sollen.
Hm, prinzipiell richtig, aber da der Nutzer im Prinzip "Nur" aus Vorgaben auswählt bzw. in zwei Felder Namen oder ähnliches einträgt, kann er nciht viel falsch machen und bei den Feldern, die er einträgt wäre es zumindest bei einem möglich, dass wirklich kein Wert vorhanden ist.

Egal, ob der Nutzer mit Absicht oder aus Versehen was leeres sendet, du musst es filtern.

Bei dem zweiten wäre meine Idee gewesen, eben dieses als Kriterium zu nutzen, falls ab dieser Zeile der Abbruch stattfinden soll und die folgenden Daten nicht mehr eingetragen werden.

Allerdings würde ich nicht auf irgendeinen Abbruch setzen, sondern in einer ersten Schleife die Daten durchlaufen und die Spreu vom Weizen sondern. Die guten ($item) kommen in ein weiteres Array, die anderen nicht. Und mit diesem "Weizen-Array" gehst du dann die SQL-Behandlung an.

Mit weniger Aufwand und aber auch weniger Trennung des Scripts in Teilaufgaben, kannst du auch die Aussonderung sparen und gleich die guten in ein SQL-Statement einsetzen, den Rest übergehen.

Meine Idee war als einen zusätzlichen Wert die Zahl der Datensätze, die der Anwender auswählt mit zu übergeben...
Dann hätte ich den Wert, um im zweiten Formular festzulegen, bis zu welchem Punkt ich den INSERT-Befehl ausführe, allerdings gelingt es mir nicht die Klammern des INSERT "on-the-fly" zu erstellen, das war bisher mein Lösungsansatz.

Du kannst auch wie folgt vorgehen: Erstelle vorab ein leeres Array. Iteriere über alle $_POST['Item'] und prüfe zunächst, ob das Item eingetragen werden soll oder nicht. Wenn ja, bilde mit

sprintf('('%s', '%s', ...)', mysql_real_escape_string($item['Name']), mysql_real_escape_string($item['Vorname']), ...);

die einzelnen Datensatz-Statement-Teile, also nur die geklammerten Werten. Diesen String (das Ergebnis von sprintf()) hängst du an das vorab erstellte Array an. Nach dem Ende der Schleife kannst du das Array mit einem Komma als "Klebstoff" implodieren lassen und hast das, was du hinter VALUES hängen kannst.

Vielleicht wäre auch ein Array eine Lösung, da hängt es aber im Moment auch bei mir, wie ich die Daten dann im Array zusammenführe um sie dann im zweiten Script wieder zusammen zu führen...

Du hattest beim Formulieren deine Gedanken und die schon fertigen Codeteile dazu im Kopf. Ich nicht und verstehe deshalb nicht genau, was du mir da konkret erzählen willst :-) Aber vielleicht macht das nichts, und du findest meine Vorschläge sowieso viel besser ...

Lo!