Antworten auf deine Fragen:
Neues Thema erstellen

Formular anlegen für mehrere DB INSERTs - multple checkboxes

owieortho

Aktives Mitglied

Schönen guten Abend,

ich stehe gerade auf dem Schlauch - und es wird wahrscheinlich mit einem gehörigen Kopfpatscher enden...

Ich lasse mir aus einer Datenbank ein Formular befüllen, welches dann ergänzende Angaben aufnimmt und anschließend die gesammelten Infos per INSERT oder UPDATE wieder zurück in die Datenbank schreibt.
HTML:
<form ...>
... verschiedene inputs und selects, deren name immer als array vergeben ist, Bsp.:
<... name="email[]" ...>
Die Auswertung im Skript erfolgt so:
PHP:
$count = count($_REQUEST['email']);
for($i=0;$i<$count;$i++){
echo $email[$i];
if (....) {
SQL 1
} else {
SQL 2
}
Und jetzt kommt's: Ich möchte im Formular Checkboxen einfügen, bei denen auch eine Mehrfachauswahl möglich ist. Nehmen wir beispielsweise drei Checkboxen, denen ich, wie bei den anderen Formularelementen, einen Arraynamen gebe:
HTML:
<input type="checkbox" name="option[]" value="1">dies
<input type="checkbox" name="option[]" value="2">das
<input type="checkbox" name="option[]" value="3" checked>jenes
Wie werte ich das nun im Skript aus, so dass die Optionen mit dem dazugehörigen Datensatz für jede Zeile als einen Datensatz eingefügt und dabei die jeweils gewählten Optionen (keine, eine, mehrere) mit eingetragen werden? Ich vermute ein mehrdimensionales Array, aber es klemmt im Oberstübchen und mir fällt nur ein, jeder Option einen individuellen Namen zu geben und einzeln zu verarbeiten. Aber das geht doch eleganter.

Hilfe und motivierende Worte werden dankbar angenommen!
Cheers
O.
 

G

Gelöschtes Mitglied 633957

Guest

Wenn ich Dich richtig verstehe und alle ausgewählten Werte mit Komma getrennt in die Datenbank eingefügt werden sollen, dann würde ich implode() nutzen.
Erst das Array abholen...
PHP:
$deinarray = $_POST['option'];
und dann mit Hilfe von
PHP:
implode(',' $deinarray)
in die Dateinbank einpflegen.
Sollte eigentlich klappen.
 

buerzel

Versuch macht kluch!

Teammitglied
Jede Checkbox sollte einem logischen Feld in der DB entsprechen. INSERT oder UPDATE musst du doch sowieso datensatzweise abarbeiten.
 

owieortho

Aktives Mitglied

Hallo,

es trifft's noch nicht. Ohne die Geschichte mit den Checkboxen funktioniert alles wunderbar. Jede Variable eines Datensatzes hat ja den gleichen Zähler ([0], [1], [2], usw.) und alle gleichen werden gemeinsam per SQL verarbeitet. Jetzt kommt die Checkbox,
HTML:
...
<input type="checkbox" name="option[]" value="1">dies
<input type="checkbox" name="option[]" value="2">das
<input type="checkbox" name="option[]" value="3" checked>jenes
...

Meine Versuche, bevor ich zur Verarbeitung schreite, mir die Rückgabewerte anzeigen zu lassen, enden wie folgt:
PHP:
echo 'Option(en): '.  $option;  #Ausgabe:Option(en): Array
echo 'Option(en): '.  $option[i];  #Ausgabe: nichts
echo 'Option(en): '.  $option[i][i];  #Ausgabe: nichts - ich wollte mal mindestens irgendeine der Optionen angezeigt bekommen

Wie bekomme ich nun dieses Array (der Optionen) im Array (der Daten eines Datensatzes)?

Danke,
O.

Jede Checkbox sollte einem logischen Feld in der DB entsprechen. INSERT oder UPDATE musst du doch sowieso datensatzweise abarbeiten.
Die gewählten Optionen werden in einer dazugehörigen Tabelle mit Primär-/Fremdschlüssel-Verknüpfung (Normalisierung) abgelegt, mal eine, mal zwei oder drei.

O.
 
Zuletzt bearbeitet von einem Moderator:

Chris_EDI

PixelNik

Du brauchst kein mehrdimensionales Array. Schau dir mal dieses Beispiel an, vielleicht ist es das, was du suchst. Da ist sehr gut erklärt, wie du die Werte der einzelnen Checkboxen auslesen kannst. In dem Beispiel wird das Ergebnis am Bildschirm ausgegeben, genauso gut kannst du sie aber auch in die Datenbankfelder schreiben.
 

owieortho

Aktives Mitglied

So sieht das Formular aus:

formz4u17.jpg


der dazu gehörende Markup:
HTML:
<p><form action="xyz.php" method="POST"></p>
<table>
<tr>
<th>Neuanmeldung</th><th>verknüpfen mit Altbestand:</th><th>Optionen<br /><small>(Mehrfachasuswahl möglich)</small></th>
</tr>
<tr>
<td>Dampf, Hans
<input type="hidden" name="surname[]" value="Dampf">
<input type="hidden" name="name[]" value="Hans">
<input type="hidden" name="anrede[]" value="Herr">
<input type="hidden" name="title[]" value="">
<input type="hidden" name="email[]" value="hd@mail.com">
<input type="hidden" name="users_id[]" value="50">
</td>
<td>
<select name="match[]" size="1">
<option value="n/a" selected>keine Übereinstimmung</option>
<option value="141">Mustermann, Max</option>
</td>
<td>
<input type="checkbox" name="option[]" value="2">englisch<br />
<input type="checkbox" name="option[]" value="3">französisch<br />
<input type="checkbox" name="option[]" value="4" checked>russisch
</td>
</tr>
<tr>
<td>Mustermann, Max
<input type="hidden" name="surname[]" value="Mustermann">
<input type="hidden" name="name[]" value="Max">
<input type="hidden" name="anrede[]" value="Herr">
<input type="hidden" name="title[]" value="">
<input type="hidden" name="email[]" value="maxm@webmail.de">
<input type="hidden" name="users_id[]" value="51">
</td>
<td>
<select name="match[]" size="1">
<option value="n/a" selected>keine Übereinstimmung</option>
<option value="141">Mustermann, Max</option>
</td>
<td>
<input type="checkbox" name="option[]" value="2">englisch<br />
<input type="checkbox" name="option[]" value="3">französisch<br />
<input type="checkbox" name="option[]" value="4" checked>russisch
</td>
</tr>
<tr>
<td>
Rigby, Elenore
<input type="hidden" name="surname[]" value="Rigby">
<input type="hidden" name="name[]" value="Elenore">
<input type="hidden" name="anrede[]" value="Frau">
<input type="hidden" name="title[]" value="">
<input type="hidden" name="email[]" value="eli@rigby.com">
<input type="hidden" name="users_id[]" value="53">
</td>
<td>
<select name="match[]" size="1">
<option value="n/a" selected>keine Übereinstimmung</option>
<option value="141">Mustermann, Max</option>
</td>
<td>
<input type="checkbox" name="option[]" value="2">englisch<br />
<input type="checkbox" name="option[]" value="3">französisch<br />
<input type="checkbox" name="option[]" value="4" checked>russisch
</td>
</tr>
</table>
<input type="Submit" name="submit" value="speichern" />
</form>
(select gekürzt)

Auswertung dann:
PHP:
$count = count($_POST['email']);
for($i=0;$i<$count;$i++){
echo $anrede.' '. $title.' '. $name[$i] .' '. $surname[$i] .'spricht: '.$option??????';

Gewünschte Ausgabe:
Herr Hans Dampf spricht: englisch, russisch
Herr Max Mustermann spricht: französisch, russisch
Frau Elenore Rigby spricht: russisch

Wie komme ich nun an die gesetzten Optionen?
Danke,
O.
 

buerzel

Versuch macht kluch!

Teammitglied
Erst einmal fehlt eine Schleife zum Auslesen von option[ ]. Denn du hast deine Schleife pro Datensatz angelegt und jeder Datensatz hat 3 checkboxen. So würde $option immer auf einen falschen Wert verweisen (wenn i=1 ist müsste option[(3-5)] abgerufen werden!). Du musst doch vorher dein "234" (oder wie auch immer du dir das gedacht hast) zusammensetzen.
 
Zuletzt bearbeitet:

owieortho

Aktives Mitglied

Erst einmal fehlt eine Schleife zum Auslesen von option[ ]. Denn du hast deine Schleife pro Datensatz angelegt und jeder Datensatz hat 3 checkboxen. So würde $option immer auf einen falschen Wert verweisen (wenn i=1 ist müsste option[(3-5)] abgerufen werden!). Du musst doch vorher dein "234" (oder wie auch immer du dir das gedacht hast) zusammensetzen.
Richtig. Was mich interessiert ist, wie stelle ich sicher, dass bei i=0 - dem Datensatz von Hans Dampf - auch dessen Optionen in der fehlenden Schleife ausgelesen werden.
Würde ich, analog zur "Datensatz"-Schleife, die Arrayelemente zählen und dann ausgeben:
PHP:
$count2 = count($option[i]);
for ($n=0;$n<$count2;$n++) {
echo $option[n].', '
}
?

Gruß
O.
 

buerzel

Versuch macht kluch!

Teammitglied
Ginge doch auch so (mal ohne Schleife):

Code:
$n = $i * 3
echo option[n]', ' option[n+1]', ' option[n+2]

Nicht schlagen - bin weder Web- noch PHP-Programmierer ... :D
 
Zuletzt bearbeitet:

owieortho

Aktives Mitglied

Ginge doch auch so (mal ohne Schleife):

Code:
$n = $i * 3
echo option[n]', ' option[n+1]', ' option[n+2]

Nicht schlagen - bin weder Web- noch PHP-Programmierer ... :D
Ja, im Prinzip schon. Aber dann ist es überhaupt nicht dynamisch, denn jede weitere Option müsste hardgecodet sein.

Und statt schlagen sage ich lieber Danke, dass Du Dir Gedanken machst! :daumenhoch
O.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.634
Beiträge
1.538.447
Mitglieder
67.555
Neuestes Mitglied
scheflo
Oben