Formular per php aus auswahl erzeugen

GESUTRA

Grünschnabel
Hallo Gemeinde

ich sitze an einem Formular, das ich aus einer Produktliste per Checkboxen erzeugen will.
Soll heißen: Kunde wählt per Checkbox Produkte aus und kann diese dann über ein Bestellformular anfordern.

Ich bin soweit, dass der Wert, der über die Checkbox ausgewählt wurde an das Formular übergeben wird. Allerdings möchte ich neben diesem Wert (Beschreibung) auch noch weitere Werte übergeben (Artikelnummer) und (Preis).

Folgenden Code habe ich bisher erstellt:

für die Checkbox:
HTML:
<form method="post" action="bestellung.php">
<input name="artikel[]" type="checkbox" value="Original-Toner für HP-LaserJet 4000 Serie" />
<input name="artikelnr[]" type="hidden" value="HP C4127X" />
<input name="artikelpreis[]" type="hidden" value="76,90 €" />
</form>

Abfrage im Formular bestellung.php lautet:
PHP:
for ($i=0;$i<sizeof($artikel);$i++) {
echo "<input type='text' value='$artikel[$i]'>";
}

Wie gehe ich vor, dass die andeern Werte, die ich aktuell per hidden-feld erzeuge auch in das Formular übernommen werden?

Ich könnte mir vorstellen, dass ich evtl. mit Arrays etwas erreichen könnte, aber dafür fehlen mir leider noch die PHP-Kenntnisse.

Danke für eure Hilfe,

GESUTRA
 
Als erstes klären wir mal wie deine Werte denn über die Hidden-Inputfelder versendet werden.
Ich denke nicht das überall gleich "76,99 EUR" steht -.-
Also würde ich sagen, du verwendest Variablen. Wenn dies stimmt, dann müssten deiner
Inputfelder wie folgt aussehen (sieht bei mir so aus -.- verwende es oft in Vermindung mit Html)

PHP:
<input type='hidden' value='<?php echo $lol; ?>' name='artikelnr[]' />

Naja dann wolltest du wissen wie du die anderen Werte abfrägst/verwendest !
Also diesen Wert würdest du z. B. so abfragen $artikelnr[$i]

Versuchs doch mal so -.-

PHP:
Abfrage im Formular bestellung.php lautet:
PHP-Code:
for ($i=0;$i<sizeof($artikel);$i++) {
echo "<input type='text' value='$artikel[$i]'>";
echo $artikelnr[$i];
echo $artikelpreis[$i];
}
 
Ja, ich hatte die Abfrage bisher in einen String geschrieben:

PHP:
echo "Artikel: <input class='text' size='50' name='Artikel' type='text' value='$artikel[$i]'>&nbsp;&nbsp; Nr: <input class='text' size='5' name='Artikel' type='text' value='$artikelnr[$i]'>&nbsp;&nbsp; Preis: <input class='text' size='5 name='Artikel' type='text' value='$artikelpreis[$i]'>&nbsp;&nbsp;"

dabei hat er sich wohl verschluckt ;)

Aber ich habe gleich noch eine Frage, die den Komfort des Formulars erheblich verbessern würde. Wenn ich jetzt mein Bestellformular generiert habe, stehen dort der Artikelname, die Artikelnummer, der Preis und die Menge drin:

PHP:
for ($i=0;$i<sizeof($artikel);$i++) {
		echo "$i&nbsp;&nbsp;&nbsp;";
		echo "Artikel: <input class='text' size='50' name='Artikel' type='text' value='$artikel[$i]'>&nbsp;&nbsp;";
		echo "Nr: <input class='text' size='8' name='' type='text' value='$artikelnr[$i]'>&nbsp;&nbsp;";
		echo "Preis: <input class='text' size='5' name='Einzelpreis' type='text' value='$artikelpreis[$i]'>&nbsp;&nbsp;";
		echo "Menge: <input class='text' size='2' name='Menge' type='text' value='1'>&nbsp;&nbsp;";
		echo "<hr />";
	}

Toll wäre es doch, wenn der Kunde dann den Gesamtpreis bekommen würde? und vielleicht noch den Preis inkl. MwSt und die Frachtkosten, wenn der Nettopreis unter 100 € liegt ;)

Hast du ne Idee, wie ich das aus den einzelnen Feldern auslese?
 
Ja hab ne Idee und eine Lösung ...
Hoff dir Hilft das im Großen und Ganzen ...
Ist ein Beispiel einer Datenbank. Wir haben verschiedene Arrays, welche die Gleichen wie deine sind. Einige Fehler von dir hab ich noch ausgebügelt und etwas mehr Informationen Reingepackt -.-

Schaus dir einfach mal an auf deinem Webserver und dann im Detail in deinem Texteditor



PHP:
<?php
// Unser Datenbank -.- Deine Sieht nach dem Auslesen in etwa so aus -.-
$artikel[0] = "Banane";
$artikel[1] = "Apfel";
$artikel[2] = "Schuhe";
$artikel[3] = "Bier";

$artikelnr[0] = "311";
$artikelnr[1] = "145";
$artikelnr[2] = "147";
$artikelnr[3] = "271";

$artikelpreis[0] = "1";
$artikelpreis[1] = "1";
$artikelpreis[2] = "50";
$artikelpreis[3] = "5";

$artikelmenge[0] = "3";
$artikelmenge[1] = "5";
$artikelmenge[2] = "7";
$artikelmenge[3] = "9";

// Hier ermitteln wir, wie viele "Zeilen" der Array $artikel hat (0-3 == 4)
$anzahl = count($artikel); 

// Hier die While-Schleife mit unserem ermittelten Wert
for ($i=0; $i<$anzahl; $i++) {
$preis[$i] = $artikelpreis[$i] * $artikelmenge[$i];

// Hier geben wir verschiedenes aus ...
//
//  - Artikel
//  - Artikel Nummer
//  - Artikel Preis/Einheit
//  - Artikel Gesamt/Einheit
//  - Artikel Preis/Gesamt

        echo "$i&nbsp;&nbsp;&nbsp;";
        echo "Artikel: <input class='text' size='50' name='Artikel' type='text' value='$artikel[$i]'>&nbsp;&nbsp;";
        echo "Nr: <input class='text' size='8' name='' type='text' value='$artikelnr[$i]'>&nbsp;&nbsp;";
        echo "Preis/Artikel: <input class='text' size='5' name='Einzelpreis' type='text' value='$artikelpreis[$i]€'>&nbsp;&nbsp;";
        echo "Menge: <input class='text' size='2' name='Menge' type='text' value='$artikelmenge[$i]'>&nbsp;&nbsp;";
        echo "Preis: <input class='text' size='5' name='Einzelpreis' type='text' value='$preis[$i]€'>&nbsp;&nbsp;";
        echo "<hr />";
    } 

// Hier geben wir verschiedenes aus ...

//  - Artikel Gesamt
//  - Artikel Preis
//  - Artikel (+) 19-MwSt

// Dies ist dann für die Ausgabe auf der rechten Seite

?><p align="right">
gesamtmenge Artikel: <?php $aa = array_sum($artikelmenge); echo $aa; ?><br>
Selstkostenrpeis: <?php $bb = array_sum($preis); echo $bb; ?>€<br>
Verkaufspreis: <?php if($bb<100){
                     echo $bb/100*119; }else{
                     echo $bb;} ?>€</p>
 
Zuletzt bearbeitet:
Klasse, das sieht ja schon super aus :)
Leider nimmt das Formular nicht die Mengen aus allen Feldern der ersten Seite
Hast du vielleicht ne Idee warum?

HTML:
<form method="post" action="bestellung.php">
<div id="tabelle">
<table width="780" border="0" cellspacing="0" cellpadding="0">
  <tr class="head">
	<td width="50">Auswahl</td>
	<td width="40">Menge</td>
  </tr>
  <tr>
  <td><input name="artikel[]" type="checkbox" value="KMP Rebuild-Toner für HP-LaserJet 4000 Serie" />
	<input name="artikelnr[]" type="hidden" value="0869,HY00" />
	<input name="artikelpreis[]" type="hidden" value="45.95" />
  </td>
  <td align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
   <tr>
   <td align="center">
	<input name="artikel[]" type="checkbox" value="Original-Toner für HP-LaserJet 4000 Serie" />
		<input name="artikelnr[]" type="hidden" value="HP C4127X" />
		<input name="artikelpreis[]" type="hidden" value="102.95" /> 	
   </td>
   <td align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
   <tr class="blue">
   <td align="center">
	<input name="artikel[]" type="checkbox" value="HP LaserJet 1000/ 1200/ 3500/ 3800 Serie" />
		<input name="artikelnr[]" type="hidden" value="HP C4127A" />
		<input name="artikelpreis[]" type="hidden" value="45,95" />
   </td>  
   <td align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>		
   </tr>
   <tr>
   <td width="50" align="center">
	<input name="artikel[]" type="checkbox" value="KMP Rebuild-Toner für HP-LaserJet 4000 Serie" />
		<input name="artikelnr[]" type="hidden" value="1105,5000" />
		<input name="artikelpreis[]" type="hidden" value="64,95" />
   </td>
   <td width="40" align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
   <tr class="blue">
   <td align="center">
	<input name="artikel[]" type="checkbox" value="Original HP LaserJet 1200/ 3500/ 3380" />
		<input name="artikelnr[]" type="hidden" value="HP C4127X" />
		<input name="artikelpreis[]" type="hidden" value="69,50" />
   </td>
   <td align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
   <tr>
   <td width="50" align="center">
	<input name="artikel[]" type="checkbox" value="KMP Rebuild-Toner für HP-LaserJet 2100/ 2200 Serie" />
		<input name="artikelnr[]" type="hidden" value="0874,0000" />
		<input name="artikelpreis[]" type="hidden" value="35,80" />
   </td>
   <td width="40" align="center">
	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
   <tr class="blue">
   <td  width="50"align="center">
	<input name="artikel[]" type="checkbox" value="Original-Toner für HP Laserjet 2100/ 2200 Serie" />
		<input name="artikelnr[]" type="hidden" value="HP C4096A" />
		<input name="artikelpreis[]" type="hidden" value="75,80" />
   </td>
   <td align="center">
 	<input name="artikelmenge[]" type="text" value="" size="3"/>
   </td>
   </tr>
    </table>
</div>
<div align="right"><input name="Auswahl bestellen" type="submit" value="Auswahl bestellen" /></div>
</form>

Der Fehler tritt auf, wenn ich eine checkbox dazwischen nicht auswähle. bei der übernächsten ist die Menge dann wieder da. Lasse ich zwei frei, fehlen auch bei zwei folgenden die Mengenangabe.
 
Zuletzt bearbeitet:
Sieht so deine Tabelle aus
Wo sieht der Kunde was er bestellt
Für was ist oben das Textfeld

Ich schau mir das mal an und schreib dir dann die Lösung wieder -.-
Bzw. hänge sie an. Jedoch würde ich es gerne mal in deinem Script sehen,
da ich mir so wenig vorstellen kann ;)

Also bei dir müsste alles bis auf der Preis Korekt ausgegeben werden
 
Zuletzt bearbeitet:
Hallo GS-Master,

nein, meine liste ist noch mit ein paar mehr "Fülldaten" ausgestattet. Die habe ich nur im Entwurf gelöscht, um mich auf das wesentliche zu beschränken um Fehler zu vermeiden.

Ich hab das Ganze auch nochmal überarbeitet und gebe jetzt die Menge als festen Wert [1] an das Bestellformular weiter. Jetzt müsste ich nur noch eine aktualisierungsfunktion einbauen, damit der Besteller ggf. die Menge ändern und neu berechnen kann.

Mit der Menge [1] werden die Daten auch alle korrekt an das Bestellformular weitergegeben. Auch die Berechnung funktioniert einwandfrei... Danke erstmal dafür!
 
Achso dass is nur dein Problem -.-
Also wenn dein Formular schon funktioniert und an "mein" Script weiterleitet, willst du praktisch nur dass in "meinem" Script nochmals so ein Formular drinnen ist -.-

Das mit den Problem mit der Menge hatte ich ebenfalls -.-
Habe es jetzt noch nicht geändert, werde es aber
Habe das ganze jedoch etwas anders lösen wollen als du denn mein derzeitiger Entwurf hätte so ausgesehen

PHP:
<?php
// Hier wiedermal deine Datenbank -.- brauchst somit nur 1 mal und bei "meinem" Script nicht mehr

$anzahl = count($bestell);

?>
<form method="post" action="bestellung.php">

<table width="374" border="0" cellspacing="0" cellpadding="0">
  <tr class="head">
	<td width="90">Auswahl:<br></td>
	<td width="200">Artikel:<br></td>
	<td width="90">Preis:<br></td>
	<td width="90">Menge:<br></td>
    </tr>
<?

for ($i=0; $i<$anzahl; $i++)
{
?>
        <tr class="head">
        <td width="90"><input name="artikel[]" type="checkbox" value="<?php echo $bestell[$i]; ?>" /></td>
        <td width="200"><input name="artikelnr[]" type="hidden" value="<?php echo $artnr[$i]; ?>" /><?php echo $bestell[$i]; ?></td>
        <td width="90"><input name="artikelpreis[]" type="hidden" value="<?php echo $artpreis[$i]; ?>" /><?php echo $artpreis[$i]; ?></td>
        <td width="90"><input name="artikelmen[]" type="text" value="1" size="3"/></td>
        </tr>
<?
    } 

?>
</table>
 
Zuletzt bearbeitet:
Zurück