[PHP] Mehrfachauswahl in Datenbank speichern

King555

Enthusiast
Thread Starter
Mitglied seit
27.03.2012
Beiträge
299
Hallo,
ich schreibe grad ein Kassenbuch in PHP.
Dabei gibt es ein Formular "Buchung" bei dem man Buchungen eintragen kann. Bei welchem User die Buchung getätigt wird, kann man über eine Mehrfachauswahl(die aus der Datenbank Spalte "namen")
Wenn ich jetzt aber bei der Mehrfachauswahl z.b. 3 Leute anklicke und das ausgefühlte Formular abschicke, schreibt mir PHP alle angeklickten User als eine Buchung in die Datenbank Tabelle. Sprich alle Username werden in die Spalte "namen" eingetragen.

Wie bekomm ich es hin das für jeden angeklickten User ein eigener Datensatz produziert wird und dann in die Datenbank geschrieben.

Hier mal der Code mit dem ich das Realesiere.

PHP:
<?php
	require_once ('konfiguration.php');
  
// PHP Fehlermeldungen anzeigen
error_reporting(E_ALL);

// Weiterleitung - Nach dem absenden des Formulars,
// gelangt der Benutzer über einen Link auf folgende Seite:
$Weiterleitung = "index.php";


$bewohner = isset($_POST["bewohner"]) ? implode(", ", $_POST["bewohner"]) : ""; // Bewohner

// Mehrfachauswahlliste "Bewohner" aus Datenbank lesen

$abfrage = "SELECT  id,vorname FROM  bewohner;";
$result = mysql_query($abfrage);
$num = mysql_num_rows($result); 
while($row = mysql_fetch_array($result)) { 
    $empfang[] = $row['vorname'];  
  
}

$bewohnerAW = "<select name='bewohner[]' size='9' multiple='multiple'>";
foreach ($empfang as $element) { 
 !empty($_POST["bewohner"]) ?
  $bewohnerAW .= in_array($element, $_POST["bewohner"]) ?
   "\n  <option value='" . $element . "' selected='selected'>" . $element . "</option>" :
   "\n  <option value='" . $element . "'>" . $element . "</option>" :
  $bewohnerAW .= "\n  <option value='" . $element . "'>" . $element . "</option>";
}
$bewohnerAW .= "\n </select>";  



$verwendungszweck = isset($_POST["verwendungszweck"]) ? $_POST["verwendungszweck"] : ""; // Verwendungszweck
$einzahlung = isset($_POST["einzahlung"]) ? $_POST["einzahlung"] : ""; // Einzahlung
$abbuchung = isset($_POST["abbuchung"]) ? $_POST["abbuchung"] : ""; // Abbuchung



// Formular erstellen
$Formular = "
<form action='" . $_SERVER["SCRIPT_NAME"] . "' method='post'>

<p>
 <label> <img src='img/bew.png' width='24' height='24' />Bewohner: 
 " . $bewohnerAW . "
 </label>
</p>

<p>
 <label> <img src='img/edit.png' width='24' height='24' />Verwendungszweck:
 <input type='text' name='verwendungszweck' value='" . $verwendungszweck . "' size='35'>
 </label>
</p>

<p>
 <label> <img src='img/up.png' width='24' height='24' />Einzahlung:
 <input type='text' name='einzahlung' value='" . $einzahlung . "' size='35'>
 </label>
</p>

<p>
 <label> <img src='img/down.png' width='24' height='24' /> Abbuchung:
 <input type='text' name='abbuchung' value='" . $abbuchung . "' size='35'>
 </label>
</p>

<p>
 <br>
 <input type='submit' name='submit' value='Speichern'>
</p>
</form>
";

// Formular abgesendet
if (isset($_POST["submit"])) {

$einzahlung = str_replace(",",".", $einzahlung);
$abbuchung = str_replace(",",".", $abbuchung);

  // Daten eintragen
  if (mysql_query("INSERT INTO `buchungen`
   SET
    `bewohner` = '" . mysql_real_escape_string($bewohner) . "', 
	`verwendungszweck` = '" . mysql_real_escape_string($verwendungszweck) . "', 
    `einzahlung` = '" . mysql_real_escape_string($einzahlung) . "', 
    `abbuchung` = '" . mysql_real_escape_string($abbuchung) . "'
   ")) {
   echo "<p>Die Daten wurden eingetragen.</p>";
  }
  else {
   echo "<p>Fehler beim eintragen der Daten!</p>";
  }

  // Weiterleitung
  echo "<p><a href='" . $Weiterleitung . "' target='_top'>Weiter</a></p>";
}
else {

 // Formular ausgeben
 echo $Formular;
}
?>
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Die Mehrfachauswahl liefert dir im Ergebnis n Array. Bei der Auswertung des Formulars gehst du diesen Array durch und speicherst pro Durchlauf. So in etwa:
PHP:
foreach($_POST['benutzer'] as $benutzer) {
    /* $benutzer = der einzelne gewählte User */
}
 
Wie du villeicht am Codestil erkennt bin ich noch nicht der beste Programmierer ;).

Denn Lösungsansatz mit foreach hatte ich auch schon im Kopf. Habe auch schon damit rumgespielt auch mit einer While-Schleife,
leider schaffe ich es nicht das Script zum laufen zu bekommen.

Ich wäre für etwas genauere bzw. ausformuliertere Codeschnipsel echt dankbar.
 
Zuletzt bearbeitet:
Ich gehöre nicht zu denen, die für Lernzwecke komplette Codes rauswerfen - dabei ist der Lerneffekt gleich null. Aber folgendes:

$_POST selbst ist ein Array (daher kannst du auch über die Index' auf die einzelnen Elemente zugreifen (z.B. $_POST['name'])). Die einzelnen Elemente selbst können wieder ein Array sein, wie es bei dir der Fall ist ($_POST['benutzer'] ist ein Array). Einen Array selbst kannst du z.B. mit foreach-Schleifen durchgehen (auch mit anderen, aber foreach wird meistens dafür verwendet).
Wenn du also dein Formular abschickst, gehst du mit einer foreach-Schleife deinen $_POST['benutzer']-Array durch. Wenn du z.B. 5 Benutzer angewählt hast, geht die Schleife 5 mal durch. Und pro Durchgang speicherst du einen Datensatz.

Für die exakte Vorgehensweise darfst du dir den Kopf zerbrechen. Ich helfe dir gern weiter wenn du ein spezifisches Problem hast, aber ganzen Quellcode rauszuwerfen würde dir nicht helfen, da du das Prinzip nicht verstehst. Programmieren lernt heißt unter anderem, eine logische Herangehensweise zu entwickeln und die Prinzipe der einzelnen Sprachelemente anwenden zu können - das lernst du nicht, wenn ich es dir mache ;)...
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh