PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vereinfachte Warenkorbfunktion, aber wie ?


quirrly
19.12.2004, 19:27:47
Hallo,

Ich habe eine eigene entworfene HTML-Webseite, auf der neben vielen lesbaren Informationen auch Artikel verkauft werden.

Es ist keine Unmenge an Artikeln, aber eine warenkorbähnliche Funktion sollte inzwischen doch schon angeboten werden, zwecks Funktionalität.

Ich befasse mich erst seit wenigen Tagen mit PHP und MySQL, habe es inzwischen sogar auch geschafft ein HTML-Seite mit eingebettetem PHP-Bestell-Formular zu entwickeln, in das Adressdaten, Lieferdatum, Lieferadresse usw. eingegeben werden und abgesandt werden können.

Die Daten werden mittels eines zweiten PHP-Scripts überprüft, und man wird bei Fehleingaben aufgefordert dies zu korrigieren. Wenn dies alles ok ist, werden mir und dem Absender jeweils eine detailierte eMail gesandt. Funktioniert alles.

Jetzt habe ich noch eine dynamische HTML-Seite, in der in einer Tabelle alle Artikel mit verschiedenen Angaben aufgelistet werden. Die Daten für jeden Artikel holt sich das Dokument von meinem MySQL-Server.

Wie gesagt, ich bin absoluter Anfänger auf dem Gebiet, habs aber dennoch hingekriegt.

Diese Methode habe ich ausgewählt, um die Artikel schnellstmöglich und mit wenig Aufwand über eine csv.-Datei die ich aus Excel exportiere zu aktualisieren, bzw. die Artikel zu pflegen. Die Artikel sind Unikate, somit ist hier eine fast tägliche Artikelpflege notwendig.

Ums jetzt für mich komplett zu machen, möchte ich es jetzt so haben, dass der Besucher in dieser Tabelle die zeilenweise angeordneten Artikel jeden für sich mittels "Kontrollkästchen" markieren kann, nämlich die Artikel die er zu kaufen wünscht, und das dieser dann mit einem "Weiter"-Button auf meinem bereits fertigen Bestellformular landet, um seine Angaben zu machen.

Über diesem Formular sollen dann die markierten Artikel aufgelistet werden, und genau da scheitere ich nun, weil ich nicht weiß, wie ich das System (oder vielleicht die Datenbank ?) die ausgesuchten Artikel "notieren/sich merken" lassen soll ? :-

Das Problem ist halt, dass sich der Besucher bevor er auf "Bestellen" klickt, noch weiter auf der Webseite bewegen können soll, und die ausgesuchten Artikel sich noch im (sogenannten Warenkorb) befinden sollen, wenn er wieder zum Bestellformular zurückkehrt, ihr wisst was ich meine ?

Wie kann ich das lösen ?

xabbuh
19.12.2004, 21:12:26
Damit der User sich vor dem endgültigen Bestellen noch auf der Seite bewegen kann, solltest du Sessions (http://tut.php-q.net/sessions.html) verwenden.
Wenn du Probleme bei der Übermittlung von Checkboxen an ein Script hast, schau dir mal das Kapitel Wie verarbeitet man Checkboxen (http://www.php-faq.de/q/q-formular-checkbox.html) aus den FAQ an.

quirrly
20.12.2004, 14:34:04
Original geschrieben von xabbuh
Damit der User sich vor dem endgültigen Bestellen noch auf der Seite bewegen kann, solltest du Sessions (http://tut.php-q.net/sessions.html) verwenden.
Wenn du Probleme bei der Übermittlung von Checkboxen an ein Script hast, schau dir mal das Kapitel Wie verarbeitet man Checkboxen (http://www.php-faq.de/q/q-formular-checkbox.html) aus den FAQ an.

Ich werde mir das mal anschauen, danke für die Links ;-)

Wenn was nicht klappt, dann komm ich aber wieder *gg*

Mfg

xabbuh
20.12.2004, 15:16:32
Original geschrieben von quirrly
Wenn was nicht klappt, dann komm ich aber wieder *gg*
Dafür ist das Forum ja da ;-)

quirrly
20.12.2004, 16:31:36
Original geschrieben von xabbuh
Dafür ist das Forum ja da ;-)

Bin schon wieder da ! *gg*
Also, meine Artikeltabelle wird quasi aus einem Array zusammengesetzt, das sich die entsprechenden Daten aus meiner MySQL-Datenbank holt.

Jeder Artikel (Zeile) hat mehrere Spalten in denen Grundangaben zum Artikel stehen. Jetzt habe ich noch in jede Zeile eine checkbox eingefügt, das Script sieht jetzt etwas seltsam aus, aber immerhin kann es so jetzt fehlerfrei aufgerufen werden.

Hier der betreffende Teil:

while ($zeile = mysql_fetch_array($resID,MYSQL_ASSOC))
{
echo "<tr bgcolor='#DCDCEF'>";
echo "<td>".$zeile[$spalte1]."</td>";
echo "<td>".$zeile[$spalte2]."<br />".$zeile[$spalte3]."<br />".$zeile[$spalte4]."<br />".$zeile[$spalte5]."</td>";
echo "<td>".$zeile[$spalte6]."</td>";
echo "<td>".$zeile[$spalte7]."</td>";
echo "<td><a href=".$zeile[$spalte8]." target='_blank'><img src=".$zeile[$spalte9]." border=0></a></td>";
echo "<td>".$zeile[$spalte10]."</td>";
echo "</tr>";
echo "<tr bgcolor='#DDDDDD'>";
echo "<td>Artikel merken:<td>";
?>
<input name="Markierung[]" type="checkbox" id="Markierung" value="Ja" />
<?PHP
echo "</td>";
echo "</tr>";

Wie mache ich es jetzt, dass es mir den Array "Markierung" von 0 oder von 1 an durchnummeriert ? Ich meine angenommen ich habe genau 100 Artikel, dann muss es mir ja mit jeder Artikel-Zeile, aus denen die Tabelle zusammengefügt wird, eine zugehörige Checkbox auflisten.

Wenn ich das Dokument auf dem Server aufrufe, dann erscheint das ja auch so, aber woher weiß ich nacher was Markierung[1] ist, und Markierung[2] und Markierung[3], wie weise ich das zu ?

Ich habe in meiner Datenbank keine ID-Feld für jeden Datensatz, dass mir die Datenbank von 1 an durchnummiert, denke das brauche ich nicht, dafür habe ich die Artikelnummern nach denen es die Artikel sortiert, die sind aber siebenstellig und die Nummern ändern sich mit der Zeit, und sind nicht unbedingt fortlaufend, je nachdem welche Artikel verkauft werden. Jede Artikelnummer wird quasi nur einmalig vergeben.

Am Besten wäre es, wenn jetzt noch die Artikelnummer die in der Variable $spalte1 steht, noch im Attribut VALUE gespeichert wird.

xabbuh
20.12.2004, 16:37:19
Pack einfach die id des Artikels in das value Attribut der Checkbox. Dann kannst du hinterher genau sehen, welche Artikel ausgewählt wurden.

quirrly
20.12.2004, 18:45:17
Original geschrieben von xabbuh
Pack einfach die id des Artikels in das value Attribut der Checkbox. Dann kannst du hinterher genau sehen, welche Artikel ausgewählt wurden.


Also irgendwie bin ich blond. Ich hab nochmal eine etwas komplettere Version (Unwichtiges dennoch entfernt) des Scriptes hier reingepostet, um das Ganze noch mal etwas mehr zu veranschaulichen.

Oben beginnend sind die Variablen für den Datenbankzugang (natürlich undefiniert hier ;-) und die Variablen für die einzelnen Spalten mit den Artikeldaten.

Ich habe jetzt nochmal ein Datenbank-Feld vorneangestellt mit einer durchgehenden Nummer von 1 bis ---. Und diese Nummer sollte ich jetzt irgendwie in das Array "Markierungen[]" bekommen.

Was für mich jetzt noch unverständlich ist, dass ist das Wechseln von HTML-Code zu PHP (ist ja einmal schon passiert), aber der INPUT-Code ist ja HTML und kann wohl jetzt nicht einfach mit einer Variable die ich im PHP-Teil definiert habe, belegt werden oder ? *sich grade die Haare rauft*

<?php
$dbhost = "";
$dbuser = "";
$dbpasswort = "";
$dbname = "";
$tabelle = "artikelliste";
$spalte0 = "id";
$spalte1 = "artikelnr";
$spalte2 = "material1";
$spalte3 = "material2";
$spalte4 = "material3";
$spalte5 = "material4";
$spalte6 = "laenge";
$spalte7 = "schliesse";
$spalte8 = "bildgross";
$spalte9 = "bildklein";
$spalte10 = "verkaufspreis";

$link = mysql_connect ($dbhost, $dbuser, $dbpasswort);
if (!$link) die ("Keine Verbindung zu MySQL");
mysql_select_db ($dbname, $link) or die ("Konnte Datenbank "$dbname" nicht öffnen:".mysql_error() );
$abfrage = "SELECT * FROM $tabelle ORDER BY $spalte0";
$resID = mysql_query ($abfrage, $link);
if (!$resID) die ("Fehler in der Abfrage");

while ($zeile = mysql_fetch_array($resID,MYSQL_ASSOC))
{
echo "<tr bgcolor='#DCDCEF'>";
echo "<td>".$zeile[$spalte1]."</font></td>";
echo "<td>".$zeile[$spalte2]."<br>".$zeile[$spalte3]."<br>".$zeile[$spalte4]."<br>".$zeile[$spalte5]."</font></td>";
echo "<td>".$zeile[$spalte6]."</font></td>";
echo "<td>".$zeile[$spalte7]."</font></td>";
echo "<td><a href=".$zeile[$spalte8]." target='_blank'><img src=".$zeile[$spalte9]." border=0></a></td>";
echo "<td>".$zeile[$spalte10]."</td>";
echo "</tr>";
echo "<tr bgcolor='#DDDDDD'>";
echo "<td>Artikel merken:";

?>
<input name="Markierung[]" type="checkbox" id="Markierung" value=<?php ($zeile[spalte1]) ?> />
<?PHP

echo "</td>";
echo "</tr>";
echo "</table>";
}
mysql_close($link);
?>

xabbuh
20.12.2004, 20:10:43
Original geschrieben von quirrly

<input name="Markierung[]" type="checkbox" id="Markierung" value=<?php ($zeile[spalte1]) ?> />
Daraus machst du das:

<input type="checkbox" name="Markierung[]" value="<?php echo $zeile[$spalte1]; ?>" />

quirrly
20.12.2004, 20:51:40
Original geschrieben von xabbuh
Daraus machst du das:

<input type="checkbox" name="Markierung[]" value="<?php echo $zeile[$spalte1]; ?>" />


Mist, jetzt habe ich diese Zeile mit meinem letzten Versuch gepostet, dort versuchte ich anstatt den Array´s Nummern zu verteilen, dem VALUE der zugehörigen Checkbox die aktuelle Artikelnummer des Artikels aus der Datenbank zu übergeben.

Aber egal, könnte auch ne Lösung sein sorum ;-)

Jetzt muss ich im darauffolgenden Script nur versuchen, zu den entsprechenden Artikelnummern noch Preis usw. zusätzlich auf den Bildschirm zu bringen, krieg ich aber hoffentlich hin nun.

Tja, kleine Fehler in der Schreibweise können einen zum Verzweifeln bringen, aber prinzipiell war ich schon auf dem richtigen Wege :-)

quirrly
21.12.2004, 14:43:38
Original geschrieben von xabbuh
Daraus machst du das:

<input type="checkbox" name="Markierung[]" value="<?php echo $zeile[$spalte1]; ?>" />



Das mit dem PHP ist irgendwie schwerer also ich gehofft habe :-

Ich komme immer noch nicht klar. Das mit der Checkboxen-Übermittlung will nur teilweise.

Die Artikelauswahl klappt, und wenn ich die ermittelten Daten auf das folgende PHP-Script übermittle, dann kann ich die VALUE-Inhalte der markierten Checkboxen anzeigen lassen.

Jetzt habe ich aber das Script noch etwas erweitert, und will mir zusätzlich zu den ermittelten Artikelnummern noch weitere Angaben zum Artikel anzeigen lassen. Hierzu greife ich wieder auf die Datenbank zurück.

Der einfachheithalber will ich jetzt erstmal nur eine zusätzliche Angabe anzeigen lassen.

Das heißt, ich muss in einer Schleife aus der $spalte1 (dort sind die Artikelnummern gespeichert) alle gewählten Artikel aussortieren lassen, und dann (bevor die Schleife zuende ist) gleich noch die anderen zugehörigen Daten auslesen.

Aber irgendwo habe ich nen Fehler drin :- ?? Ich vermute irgendwo in dem Befehl "SELECT", weil da vergleiche ich das entsprechende Artikelnummern-Feld der betreffenden Zeile mit $v (darin ist der VALUE-Wert der Checkbox enthalten).


<?php
$dbhost = "";
$dbuser = "";
$dbpasswort = "";
$dbname = "";
$tabelle = "artikelliste";
$spalte0 = "id";
$spalte1 = "artikelnr";
$spalte2 = "material1";
$spalte3 = "material2";
$spalte4 = "material3";
$spalte5 = "material4";
$spalte6 = "laenge";
$spalte7 = "schliesse";
$spalte10 = "verkaufspreis";

if (isset($_REQUEST['Markierung'])) {
reset($_REQUEST['Markierung']);
foreach ($_REQUEST['Markierung'] as $k => $v) {

$link = mysql_connect ($dbhost, $dbuser, $dbpasswort);
if (!$link) die ("Keine Verbindung zu MySQL");
mysql_select_db ($dbname, $link) or die ("Konnte Datenbank "$dbname" nicht öffnen:".mysql_error() );
$result = mysql_query("SELECT $spalte1 FROM $tabelle WHERE $spalte = $v");
while($zeile = mysql_fetch_array($result)) {
echo "Art.-Nr.".$zeile[$spalte1]." / ";
echo "Material:".$zeile[$spalte2]."<br>";
}
}
}
else {
echo "Sie haben keinerlei Artikel ausgewählt !n";
}

mysql_close($link);
?>

quirrly
21.12.2004, 14:53:31
P.S:

Ok, einem Fehler bin ich schonmal auf die Spur gekommen, ich habe in dieser Zeile:

$result = mysql_query("SELECT $spalte1 FROM $tabelle WHERE $spalte = $v");

eine "1" vergessen, muss so lauten:

$result = mysql_query("SELECT $spalte1 FROM $tabelle WHERE $spalte1 = $v");

wenn es jetzt das Script aufruft, nachdem ich Artikel markiert habe, dann erscheint allerdings nur jede Artikelnr des ausgewählten Artikel, aber keine weiteren Angaben, selbst wenn ich diese noch mehr vervollständige (also Preis usw.)

xabbuh
21.12.2004, 15:14:22
Du liest ja auch nur eine Spalte aus und nicht alle, die du anzeigen möchtest.

quirrly
21.12.2004, 15:34:22
Original geschrieben von xabbuh
Du liest ja auch nur eine Spalte aus und nicht alle, die du anzeigen möchtest.

Stimmt :-
Habs geändert:

$result = mysql_query("SELECT $spalte1,$spalte2,$spalte3,$spalte4,$spalte5,$spalte6,$spalte10 FROM $tabelle WHERE $spalte1 = $v");

Jetzt klappts, danke !