Formularelemente mit Schleife durchlaufen
-
Habs jetzt in die FORM-Tags geschrieben, das Auslesen gelingt aber noch nicht. Jedes input-Formular muss als Arrayelement ansprechbar sein, einen Bezug zum entsprechenden Datensatz haben (daher habe ich es mal mit id, dem Primärschlüssel, versucht) und auch den Wert, der vom User eingegeben wurde, zurückliefer können.
Ich probiers mal weiter, bin aber weiterhin trotzdem für jede Info danbar.
-
Also bei mir klappt das so wie beschrieben, oder ich habe dein Problem falsch verstanden:
<form action="self.php" method="post"> <input type="text" name="feld[blub]" value=""><br> <input type="text" name="feld[asdf]" value=""><br> <input type="text" name="feld[jklm]" value=""><br> <input type="submit" value="Absenden"> </form> <? foreach($_POST['feld'] as $id => $value) echo "$id => $value<br>"; ?>
-
Danke, Flenders. Ich habe ein wenig hier und da getestet und löse es jetzt so:
Das ist die Datei für die Katalogauswahl:<?php session_start(); include ("connect_go.inc.php"); connect(); $erg = mysql_query("SELECT id, titel, autor_nn, autor_vn, isbn, preis, ersch_jahr, lagerbestand FROM buecherliste WHERE autor_nn = 'hoeg'"); echo "Folgende Titel wurden gefunden:<br><br>"; echo "<table border>"; echo "<tr>"; echo "<th>id<th>Titel<th>Nachname<th>Vorname<th>ISBN<th>Preis<th>Erscheinungsdatum<th>Lagerbestand<th>Warenkorb<th>Menge"; echo "</tr>"; while ($row = mysql_fetch_row($erg)) { echo "<tr>"; echo "<form name=auswahl action=bestaetigung.php method=POST target=new> <td> <input type=hidden name=id value=$row[0]> $row[0] </td> <td> <input type=hidden name=titel value=$row[1]> $row[1] </td> <td> <input type=hidden name=nachname value=$row[2]> $row[2] </td> <td> <input type=hidden name=vorname value=$row[3]> $row[3] </td> <td> <input type=hidden name=isbn value=$row[4]> $row[4] </td> <td> <input type=hidden name=preis value=$row[5]> $row[5] </td> <td> <input type=hidden name=erscheinungsdatum value=$row[6]> $row[6] </td> <td> <input type=hidden name=lagerbestand value=$row[7]> $row[7] </td> <td> <input name=submit type=image src=warenkorb.gif alt=in_den_Warenkorb> </td> <td> <input type=text maxlength=2 size=2 name=anzahl> </td>"; echo "</form>"; echo "</tr>"; } mysql_close(); ?>
Und das hier die Datei für die Bestellbestätigung
<?php session_start(); ?> <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <title>Artikel hinzugefügt</title> <!--esi localhost="http://localhost/dummy/"--> </head> <body> <?php $gesamtpreis = round($preis * $anzahl, 2); echo "Ihr Artikel wurde in den Warenkorb gelegt. Sie können die gewählte Menge jederzeit ändern.<br><br> <table border> <tr><br> <th>ISBN</th><br> <th>Nachname</th><br> <th>Preis</th><br> <th>Anzahl</th><br> <th>Gesamtpreis inkl. MwSt.</th><br> </tr><br> <tr><br> <td>$isbn</td><br> <td>$nachname</td><br> <td>$preis</td><br> <td>$anzahl</td><br> <td>$gesamtpreis Euro</td><br> </tr><br> </table><br>"; ?> </body> </html>
Das Dumme ist nur, dass die Ausgabe der Bestellbestätigung, je nachdem wie viele Treffer in der Katalogauswahldatei gefunden wurden, ganz weit unten beginn. Das heißt, die Bestätigungstabelle beginnt mit jedem Treffer in der Katalogauswahldatei immer tiefer, obwohl es ne target=new-Seite ist.
-
Achso, ich dachte du hast mehrere Artikel mit imputfeldern, die sich über einen submitbutton bestellen lassen
Dein zweites Problem verstehe ich gerade nicht so ganz, aber setz doch einfach einen Anker und spring direkt nach unten oder mach diese Ausgabe oben auf die Seite
-
Hallo Flenders,
du hast mein Problem 100%ig erfasst, genau das war mein Problem, aber ich habe es dann doch etwas anders gelöst, wie du siehst. Es kam mir in den Sinn und lief.
Ich danke dir für die Anteilnahme
-
Ich habe noch eine weitere Frage. In dem obigen Codeauszug (03 Aug 2003 14:57) befindet sich in $row[1] der Titel eines Buches. Wenn ich das jetzt an das Bestellbestätigungsformular übergebe, wird nur das erste Wort übergeben, nicht der gesamte Satz. Bin daher auf den Nachnamen ausgewichen, aber wenn der jetzt mal aus zwei Worten besteht, wird wieder nur das erste Wort übergeben.
Die Session-ID wird auch nicht übergeben. Obwohl ich doch zu Beginn der Bestellbestätigung session_start() aufrufe.
Kann mir jemand helfen? Ganz besonders wichtig ist mir die Session-ID. Normalerweise kann ich sie problemlos zwischen Seiten hin- und hertragen, nur in diesem Beispiel nicht. Ohne Session-ID aber kann ich nichts in der Datenbank sinnvoll abspeichern.
Danke!
-
flenders schrieb:
btw solltest du Attribute immer in "" bzw. '' einschließen
Entweder du aktivierst session.use-trans_sid (siehe auch Wieder Sessions...) oder du fragst mit session_id() diese ab, übergibst sie (per URI oder Cookie) und setzt sie vor dem Aufruf von session_start() mithilfe von session_id() wieder
-
Danke mal wieder, Flenders.
-
Verstanden habe ich aber immer noch nicht, "warum" die id in dem Beispielen nicht übergeben wird. Auf allen Seiten wird sie übergeben, nur nicht hier.
-
Klappt es denn mit anderen Formularen?
-
Ja, es klappt mit dem gesamten Shop, er läuft. An jede Seite wird die id übergeben, und ich kann sie auch problemlos auslesen. Kurzum: no problems.
Bis ... auf das Beispiel, das ich da gepostet habe. Die Bestellbestätigungsseite nimmt die id nicht auf, weiß der Teufel warum. Ich habe es jetzt so gelöst, die id in einem versteckten input-Feld an die Bestellbestätigungsseite zu übergeben:
<input type='hidden' name='sess_id' value='$sess_id'>
Damit kann ich jetzt auch auf der Bestellbestätigungsseite mit der id arbeiten, insofern alles ok. Aber auf normalem Wege wie bei den anderen Seiten, eben mit session_start(), gehts komischwerweise nicht, die id wird dadurch nicht weitergereicht. Ich vermute, dass das irgendwas damit zu tun hat, dass alles, was zwischen <form> und </form> liegt, per echo geschrieben wird.
Ich könnte ja zufrieden sein, aber es wurmt mich, dass ich nicht herauskriege, wo der Fehler liegt.PS
Danke für den Hinweis mit den Anführungsstrichen