PHP Eintragen mehrerer Datensätze in Datenbank

Spliffy83

Cadet 4th Year
Registriert
Feb. 2013
Beiträge
76
Moin!
Ich habe ein Problem: ich möchte per Formular mehrere Datensätze auf einmal in eine Datenbank speichern, weiß jedoch nicht wie das geht. Im Internet habe ich zwar schon viele Lösungen dieses Problems gefunden, bekomme das aber irgendwie nicht in meinen Kopf und kann es nicht auf mein Projekt ummüntzen...
Darum hoffe ich, dass mir hier jemand helfen kann und auch mag : )
Ich habe eine Datenbank mit mehreren Tabellen:
wichtig sind die Tabellen user_werkzeug_verknuepfung(id, userid, wzid, wzanzahl,schublade)und
werkzeug(wzid, wzname)

Nun lasse ich mir auf einer Seite alle Datensätze ausgeben die einem bestimmten User gehören.
Jedes Werkzeug ist dabei einer Schublade zugeordnet.
Die eigentliche Funktion soll es nun sein, dass der User die Werkzeuge über ein Dropdown_Menü in andere Schubladen stecken kann.

PHP:
				$sql = "select user_werkzeug_verknuepfung.*, werkzeug.wzname from         `user_werkzeug_verknuepfung`, werkzeug
								where
								userid = " . $_SESSION["usid"] . " and user_werkzeug_verknuepfung.wzid=werkzeug.wzid
								order by user_werkzeug_verknuepfung.schublade";
				$res = mysqli_query($con, $sql);
				echo "<table>";
				echo "<tr><th>Werkzeug-ID</th><th>Werkzeugname</th>";
				echo "<th>Aznahl</th><th>Schublade</th></tr>";
				echo "<form action='wz_wz_wzeinordnung.php'>";
				while ($werkzeuge = mysqli_fetch_assoc($res))
				{
					echo "<tr>";
					echo "<td>" . $werkzeuge["wzid"] . "</td>";
					echo "<td>" . $werkzeuge["wzname"] . "</td>";
					echo "<td>" . $werkzeuge["wzanzahl"] . "</td>";
					echo "<td><select name='schublade'>"
							. "<option selected='selected' value='" . $werkzeuge["schublade"] . "'>Schublade "
							. $werkzeuge["schublade"] . "</option>"
							. "<option value='Schublade 1'>Schublade 1</option>"
							. "<option value='Schublade 2'>Schublade 2</option>"
							. "<option value='Schublade 3'>Schublade 3</option>"
							. "<option value='Schublade 4'>Schublade 4</option>";
					echo "</select>";
					echo "</tr>";
				}
				echo "<tfoot>";
				echo "<tr><td colspan='4' align='center'><input type='submit' name='aenderung' value='Änderungen übernehmen'></td></tr>";
				echo "</form>";
				echo "</tfoot>";
				echo "</table>";

Die reine Anzeige klappt soweit auch ganz gut.
Nun weiß ich jedoch nicht wie ich es hinbekommen, dass die Datensätze eingetragen werden.
Wie muss ich das ganze nun umbauen damit für einen Benutzer mehrere Werkzeuge gleichzeitig in Schubladen einsortiert werden und gespeichert werden können?
Und wie muss dann der Update-Teil aussehen?

Ich würde mich freuen wenn mir da wer helfen könnte und es mir dann auch idealerweise dabei erklärt.

LG Spliffy
 
Verstehe ich das richtig, du möchtest die select box mit allen werkzeugen, die dem nutzer zugewiesen sind befüllen?
 
Das kann so nicht funktionieren, da in deinem Aufbau jedes <select> den selben Namen hat. Du musst schon dafür sorgen, dass deine Formularfelder eindeutig sind, sowohl was Name als auch Wert angeht.
 
Hmm nein nicht ganz, ich möchte jedes Werkzeug für sich per dropdown einer Schublade zuweisen.
Vielleicht erklärt das Bild was ich meine^^ werkzeugkasten.jpg
 
Du musst logischerweise beim Submit pro Zeile ein Tupel übertragen, aus Werkzeug-ID und Schubladen-ID.... und natürlich über genau diesen Array von Tupeln iterieren.
 
Achja schonmal danke für die schellen antworten : )
Bei dem <select> war ich mir nicht sicher wie ich das nun am besten mache, dass jedes select einzigartig ist.
Eine Schubladen-ID habe ich gar nicht, die Schublade wird für jedes Werkzeug in der Verknuepfungstabelle hinterlegt.
Könnte allerdings mit Werkzeug-ID und User-ID arbeiten.
Allerdings weiß ich nicht wie das MySQL Update dann aussehen muss.
 
Ich habe mir die Seite angeguckt aber wie löse ich das nun?
Mache das ja mittels eines HTML-Formulars und trage keine festen Datensätze in SQL ein.
Ein Problem ist, dass wie Daaron geschrieben hat <select> nicht einzigartig ist.
Der Punkt ist, dass ich nicht verstehe wie ich das Formular anpassen muss und wie der Update-Befehl dann auszusehen hat^^'
 
Du musst dir das Update-Statement dann schon serverseitig "zusammenbauen"..

Daaron hat doch schon den Hinweis gegeben, dass du darüber iterieren musst?

Sowas wie:
Code:
foreach ($werkzeugzuordnungen as $werkzeug) {
    $db->query("UPDATE user_werkzeug_verknuepfungen SET schublade = ".$db->real_escape_string($werkzeug["schubladen_id"])." WHERE user_id = "....." AND wzid = "...");
}
 
Spliffy83 schrieb:
Ich habe mir die Seite angeguckt aber wie löse ich das nun?'

Aus <select name='schublade'> machst du <select name="schublade[]">, dann kommen alle Datensätze hintereinander weg als Array in PHP an. Den Options gibst du dann einfach die WerkzeugId mit:
"<option value='Schublade 1_$werkzeuge['wzid']'>Schublade 1</option>" (grob in der Art, mußt mal schauen dass die Id sauber angehängt wird an den Value.)

Dann bekommst du im Post das Array mit der jeweils gewählten Schublade und der WerkzeugId, also einfach:

Code:
foreach($_POST['schublade'] as $value) {
$zuordnung = explode('_', $value); //den Value am Unterstrich trennen und in ein Array schieben
//hier updatest du dann den Wert in der Datenbank a la UPDATE user_werkzeug_verknuepfung SET schublade = $zuordnung[0] WHERE wz_id = $zuordnung[1]
}

Noch ein paar Anmerkungen:
-Wenn das Feld in der Datenbank schublade heißt würde ich da einfach 1,2,3,4 drin speichern, nicht 'Schublade 1' usw. Eventuell brauchst du später mal eine Tabelle 'schubladen', die noch ergänzende Angaben zu den Schubladen hält (Fassungsvermögen, Größe oder so etwas), dann hast du es einfacher auf die Tabelle zu joinen
-das erste Feld im Select ist wenn ich das richtig sehe ja dann nochmal im Selekt vorhanden, da würde ich die Options einfach in einer Schleife aufbauen und falls gerade die Option an der Reihe ist, die dem Werkzeug zugeordnet ist, einfach ein selected='selected' eintragen, das ist aber Geschmackssache
 
mambokurt schrieb:
Aus <select name='schublade'> machst du <select name="schublade[]">, dann kommen alle Datensätze hintereinander weg als Array in PHP an.

So ein Vorgehen lässt keine eindeutige Zuordnung des Werkzeuges zu. Wenn du mal weniger Werkzeuge darstellst als insgesamt in der Datenbank enthalten sind, oder aber die Werkzeug-ID durch spätere Löschung nicht mehr durchgängig ist, kommst du hier in Teufels Küche.
 
Wieso das? Die Schublade & Werkzeug Id steht im Value der Option, wenn ein Werkzeug nicht mit ausgegeben wird wird es halt nicht geupdatet in der Datenbank, muss es ja dann auch nicht.
 
Hmm viel Danke für eure Hilfe habe es nun aber von selbst gelöst : )

Habe einfach in der while-Schleife eine Variable hochzählen lassen und diese mit allen $_POST[""] 's verknüpft und beim Speichern das ganze über eine for_Schleife wieder ausgegeben bzw. in die Datenbank gespeichert : )

PHP:
$sql = "select user_werkzeug_verknuepfung.*, werkzeug.wzname from user_werkzeug_verknuepfung, werkzeug
									where
									userid = " . $_SESSION["usid"] . " and user_werkzeug_verknuepfung.wzid=werkzeug.wzid
									order by user_werkzeug_verknuepfung.schublade";
					$res = mysqli_query($con, $sql);
					echo "<table>";
					echo "<tr><th>Werkzeug-ID</th><th>Werkzeugname</th>";
					echo "<th>Anzahl</th><th>Schublade</th></tr>";
					echo "<form action='wz_wz_wzeinordnung.php' method='post'>";
					$i=0;
					while ($werkzeuge = mysqli_fetch_assoc($res))
					{
						$i ++;
						echo "<tr>";
						echo "<td>" . $werkzeuge["wzid"] . "</td>";
						echo "<td>" . $werkzeuge["wzname"] . "</td>";
						echo "<td>" . $werkzeuge["wzanzahl"] . "</td>";
						echo "<input type='hidden' name='werkzeug" . $i . "' value='" . $werkzeuge["id"] . "'>";
						echo "<td><select name='schublade" . $i . "'>"
								. "<option selected='selected' value='" . $werkzeuge["schublade"] . "'>Schublade "
								. $werkzeuge["schublade"] . "</option>"
								. "<option value='1'>Schublade 1</option>"
								. "<option value='2'>Schublade 2</option>"
								. "<option value='3'>Schublade 3</option>"
								. "<option value='4'>Schublade 4</option>";
						echo "</select>";
						echo "</tr>";
					}
					echo "<tfoot>";
					echo "<input type='hidden' name='anzahldatensaetze' value= '$i'>";
					echo "<tr><td colspan='4' align='center'><input type='submit' name='action' value='Schubladen befuellen'></td></tr>";
					echo "</form>";
					echo "</tfoot>";
					echo "</table>";
					echo $i;
					break;
					
					

				case "Schubladen befuellen":
					$i= $_POST["anzahldatensaetze"];
					for ($a=1; $a<=$i; $a++)
					{
						$sql = "update user_werkzeug_verknuepfung set schublade='"
								. $_POST["schublade" . $a] . "'"
								. " where id = " . $_POST["werkzeug" . $a];
						mysqli_query($con, $sql);
					}
							
						
				
					$num = mysqli_affected_rows($con);
					if($num>0)
					{
						Header("location: wz_wz_wzeinordnung.php");
	
					}
					else
					{
						echo "<p>Der Datensatz wurde nicht ge�ndert</p>";
					}
					break;

Trotzdem vielen Dank!
 
Zuletzt bearbeitet:
Zurück
Oben