PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : If Schleife innerhalb einer Whileschleife


Sarah19
27.11.2004, 17:20:40
Hallo, habe ein Warenkorbsystem gemacht, und jetzt will ich ne Schleife einbauen, die wenn die Variable "pid" <20000000 ist 4,90 ausgibt und ansonsten 7,90. Brauche das fuer die Versandkosten, da die Artikel, mit den Nummern unter 20000000 guenstiger im Versand sind als die anderen.
Normal ware dass ja einfach nur:
<? if (pid<20000000) $versandkosten ="4,90";
else $versabdkosten ="7,90";
echo $versandkosten;
?>
Das problem ist aber, dass ich vorher ne while schleife habe, damir man eben jeden einzelnen Artikel auf der Warenkorbseite bearbeiten kann.Also so sieht die Schleife aus:


<?
$result = mysql_query("SELECT wkid, artikelbez, artikelnr, menge, stkpreis FROM warenkorb WHERE sid = '$sid'");
while($row = mysql_fetch_object($result)){

$wkid = $row -> wkid;
$artikelbez = $row -> artikelbez;
$artikelnr = $row -> artikelnr;
$menge = $row -> menge;
$stkpreis = $row -> stkpreis;

$gespreis = $menge * $stkpreis;

if(!isset($endpreis_ohne_versandkosten)) $endpreis_ohne_versandkosten = "";

$endpreis_ohne_versandkosten = $endpreis_ohne_versandkosten + $gespreis;
?>
<form action="warenkorb.php?action=edit&wkid=<? echo $wkid ?>" method="post">
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelbez ?></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelnr ?></font></td>
<td align="center"><input type="text" name="menge" value="<? echo $menge ?>" maxlength="3" size="2"> <input type="submit" name="aendern" value="Ändern"></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b><? echo $stkpreis ?> €</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $gespreis ?> €</b></font></td>
<td align="center"><a href="warenkorb.php?action=delete&wkid=<? echo $wkid ?>" title="Artikel aus dem Warenkorb löschen"><font face="verdana,arial" size="-2">Löschen</font></a></td>
</tr>
</form>
<?
}
?>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamtpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis_ohne_versandkosten ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Versandkosten:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b>
<? if (pid<20000000) $versandkosten ="4,90";
else $versabdkosten ="7,90";
echo $versandkosten;
?> €</b></font></td>

Mein Problem ist, dass mein Warenkorb immer 4,90 anzeigt und nie 7,90.

Aber ich will, dass sobald ein Artikel nicht <20000000 ist, sollen die Versandkosten 7,90 betragen. Und ich habe keine Ahnung, wie ich das realisieren kann.


Danke fuer eure Antworten.

dirter
27.11.2004, 17:48:31
[i]Original geschrieben von Sarah19
else $versabdkosten ="7,90";
[/B]

hi

muss da nicht "versaNdkosten" hin ;-)

Sarah19
27.11.2004, 18:25:38
aendert aber trotdem nix. Es wird immer nur 4,90 angezeigt und nie 7,90. :(

Aber das war schonmal ein fehler da drin.

Danke

xabbuh
27.11.2004, 19:43:24
Wo kommt den pid her? Bist du sicher, dass pid wirklich eine Konstante ist? Vermutlich hast du eine Spalte in der Datenbank, die so bezeichnet wird oder?
Vom Prinzip her, würde ich es so machen, dass du alle Artikelnummern in der Schleife in einem Array ablegst, anschließend das Array absteigend sortierst und dann überprüfst, ob das erste Element, welches somit auch das größte ist, größer als 20.000.000 ist:

<?php
$artikelNummern = array();
while($row = mysql_fetch_object($result)) {
$artikelNummern[] = $row->pid;

// hier alle weiteren Anweisungen in der Schleife abarbeiten
}
rsort($artikelNummern);
if($artikelNummern[0] < 20000000)
$versandkosten = '4,90';
else
$versandkosten = '7,90';
print $versandkosten;
?>

Gweilo
27.11.2004, 20:39:31
Bei solchen sachen ist echo dein bester freund. gib einfach mal an, was in der pid variable drinsteht, dann siehst du schnell, wo der haken sein könnte. Vermutlich ist die $pid variable nicht korrekt belegt.

Sarah19
28.11.2004, 00:41:56
@ Gweilo Habe echo $pid eingeben und bekomme keine Ausgabe. Was kann das bedeuten?
@ xabbuh jap pid kommt von der DB. Und ist belegt. Ich poste mal den gesamten Text, auch wenn dass ja eigentlich nicht so gewollt ist. Kleine Anmerkung, aus irgendeiner Laune herraus habe ich eine Variable $artikelnr benannt, ihr dann aber nicht nicht die artikelnummer des Artikels als Inhalr gegeben als weitere Textvariable definiert. Nur damit ihr euch nicht wundert. $pid ist die Nummer, die fuer jeden Artikel einzigartig ist.

<?


include("config.php");
$pid = $_POST["pid"];

if(!isset($_GET["action"])) $_GET["action"] = "";

/*
* Hole Session aus der Datei session.php
* und speichern diese in die Variabel '$sid'
*/

$sid = $_SESSION["sid"];

/*
* Wenn $_GET["action"] gleich insert ist
* Dann wird der Artikel aus dem Shop in die
* Datenbank Tabelle 'warenkorb' eingefügt.
* Am Ende wird man auf 'warenkorb.php' weitergeleitet
*/

if ($_GET["action"] == "insert"){

$pid = $_POST["pid"];
$menge = $_POST["menge"];

/*
* Wenn der User keine Menge oder Menge 0 eingegeben hat
* passier nichts. Man wird gleich in den Warenkorb weitergeleitet
*/

if ($menge == "0") header("Location: warenkorb.php");
else {

/*
* Wenn die Menge was anderes ist als 0 dann wird
* zuerst abgefragt, ob es diesen Artikel in der DB mit
* der Session des Users schon gibt
*
* Wenn ja, dann wird nur ein UPDATE gemacht, d.h. die
* Menge des Artikels Wird verändert, sonst nichts
*
* Wenn nein, dann wird der Artikel MIT der Session des
* Users gespeichert.
*/

$result = mysql_query("SELECT artikelbez, artikelnr, preis FROM produkt WHERE pid = '$pid'");
$show = mysql_fetch_array($result);

$artikelbez = $show["artikelbez"];
$artikelnr = $show["artikelnr"];
$preis = $show["preis"];

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid' AND pid = '$pid'");
$num = mysql_num_rows($result);


if ($num == "0") mysql_query("INSERT INTO warenkorb VALUES('','$sid','$pid','$artikelbez','$artikelnr','$menge','$preis')");
else mysql_query("UPDATE warenkorb SET menge=menge+$menge WHERE sid = '$sid' AND pid = '$pid'");

header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'edit' ist,
* wird abgefragt, was der User eingegeben hat.
*
* Wenn er bei Menge 0 eingegeben hat, so wird der Artikel
* aus dem Warenkorb gelöscht.
*
* Wenn er was anderes eingegeben hat, so wird ein UPDATE
* gemacht, d.h. die Menge wird des Artikels wird geändert
* sonst nichts :D
*/

if ($_GET["action"] == "edit"){

$wkid = $_GET["wkid"];
$menge = $_POST["menge"];

if ($menge == "0"){
mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}else{
mysql_query("UPDATE warenkorb SET menge = '$menge' WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'delete' ist,
* dann wird nach der Wkid gefrage, die ich
* in der Linkleiste mitgegeben habe
*
* Dann wird der Artikel aus dem Warenkorb gelöscht
*/

if ($_GET["action"] == "delete"){

$wkid = $_GET["wkid"];

mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}

/*
* Wenn 'action' gleich 'delete_all' ist,
* dann wird der ganze Warenkorb des Users gelöscht
*/

if ($_GET["action"] == "delete_all"){
mysql_query("DELETE FROM warenkorb WHERE sid = '$sid'");
header("Location: warenkorb.php");
}

/*
* Wenn es 'action' nicht gibt, dann wird das hier
* angezeigt:
*
* Gleich am Anfang wird abgefragt, ob es was in der
* DB gibt mit der Session.
*
* Falls ja, dann ist die Variable $warenkorb = voll
* Falls nein, dann ist die Variable $warenkorb = leer
*/

if ($_GET["action"] == ""){

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid'");
$num = mysql_num_rows($result);

if ($num == "0") $warenkorb = "leer";
else $warenkorb = "voll";
?>

<html>
<head>
<title>Online CD - Shop Warenkorb</title>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">
<tr>
<td align="center">
<table border="1" bordercolor="#000000" cellpadding="5" cellspacing="1" height="100%" width="800" rules="groups">
<tr>
<td align="center" colspan="6" valign="top">
<font color="#000000" face="verdana,arial" size="-1"><b>Warenkorb</b></font>
</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelbezeichnung</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelnummer</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Menge</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>E. Preis</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamt</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<?
/*
* Hier wird nach der Variable $warenkorb gefragt
* die wir weiter oben defeniert haben
*
* Wenn $warekorb gleich leer ist dann wird das hier
* angezeigt (in meinem Bsp: Ihr Warenkorb ist leer!)
*/

if ($warenkorb == "leer"){
?>
<tr>
<td align="center" colspan="6"><font color="#FF0033" face="verdana,arial" size="-1"><b>Ihr Warenkorb ist leer!</b></font></td>
</tr>
<?
/*
* Wenn $warenkorb was anderes ist als leer
* dann wird das hier angezeigt
*
* Ich frage mit SELECT in der DB nach, was der
* User für Artikel im Warenkorb hat
*
* Dann erstelle ich eine Schleife, d.h.
* Für jeden Artikel wird eine Zeile angezeigt. Es muss für jede
* Zeile ein Formular gemacht werden, damit der User
* einzelne Artikel löschen oder editieren kann
*/

}else{

$result = mysql_query("SELECT wkid, artikelbez, artikelnr, menge, stkpreis FROM warenkorb WHERE sid = '$sid'");
while($row = mysql_fetch_object($result)){

$wkid = $row -> wkid;
$artikelbez = $row -> artikelbez;
$artikelnr = $row -> artikelnr;
$menge = $row -> menge;
$stkpreis = $row -> stkpreis;

$gespreis = $menge * $stkpreis;

if(!isset($endpreis_ohne_versandkosten)) $endpreis_ohne_versandkosten = "";

$endpreis_ohne_versandkosten = $endpreis_ohne_versandkosten + $gespreis;
?>
<form action="warenkorb.php?action=edit&wkid=<? echo $wkid ?>" method="post">
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelbez ?></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelnr ?></font></td>
<td align="center"><input type="text" name="menge" value="<? echo $menge ?>" maxlength="3" size="2"> <input type="submit" name="aendern" value="Ändern"></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b><? echo $stkpreis ?> €</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $gespreis ?> €</b></font></td>
<td align="center"><a href="warenkorb.php?action=delete&wkid=<? echo $wkid ?>" title="Artikel aus dem Warenkorb löschen"><font face="verdana,arial" size="-2">Löschen</font></a></td>
</tr>
</form>
<?
}
?>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamtpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis_ohne_versandkosten ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Versandkosten:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b>
<? $artikelNummern = array();
while($row = mysql_fetch_object($result)) {
$artikelNummern[] = $row->pid;

// hier alle weiteren Anweisungen in der Schleife abarbeiten
}
rsort($artikelNummern);
if($artikelNummern[0] > 20000000)
$versandkosten = '4,90';
else
$versandkosten = '7,90';
print $versandkosten;
print $pid;
?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="6">&nbsp;</td>
</tr>
<? $endpreis = $endpreis_ohne_versandkosten + $versandkosten;
?>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Endpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><a href="warenkorb.php?action=delete_all" title="Ganzer Warenkorb löschen">Warenkorb löschen</a></td>
<td align="center"><a href="bestellformular.php" title="Zum Bestellformular">Bestellen</a></td>
<td>&nbsp;</td>
</tr>
<?
}
?>
<tr>
<td colspan="6" height="100%">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>

</body>
</html>

<?
}
?>

<?
@MYSQL_CLOSE($db);
?>


Hoffe ihr koennt den Fehler finden, denn ich finde ihn nicht.*schaem*

Danke

xabbuh
28.11.2004, 13:55:18
Die Änderungen, die ich dir geschrieben habe, kannst du wohl weglassen, da $pid ja aus dem Formular kommen soll. Du kannst zur Überprüfung also ruhig wieder auf die ursprüngliche Abfrage zurückgreifen:

<?php
if($pid<20000000)
$versandkosten ="4,90";
else
$versabdkosten ="7,90";

echo $versandkosten;
?>

Du musst dem Script nur noch sagen, dass $pid dem Element pid aus dem $_POST-Array entspricht. Dazu kannst du einfach hinter die Zeile

if ($_GET["action"] == ""){

einfach noch diese Zeile einfügen, die du auch schon in einer anderen Abfrage nutzt:

$pid = $_POST['pid'];

Sarah19
29.11.2004, 22:00:22
Hallo,
es klappt immernoch nicht.
Ich weiss nicht wieso, aber wenn ich <? echo $pid ?> irgendwo eingebe, also anstatt des Textes Versandkosten: gibt mir mein Programm nix aus. Ich habe die Zeile $pid = $_POST['pid']; schon gleich nach include gesetzt und es haut trotzdem nicht hin.

Sorry wegen all dieser Probleme ich weiss eure hilfe/Bemuehungen, vor allem deine xabbuh zu schaetzen.

Gruezi

c4
30.11.2004, 07:55:39
Ich weiß, trägt nicht zum Thema bei:
--> Was sind eigentlich if-Schleifen? (http://www.php-faq.de/q/q-terminologie-if.html)

xabbuh
30.11.2004, 08:26:42
Schreibe deinen Code, so wie du ihn jetzt hast (auch ruhig mit echo $pid) in ein Nopaste (http://nopaste.php-q.net) und setzt den Link hier rein. Die Zeilen mit reinem HTML kannst du ruhig weglassen.

Ziege2k
30.11.2004, 12:38:46
also dein problem ist das $_POST bzw. $_GET das sind zwei verschieden
arten wie man dem server daten übergeben kann und normal ist immer
nur eins möglich, also entweder du greifst mit get oder post zu.

post sendet die variablen nachdem der browser denn header an den server gesendet hat

und get hängt die variablen einfach mit einem "?"(Standart) and den link an!

MFG Ziege2k

Sarah19
30.11.2004, 12:44:17
Heisst also, dass ich am Anfang POST_$pid nehmen muss und nicht Get?


Gruezi

xabbuh
30.11.2004, 13:47:56
Original geschrieben von Sarah19
Heisst also, dass ich am Anfang POST_$pid nehmen muss und nicht Get?


Gruezi

$pid = $_POST['pid']

Aber das hattest du doch schon oder habe ich dich falsch verstanden? Zeig mal, wie dein Script jetzt aussieht.

Ziege2k
30.11.2004, 15:49:10
@sarah19

also wenn du denn link aus einem formular aufrufst mit "get" oder "post" musst du das nehmen was du ha hingeschrieben hast.
wenn du aber mit z. B. <a href="link?var=value">name</a> gearbeitet hast muss du "get" nehmen.

MFG Ziege2k

Sarah19
30.11.2004, 22:46:53
Ich hole die Daten aus einer DB, in die alle Daten vorher reingepackt wurden. Quasi, habe ich zwei Tabellen. Eine mit allen Artikeln und dann eine mit den Artikeln, die ein bestimmter Kunde in seinem Warenkorb hat. Aus dieser werden dann die Daten ausgelsen und es klappt mit allen ausser $pid. Denn $artikelbez, $artikelnr, $menge, $stkpreis wowie $wkid werden alle samt ausgelesen. $wkid ist die perosenliche nummer eines jeden Kunden.

@xabuhh jap sorry, war da irgendwie durch den Wind.Hab das Script oben so gemacht, wie ich es jetzt habe. Oben mit POST und wieter unten mit print $pid; direkt nachdem die if Schleife kommt.

Danke fuer eure Hilfe.

xabbuh
01.12.2004, 09:22:07
Zeig trotzdem mal den Code, so wie er jetzt ist.

Sarah19
01.12.2004, 11:55:01
Der code oben ist so wie ich ihn jetzt habe!
Habe den Beitrag bearbeitet so dass das hier nicht zu doll ausartet.



Danke

Sarah19
03.12.2004, 16:24:15
Hi Leute,
habe es geschafft, dass $pid ausgegeben wird! Da ich die Variable aus ner Tabelle hole geht Post nicht! Sondern ich muss es ueber einen mysql_query befehl machen. Habe das jetzt auch realisiert. Also hier der Quelltext, so wie er jetzt ist!
Es besteht aber weiterhin das Problem, dass ich es nicht sortiert bekomme.
<?

/*
* Der Inhalt der Datei config wird geholt.
* D.h. Es wird eine Verbindung zur Mysql
* Datenbank erstellt.
*/

include("config.php");
/*
* Hier wird abgefragt, ob es in der Linkliste action gibt
* Falls wenn, dann wird action erstellt
*/

if(!isset($_GET["action"])) $_GET["action"] = "";

/*
* Hier holen wir die Session aus der Datei session.php
* und speichern diese in die Variabel '$sid'
*/

$sid = $_SESSION["sid"];

/*
* Wenn $_GET["action"] gleich insert ist
* Dann wird der Artikel aus dem Shop in die
* Datenbank Tabelle 'warenkorb' eingefügt.
* Am Ende wird man auf 'warenkorb.php' weitergeleitet
*/

if ($_GET["action"] == "insert"){

$pid = $_POST["pid"];
$menge = $_POST["menge"];

/*
* Wenn der User keine Menge oder Menge 0 eingegeben hat
* passier nichts. Man wird gleich in den Warenkorb weitergeleitet
*/

if ($menge == "0") header("Location: warenkorb.php");
else {

/*
* Wenn die Menge was anderes ist als 0 dann wird
* zuerst abgefragt, ob es diesen Artikel in der DB mit
* der Session des Users schon gibt
*
* Wenn ja, dann wird nur ein UPDATE gemacht, d.h. die
* Menge des Artikels Wird verändert, sonst nichts
*
* Wenn nein, dann wird der Artikel MIT der Session des
* Users gespeichert.
*
* Die Session ist wichtig, weil man
* sonst keine eindeutige abfrage machen könnte über den
* Warenkorb. Es könnte dann passieren, dann ein Peter den
* Warenkorb von Anna sieht anstatt seinen
*/

$result = mysql_query("SELECT artikelbez, artikelnr, preis, pid FROM produkt WHERE pid = '$pid'");
$show = mysql_fetch_array($result);

$artikelbez = $show["artikelbez"];
$artikelnr = $show["artikelnr"];
$preis = $show["preis"];
$pid = $show["pid"];

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid' AND pid = '$pid'");
$num = mysql_num_rows($result);


if ($num == "0") mysql_query("INSERT INTO warenkorb VALUES('','$sid','$pid','$artikelbez','$artikelnr','$menge','$preis')");
else mysql_query("UPDATE warenkorb SET menge=menge+$menge WHERE sid = '$sid' AND pid = '$pid'");

header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'edit' ist,
* wird abgefragt, was der User eingegeben hat.
*
* Wenn er bei Menge 0 eingegeben hat, so wird der Artikel
* aus dem Warenkorb gelöscht.
*
* Wenn er was anderes eingegeben hat, so wird ein UPDATE
* gemacht, d.h. die Menge wird des Artikels wird geändert
* sonst nichts :D
*/

if ($_GET["action"] == "edit"){

$wkid = $_GET["wkid"];
$menge = $_POST["menge"];

if ($menge == "0"){
mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}else{
mysql_query("UPDATE warenkorb SET menge = '$menge' WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'delete' ist,
* dann wird nach der Wkid gefrage, die wir
* in der Linkleiste mitgegeben haben
*
* Dann wird der Artikel aus dem Warenkorb gelöscht
*/

if ($_GET["action"] == "delete"){

$wkid = $_GET["wkid"];

mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}

/*
* Wenn 'action' gleich 'delete_all' ist,
* dann wird der ganze Warenkorb des Users gelöscht
*/

if ($_GET["action"] == "delete_all"){
mysql_query("DELETE FROM warenkorb WHERE sid = '$sid'");
header("Location: warenkorb.php");
}

/*
* Wenn es 'action' nicht gibt, dann wird das hier
* angezeigt:
*
* Gleich am Anfang wird abgefragt, ob es was in der
* DB gibt mit der Session.
*
* Falls ja, dann ist die Variable $warenkorb = voll
* Falls nein, dann ist die Variable $warenkorb = leer
*
* Was das bringt, werdet ihr gleich erfahren
*/

if ($_GET["action"] == ""){

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid'");
$num = mysql_num_rows($result);

if ($num == "0") $warenkorb = "leer";
else $warenkorb = "voll";
?>

<html>
<head>
<title>Online CD - Shop Warenkorb</title>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">
<tr>
<td align="center">
<table border="1" bordercolor="#000000" cellpadding="5" cellspacing="1" height="100%" width="800" rules="groups">
<tr>
<td align="center" colspan="6" valign="top">
<font color="#000000" face="verdana,arial" size="-1"><b>Warenkorb</b></font>
</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelnummer</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelbezeichnung</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Menge</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>E. Preis</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamt</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<?
/*
* Hier wird nach der Variable $warenkorb gefragt
* die wir weiter oben defeniert haben
*
* Wenn $warekorb gleich leer ist dann wird das hier
* angezeigt (in meinem Bsp: Ihr Warenkorb ist leer!)
*/

if ($warenkorb == "leer"){
?>
<tr>
<td align="center" colspan="6"><font color="#FF0033" face="verdana,arial" size="-1"><b>Ihr Warenkorb ist leer!</b></font></td>
</tr>
<?
/*
* Wenn $warenkorb was anderes ist als leer
* dann wird das hier angezeigt
*
* Wir fragen mit SELECT in der DB nach, was der
* User für Artikel im Warenkorb hat
*
* Dann erstellen wir eine Schleife, d.h.
* Für jeden Artikel wird eine Zeile angezeigt. Es muss für jede
* Zeile ein Formular gemacht werden, damit der User
* einzelne Artikel löschen oder editieren kann
*
* Weiter unten wird dann der Gesamtpreis der einzelnen Artikel
* ausgerechnet und dann auch gleich der Endpreis
*/

}else{

$result = mysql_query("SELECT wkid, artikelbez, artikelnr, menge, stkpreis, pid FROM warenkorb WHERE sid = '$sid'");
while($row = mysql_fetch_object($result)){


$wkid = $row -> wkid;
$artikelbez = $row -> artikelbez;
$artikelnr = $row -> artikelnr;
$menge = $row -> menge;
$stkpreis = $row -> stkpreis;
$pid = $row -> pid;

$gespreis = $menge * $stkpreis;

if(!isset($endpreis_ohne_versandkosten)) $endpreis_ohne_versandkosten = "";

$endpreis_ohne_versandkosten = $endpreis_ohne_versandkosten + $gespreis;
?>
<form action="warenkorb.php?action=edit&wkid=<? echo $wkid ?>" method="post">
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $pid ?></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelbez;?> <? echo $artikelnr ?></font></td>
<td align="center"><input type="text" name="menge" value="<? echo $menge ?>" maxlength="3" size="2"> <input type="submit" name="aendern" value="Ändern"></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b><? echo $stkpreis ?> €</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $gespreis ?> €</b></font></td>
<td align="center"><a href="warenkorb.php?action=delete&wkid=<? echo $wkid ?>" title="Artikel aus dem Warenkorb löschen"><font face="verdana,arial" size="-2">Löschen</font></a></td>
</tr>
</form>
<?
}
?>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamtpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis_ohne_versandkosten ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Versandkosten:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b>
<? $artikelNummern = array();
while($row = mysql_fetch_object($result)) {
$artikelNummern[] = $row->pid;

}
sort($artikelNummern);
if($artikelNummern[0] > '20000000')
$versandkosten = '7.90';
else
$versandkosten = '4.90';
print $versandkosten;


€</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="6">&nbsp;</td>
</tr>
<? $endpreis = $endpreis_ohne_versandkosten + $versandkosten;
?>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Endpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis ?> €</b></font></td>
<td>&nbsp;</td>
</tr>


Also was ich mit der Schleife erreichen will

<? $artikelNummern = array();
while($row = mysql_fetch_object($result)) {
$artikelNummern[] = $row->pid;

}
sort($artikelNummern);
if($artikelNummern[0] > '20000000')
$versandkosten = '7.90';
else
$versandkosten = '4.90';
print $versandkosten;
?>
ist folgendes. Sobald der groesste Wert von $pid ueber 20000000 ist soll $versandkosten auf 7.90 ngesetzt werden, ansonsten auf 4.90. Musste den Schluss des codes loeschen, da zu lang!

Hat irgendjemand eine Idee, wie ich das realisieren kann? $pid wird jetzt ausgegeben.

Danke vielamls

xabbuh
03.12.2004, 19:05:31
Wenn $pid aus der ersten Datenbankabfrage kommt, brauchst du die pids der zweiten Abfrage natürlich nicht mehr weiter beachten.
Bastel die Abfrage einfach so um:

<?php
if($pid > '20000000')
$versandkosten = '7.90';
else
$versandkosten = '4.90';
print $versandkosten;
?>

Sarah19
03.12.2004, 19:56:04
Das Problem dabei ist nur, dass das Programm dabei nur den ersten Artikel betrachtet. Also ob der groesser oder kleiner ist, als der Grenzwert fuer $pid. Und da ist mein Problem. Ich kenne mich mit Schleifen etc nicht so gut aus, deshalb habe ich auch nicht wirklich ne Ahnung was ich dabei machen kann.

Gruezi

Sarah19
04.12.2004, 15:39:41
Hab den Fehler gefunden! Fuer alle die, die es interessiert. Das sortieren geht indem ich ganz einfach nur in der Tabellenabfrage ORDER BY pid DESC Wobei die Ausgabe nach pid sortiert wird und DESC fuehrt dazu, dass es absteigend sortiert wird. Dann brauchte ich nur noch das von Xabbuh vorgeschlagene durchfuehren und es klappte. Hab das aber ein wenig gestreut. Hier nochmal der Quelltext, so wie er jetzt ist.
<?

/*
* Der Inhalt der Datei config wird geholt.
* D.h. Es wird eine Verbindung zur Mysql
* Datenbank erstellt.
*/

include("config.php");
/*
* Hier wird abgefragt, ob es in der Linkliste action gibt
* Falls wenn, dann wird action erstellt
*/

if(!isset($_GET["action"])) $_GET["action"] = "";

/*
* Hier holen wir die Session aus der Datei session.php
* und speichern diese in die Variabel '$sid'
*/

$sid = $_SESSION["sid"];

/*
* Wenn $_GET["action"] gleich insert ist
* Dann wird der Artikel aus dem Shop in die
* Datenbank Tabelle 'warenkorb' eingefügt.
* Am Ende wird man auf 'warenkorb.php' weitergeleitet
*/

if ($_GET["action"] == "insert"){

$pid = $_POST["pid"];
$menge = $_POST["menge"];

/*
* Wenn der User keine Menge oder Menge 0 eingegeben hat
* passier nichts. Man wird gleich in den Warenkorb weitergeleitet
*/

if ($menge == "0") header("Location: warenkorb.php");
else {

/*
* Wenn die Menge was anderes ist als 0 dann wird
* zuerst abgefragt, ob es diesen Artikel in der DB mit
* der Session des Users schon gibt
*
* Wenn ja, dann wird nur ein UPDATE gemacht, d.h. die
* Menge des Artikels Wird verändert, sonst nichts
*
* Wenn nein, dann wird der Artikel MIT der Session des
* Users gespeichert.
*
* Die Session ist wichtig, weil man
* sonst keine eindeutige abfrage machen könnte über den
* Warenkorb. Es könnte dann passieren, dann ein Peter den
* Warenkorb von Anna sieht anstatt seinen
*/

$result = mysql_query("SELECT artikelbez, artikelnr, preis, pid FROM produkt WHERE pid = '$pid'");
$show = mysql_fetch_array($result);

$artikelbez = $show["artikelbez"];
$artikelnr = $show["artikelnr"];
$preis = $show["preis"];
$pid = $show["pid"];

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid' AND pid = '$pid'");
$num = mysql_num_rows($result);


if ($num == "0") mysql_query("INSERT INTO warenkorb VALUES('','$sid','$pid','$artikelbez','$artikelnr','$menge','$preis')");
else mysql_query("UPDATE warenkorb SET menge=menge+$menge WHERE sid = '$sid' AND pid = '$pid'");

header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'edit' ist,
* wird abgefragt, was der User eingegeben hat.
*
* Wenn er bei Menge 0 eingegeben hat, so wird der Artikel
* aus dem Warenkorb gelöscht.
*
* Wenn er was anderes eingegeben hat, so wird ein UPDATE
* gemacht, d.h. die Menge wird des Artikels wird geändert
* sonst nichts :D
*/

if ($_GET["action"] == "edit"){

$wkid = $_GET["wkid"];
$menge = $_POST["menge"];

if ($menge == "0"){
mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}else{
mysql_query("UPDATE warenkorb SET menge = '$menge' WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}
}

/*
* Wenn 'action' gleich 'delete' ist,
* dann wird nach der Wkid gefrage, die wir
* in der Linkleiste mitgegeben haben
*
* Dann wird der Artikel aus dem Warenkorb gelöscht
*/

if ($_GET["action"] == "delete"){

$wkid = $_GET["wkid"];

mysql_query("DELETE FROM warenkorb WHERE wkid = '$wkid'");
header("Location: warenkorb.php");
}

/*
* Wenn 'action' gleich 'delete_all' ist,
* dann wird der ganze Warenkorb des Users gelöscht
*/

if ($_GET["action"] == "delete_all"){
mysql_query("DELETE FROM warenkorb WHERE sid = '$sid'");
header("Location: warenkorb.php");
}

/*
* Wenn es 'action' nicht gibt, dann wird das hier
* angezeigt:
*
* Gleich am Anfang wird abgefragt, ob es was in der
* DB gibt mit der Session.
*
* Falls ja, dann ist die Variable $warenkorb = voll
* Falls nein, dann ist die Variable $warenkorb = leer
*
* Was das bringt, werdet ihr gleich erfahren
*/

if ($_GET["action"] == ""){

$result = mysql_query("SELECT wkid FROM warenkorb WHERE sid = '$sid'");
$num = mysql_num_rows($result);

if ($num == "0") $warenkorb = "leer";
else $warenkorb = "voll";
?>

<html>
<head>
<title>Online CD - Shop Warenkorb</title>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">
<tr>
<td align="center">
<table border="1" bordercolor="#000000" cellpadding="5" cellspacing="1" height="100%" width="800" rules="groups">
<tr>
<td align="center" colspan="6" valign="top">
<font color="#000000" face="verdana,arial" size="-1"><b>Warenkorb</b></font>
</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelnummer</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Artikelbezeichnung</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Menge</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>E. Preis</b></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamt</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<?
/*
* Hier wird nach der Variable $warenkorb gefragt
* die wir weiter oben defeniert haben
*
* Wenn $warekorb gleich leer ist dann wird das hier
* angezeigt (in meinem Bsp: Ihr Warenkorb ist leer!)
*/

if ($warenkorb == "leer"){
?>
<tr>
<td align="center" colspan="6"><font color="#FF0033" face="verdana,arial" size="-1"><b>Ihr Warenkorb ist leer!</b></font></td>
</tr>
<?
/*
* Wenn $warenkorb was anderes ist als leer
* dann wird das hier angezeigt
*
* Wir fragen mit SELECT in der DB nach, was der
* User für Artikel im Warenkorb hat
*
* Dann erstellen wir eine Schleife, d.h.
* Für jeden Artikel wird eine Zeile angezeigt. Es muss für jede
* Zeile ein Formular gemacht werden, damit der User
* einzelne Artikel löschen oder editieren kann
*
* Weiter unten wird dann der Gesamtpreis der einzelnen Artikel
* ausgerechnet und dann auch gleich der Endpreis
*/

}else{
$artikelNummern = array();
$result = mysql_query("SELECT wkid, artikelbez, artikelnr, menge, stkpreis, pid FROM warenkorb WHERE sid = '$sid' ORDER BY pid DESC");
while($row = mysql_fetch_object($result)){


$wkid = $row -> wkid;
$artikelbez = $row -> artikelbez;
$artikelnr = $row -> artikelnr;
$menge = $row -> menge;
$stkpreis = $row -> stkpreis;
$pid = $row -> pid;

$gespreis = $menge * $stkpreis;
$artikelNummern[] = $row->pid;

// hier alle weiteren Anweisungen in der Schleife abarbeiten


if(!isset($endpreis_ohne_versandkosten)) $endpreis_ohne_versandkosten = "";

$endpreis_ohne_versandkosten = $endpreis_ohne_versandkosten + $gespreis;
?>
<form action="warenkorb.php?action=edit&wkid=<? echo $wkid ?>" method="post">
<tr>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $pid ?></font></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><? echo $artikelbez;?> <? echo $artikelnr ?></font></td>
<td align="center"><input type="text" name="menge" value="<? echo $menge ?>" maxlength="3" size="2"> <input type="submit" name="aendern" value="Ändern"></td>
<td align="center"><font color="#000000" face="verdana,arial" size="-1"><b><? echo $stkpreis ?> €</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $gespreis ?> €</b></font></td>
<td align="center"><a href="warenkorb.php?action=delete&wkid=<? echo $wkid ?>" title="Artikel aus dem Warenkorb löschen"><font face="verdana,arial" size="-2">Löschen</font></a></td>
</tr>
</form>
<?
}
?>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Gesamtpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis_ohne_versandkosten ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Versandkosten:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b>
<?
if($artikelNummern[0] < '20000000')
$versandkosten = '4.90';
else
$versandkosten = '7.90';
echo $versandkosten;
?>


€</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="6">&nbsp;</td>
</tr>
<? $endpreis = $endpreis_ohne_versandkosten + $versandkosten;
?>
<tr>
<td align="right" colspan="4"><font color="#000000" face="verdana,arial" size="-1"><b>Endpreis:</b></font></td>
<td align="center"><font color="#FF0033" face="verdana,arial" size="-1"><b><? echo $endpreis ?> €</b></font></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="6">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="4"><a href="warenkorb.php?action=delete_all" title="Ganzer Warenkorb löschen">Warenkorb löschen</a></td>
<td align="center"><a href="bestellformular.php" title="Zum Bestellformular">Bestellen</a></td>
<td>&nbsp;</td>
</tr>
<?
}
?>
<tr>
<td colspan="6" height="100%">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>

</body>
</html>

<?
}
?>

<?
@MYSQL_CLOSE($db);
?>

Danke fuer eure Hilfe, vor allem @Xabbuh