Formularelemente verknüpfen & Werte weitergeben (PHP)
Jürgen
- html
Hallo zusammen.
Ich habe jetzt echt schon viel herumgesucht, aber irgendwie fehlt mir die richtige Idee.
Also, ich möchte ein Bestellforumular machen, bei dem man per Checkbox einen Artikel auswählen kann. Hinter dem jeweiligen Artikel soll man außerdem die Menge in einem Textfeld eingeben können. Auf der Folgeseite (PHP) sollen alle Artikel, die per Checkbox ausgewählt wurden zusammen mit der Menge sehen und zwar nur diese (es handelt sich nämlich um ca. 2000 Artikel - ich will da nicht nochmal alle sehen!).
Ich hab das schon mit zwei Arrays versucht, die nebeneinander ausgegeben werden. Allerdings gibt es beim "Mengen-Array" Probleme, da dieses dann Leere Werte speichert. Die Arrays werden bei der Ausgabe verschoben.
Hier mal ein Auszug aus dem Bestellformular:
<form action="auswahl.php" method="post" onSubmit="return check()">
<tr><td width="75%"><dl><dd><b><input type="checkbox" name="bestell[]" value="Artikel1">Artikel1</dd></dl></td><td width="25%" valign="top">Menge:<input type="text" name="Menge[]" size="3"></td></tr>
<input type="submit" value="Zum Warenkorb"> <input type="reset" value="Formular zurücksetzen">
Und ein Auszug aus dem "Warenkorb" (auswahl.php):
<?
echo "Bestellung:";
for ($Ar=0;$Ar<sizeof($bestell);$Ar++) {
echo "Artikel: $bestell[$Ar] x $Menge[$Ar]<br>";
}
}
?>
Es gibt auch sicher noch ne einfachere Lösung, nur komm ich nicht drauf unter was ich suchen könnte.
Für Hilfe/Ratschläge wäre ich wirklich SEHR dankbar!
Vielen Dank schonmal.
Schönes Wochenende.
Jürgen
Hello,
woher bekommst Du denn Deine Artikel?
Haben die eindeutige Nummern oder sonstige primäre Eigenschaften?
Dann sollte bei den Checkboxen value="$id" sein.
Und dann brauchst Du ja nur eine Filterbedingung nach der Nummer.
MySQL bietet dafür z.B die Möglichkeit des Sets an.
select (felder) from tabelle where ID in (1,5,8,33,97);
Da Du ja schon bestell[] geschrieben hast, stehen alle IDs nun in diesem Array. Da kannst Du einfach die Menge daraus machen
$menge = "(".implode($bestell).")";
und fertig...
Liebe Grüße aus http://www.braunschweig.de
Hi,
du mußt irgendwie einen Zusammenhang zwischen dem Artikel-Namen und der Artikel-Menge herstellen.
Eine Möglichkeit wäre:
Ausgabe des Formulars via PHP
foreach ($Artikel as $A)
{
echo "<input type="checkbox" name="bestell[]" value="$A">";
echo "<input type="text" name="Menge" . $A . "" size="3">"
}
dadurch wird das Mengenfeld nach dem Artikel benannt, z.B. "MengeArtikel1"
dann in auswahl.php
$Menge = Array();
echo "Bestellung:";
for ($Ar=0;$Ar<count(bestell);$Ar++) {
// jetzt den Namen des passenden MengenFeldes wieder zusammensetzen
// und aus dem REQUEST Array auslesen...
$ArtikelMenge = $_REQUEST["Menge" . $bestell[$Ar]];
$Menge[$Ar] = $ArtikelMenge;
echo "Artikel: $bestell[$Ar] x $Menge[$Ar]<br>";
}
So ungefähr könnte das gehen.
Du solltest das aber vielleicht über zugeornete IDs machen, nicht über den Artikelnamen...
Schönes WE, Recycled
Hallo Recycled. Vielen Dank erst mal für deine Rückmeldung.
Einiges davon funktioniert auch ganz gut, allerdings weiss ich noch nicht ganz, wei das jetzt mit der Menge geht, das funzt so nicht wie Du gemeint hast. Er gibt mir immer noch nur den Artikel aus...
aus dem Katalog (katalog.php):
<?
$Artikel = file("artikel.txt");
foreach ($Artikel as $A) {
echo "<tr><td width="50%"><input type="checkbox" name="bestell[]" value="$A">";
echo $A;
echo "</td>";
echo "<td width="30%"><input type="text" name="Menge" . $A . "" size="3"></td></tr>";
}
?>
aus der Auswahl (auswahl.php):
<?
$Menge = Array();
echo "Bestellung:<br>";
for ($Ar=0;$Ar<count($bestell);$Ar++) {
$ArtikelMenge = $_REQUEST["Menge" . $A[$Ar]];
$Menge[$Ar] = $ArtikelMenge;
echo "$bestell[$Ar] x $Menge[$Ar]<br>";
}
?>
Ich hab noch nicht ganz verstanden, wie das mit dem $_Request() gehen soll, bzw. wie Du im Katalog den Namen definierst...
Wie hast Du das mit den IDs gemeint. Ein Hidden-Feld über eine Formularzeile? Wie kann ich das denn dann auslesen?
Würdest mir wirklich helfen, wenn Du mir dazu noch kurz was schreiben könntest... Ich komm einfach nicht weiter! Vielen Dank schon mal. Jürgen