PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vergleichsoperatoren falsch ?


quirrly
02.01.2005, 16:51:01
Hallo,

Hab mal wieder ein Problem. Ich hab in meinem kürzlich erstellten Warenkorbsystem was geändert, und nun habe ich Probleme mit der Versandkosten Rechnung.


if (isset($_REQUEST['Versand'])) {
if ($Versand == "Versand per Einschreiben") {
$_SESSION['Versandkosten'] = 4.5;
}
if ($Versand == "Versand per versichertes Paket (Deutschland)") {
$_SESSION['Versandkosten'] = 6.5;
}
if ($Versand == "Versand per versichertes Paket (Ausland)") {
$_SESSION['Versandkosten'] = 17.0;
}
else {
$_SESSION['Versandkosten'] = 0.0;
}
}



Ich übergebe die Versandkostenauswahl mit Hilfe von Radio-Buttons in die Variable $Versand. Darin ist der komplette Text der Versandmöglichkeit aus VALUE gespeichert. Im nächsten Script (Kasse) soll es mir zum Einen die gewählte Versandart ausdrucken, bzw. mit der oben stehenden Zeile die Versandkosten in EUR auswählen. Das geschieht, indem es einfach den enthaltenen Text vergleicht. Sieht vielleicht etwas unkonventionell aus o.k., aber im Prinzip müsste es so gehen. Die Versandkosten soll es nun in der §_SESSION['Versandkosten'] speichern.

Im Script "Kasse" erscheint es dann im Wesentlichen auch richtig, allerdings nur bei Auslandsversand, und bei Abholung, bei Paket Deutschland, und Einschreiben erscheint beidesmal 0.00 EUR !

Warum ?

xabbuh
02.01.2005, 21:34:26
Das else bezieht sich nur auf die letzte if-Abfrage. Deshalb werden die Werte, die du $_SESSION['Versandkosten'] vorher möglicherweise schon zugewiesen hast, hier überschrieben. Das kannst du aber leicht durch die Verwendung von elseif verhindern.
Noch besser wäre es mit einer switch-Abfrage:

<?php
switch($Versand) {
case 'Versand per Einschreiben':
$_SESSION['Versandkosten'] = 4.5;
break;
case 'Versand per versichertes Paket (Deutschland)':
$_SESSION['Versandkosten'] = 6.5;
break;
case 'Versand per versichertes Paket (Ausland)':
$_SESSION['Versandkosten'] = 17;
break;
default:
$_SESSION['Versandkosten'] = 0;
}
?>

quirrly
02.01.2005, 22:06:28
Original geschrieben von xabbuh
Das else bezieht sich nur auf die letzte if-Abfrage. Deshalb werden die Werte, die du $_SESSION['Versandkosten'] vorher möglicherweise schon zugewiesen hast, hier überschrieben. Das kannst du aber leicht durch die Verwendung von elseif verhindern.
Noch besser wäre es mit einer switch-Abfrage:

<?php
switch($Versand) {
case 'Versand per Einschreiben':
$_SESSION['Versandkosten'] = 4.5;
break;
case 'Versand per versichertes Paket (Deutschland)':
$_SESSION['Versandkosten'] = 6.5;
break;
case 'Versand per versichertes Paket (Ausland)':
$_SESSION['Versandkosten'] = 17;
break;
default:
$_SESSION['Versandkosten'] = 0;
}
?>


Ok, es geht nun, ich habs allerdings zufälligerweise anderst hinbekommen, und zwar habe ich ELSE weggelassen, und dafür einfach nochmal ne IF-Anweisung gschrieben, in dem ich konkret auf die Versandart "Abholung" überprüfe, andere Varianten kanns ja auch gar nicht geben, nur diese 4. Jetzt gehts.

Aber nun habe ich ein anderes Problem:
Und zwar muss ich noch die Artikelnummern der ausgewählten Artikel aus dem Warenkorb in einer eMail an mich übertragen. Ich hab ein Mords-Formular mit allen Adress-Angaben, Kommunikation, zusätzliche Fragen, Liefertermin usw. Alles kein Problem, funzt einwandfrei, nur bekomm ich die saublöden Artikelnummern nicht aufgelistet. Das blöde ist ja, das ich die Nummern in einen String zusammenfassen muss, aber mit meinem Script addiert es die 7stelligen Zahlen einfach alle zusammen :-

Muss dazu sagen, dass ich mir die Artikeldaten bei jedem Script das auf die ausgewählten Artikel aus dem Warenkorb zurückgreift, mit jedem Male neu aus der MySQL-Datenbank hole, und nicht alles komplett in der Session speichere, lediglich die Artikelnummern. Nur jetzt in der Schlussüberprüfung dachte ich, ich hol die Nummer wieder aus der Datenbank.

Wenn ich zum Beispiel diese 3 Artikel-Nummern: 1000002 + 1000003 + 1000004 in ein String zusammenfassen will, dann kommt da also nicht: "1000002 1000003 1000004" heraus, sondern "3000009", weil es addiert wird.


if (isset($_SESSION['Artikelwahl'])) {
foreach ($_SESSION['Artikelwahl'] as $v) {
$result = mysql_query("SELECT * FROM $tabelle WHERE $spalte1 = $v");
$Artikelanzahl++;
while($zeile = mysql_fetch_array($result)) {
$Artikelzeile[$Artikelanzahl] = $zeile[$spalte1];
}
$Artikellist = $Artikellist + $Artikelzeile[$Artikelanzahl]+"n";
}
}
echo $Artikellist;

xabbuh
02.01.2005, 22:08:16
Der Verkettungsoperator (http://tut.php-q.net/verkettungsoperator.html) in PHP ist der Punkt und nicht das Pluszeichen.