Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Warenkorb
Frage
Hallo allerseits,
ich habe mal versucht, auf der Basis von Cookies einen Warenkorb zu erstellen. Nun habe ich aber das Problem, dass, wenn jemand auf "Warenkorb" klickt, sich der Warenkorb automatisch (wäre besser) oder per Mausklick auf einen Button aktualisiert. Habe folgendes versucht, aber funzt nicht. Kann mir jemand sagen, warum?
Gruß, Üsch
[quote]<?php
echo "Hallo Herr " . $HTTP_COOKIE_VARS["vorname"];
echo " " . $HTTP_COOKIE_VARS["nachname"];
echo ", Sie haben folgendes zu Ihrem Warenkorb hinzugefügt:<br/><br/>" . $HTTP_COOKIE_VARS["anzahl"];
echo " " . $HTTP_COOKIE_VARS["bestellung"];
if ($HTTP_POST_VARS ["refresh"]) {
header( "location: $PHP_SELF?" );
}
?>
<input type="button" value="Refresh" name="refresh">[/quote]
Antwort 1 von helfer_001
ich fang zwar selber erst an mit php aber soweit ich weiß braucht man da noch einen form-tag um den input.
Oder geht das auch ohne?
ich wür mal versuchen im form tag zu aktualisieren:
das müsste es eigentlich erledigen (aßer ich hab mich vertippt^^)
aber ich würde den Warenkorb eher mit sessions machen statt mit cookies, das ist doch viel einfacher...
Oder geht das auch ohne?
ich wür mal versuchen im form tag zu aktualisieren:
<form action="$PHP_SELF" method="POST">
<input type="button" value="Refresh" name="">
</form>das müsste es eigentlich erledigen (aßer ich hab mich vertippt^^)
aber ich würde den Warenkorb eher mit sessions machen statt mit cookies, das ist doch viel einfacher...
Antwort 2 von helfer_001
nein das PHP_SELF muss ja im php ausgeführt erden also so ungefähr:
<form action=" <?php echo $PHP_SELF; ?>" method="POST">
<input type="button" value="Refresh" name="">
</form>
so müsste es gehen ...
kanns leider derzeit nicht ausprobieren sry
<form action=" <?php echo $PHP_SELF; ?>" method="POST">
<input type="button" value="Refresh" name="">
</form>
so müsste es gehen ...
kanns leider derzeit nicht ausprobieren sry
Antwort 3 von Uesch
Danke erstmal, aber funzt leider trotzdem nicht :(
Antwort 4 von rabies
Dass das oben gezeigte Script-Snippet nicht funktioniert, kann verschiedene Gründe haben, zum einen verwendest Du keine Superglobalen Variablen, diese sind seit Version 4.1.x in PHP vorhanden, und sollten auch genutzt werden. Ich mutmaße, dass auf Deinem Webspace/Server eine neuere Version von PHP installiert ist, als eine 4.1.x.
Dementsprechend solltest Du auf Cookie-Variablen via
Beispiel:
Außerdem gibst Du einem input-Button ein
Eine saubere Lösung wäre:
Grüße,
rabies.
Dementsprechend solltest Du auf Cookie-Variablen via
$_COOKIE zugreifen. Beispiel:
$_COOKIE['nachname']Außerdem gibst Du einem input-Button ein
name- und value-Attribut mit, das ist keine saubere Lösung, ob das die gängigen Browser überhaupt interpretierten, kann ich nicht sagen. Es ist ohnehin falsch. Wenn man Variablen setzen möchte, die allerdings nicht ersichtlich im Browser auftauchen sollen, sollte man das über <input type="hidden" name="Variablenname" value="Wert"/> tun.Eine saubere Lösung wäre:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<input type="hidden" name="refresh" value="1"/>
<input type="submit" value="Refresh"/>
</form>Grüße,
rabies.
Antwort 5 von Uesch
Genial, danke! Es funzt!
Antwort 6 von Uesch
Vielleicht kannst du mir noch hierbei helfen:
Ich möchte, dass, wenn man einen weiteren Artikel hinzufügt, ein neuer Cookie mit anderem Namen gespeichert wird. Habe es so probiert, es funzt auch bei der $radiogroup, aber bei der $anzahl speichert er immer genau das Gleiche, das man beim ersten Mal eingegeben hatte:
Gruß,
Üsch
Ich möchte, dass, wenn man einen weiteren Artikel hinzufügt, ein neuer Cookie mit anderem Namen gespeichert wird. Habe es so probiert, es funzt auch bei der $radiogroup, aber bei der $anzahl speichert er immer genau das Gleiche, das man beim ersten Mal eingegeben hatte:
Zitat:
if ($_GET[nachname] AND $nachname != "" AND $vorname != "" AND $radiogroup != "") {
setcookie("geschlecht", "$geschlecht", time()+900);
setcookie("vorname", "$vorname", time()+900);
setcookie("nachname", "$nachname", time()+900);
if ($HTTP_COOKIE_VARS["bestellung"] == "") {
setcookie("bestellung", "$radiogroup", time()+900);
setcookie("anzahl", "$anzahl", time()+900);
}
elseif ($HTTP_COOKIE_VARS["bestellung"] != "" ) {
setcookie("anzahl2", "$anzahl", time()+900);
setcookie("bestellung2", "$radiogroup", time()+900);
}
}
if ($_GET[nachname] AND $nachname != "" AND $vorname != "" AND $radiogroup != "") {
setcookie("geschlecht", "$geschlecht", time()+900);
setcookie("vorname", "$vorname", time()+900);
setcookie("nachname", "$nachname", time()+900);
if ($HTTP_COOKIE_VARS["bestellung"] == "") {
setcookie("bestellung", "$radiogroup", time()+900);
setcookie("anzahl", "$anzahl", time()+900);
}
elseif ($HTTP_COOKIE_VARS["bestellung"] != "" ) {
setcookie("anzahl2", "$anzahl", time()+900);
setcookie("bestellung2", "$radiogroup", time()+900);
}
}
Gruß,
Üsch
Antwort 7 von rabies
Nun, in diesem Code-Beispiel nutzt Du schon wieder
--rabies.
$HTTP_COOKIE_VARS. Du solltest den Code komplett mit $_COOKIE umsetzen.--rabies.
Antwort 8 von rabies
Und wenn wir schon bei Korrektur sind:
Könnte man in:
umändern. Das wäre imho performanter.
if ($HTTP_COOKIE_VARS["bestellung"] == "")Könnte man in:
if (!empty($_COOKIE["bestellung"]))umändern. Das wäre imho performanter.
Antwort 9 von Uesch
Ok, danke. Nun hab ich noch ein hoffentlich letztes Problem: Beim Klick auf "Bestellung abschicken" soll das vorher eingegebene an meine Emailadresse geschickt werden. Habe etwas gebastelt, allerdings wird die Email jetzt bei jedem Neu-Laden der Seite gesendet und nicht nur beim Klick auf "Bestellung abschicken"! Hier der Code, vll kannst du mir noch einmal helfen? Danke!
Zitat:
<td><br>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="refresh" value="1"/><br>
<input type="submit" value="Warenkorb aktualisieren"/>
</form>
<td><br>
<form action="<?php setcookie("bestellung", "$radiogroup", time()-3600);?>">
<input type="hidden" name="loeschen" value="1"/><br>
<input type="submit" value="Bestellung löschen"/>
</form>
<td><br>
<form action="<?php mail("max@mustermann.land",$subject,$body, $more);?>">
<br>
<input type="submit" value="Bestellung abschicken"/>
</form>
<td><br>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="refresh" value="1"/><br>
<input type="submit" value="Warenkorb aktualisieren"/>
</form>
<td><br>
<form action="<?php setcookie("bestellung", "$radiogroup", time()-3600);?>">
<input type="hidden" name="loeschen" value="1"/><br>
<input type="submit" value="Bestellung löschen"/>
</form>
<td><br>
<form action="<?php mail("max@mustermann.land",$subject,$body, $more);?>">
<br>
<input type="submit" value="Bestellung abschicken"/>
</form>
Antwort 10 von helfer_001
verwende doch einfach noch eine hiddenbox die du beim laden auf 1 setzt und verpacke den mail befehl in eine if-anweisung
Antwort 11 von helfer_001
if($_GET[mail]){
<form action="<?php mail("max@mustermann.land",$subject,$body, $more);?>">
}
<input type="hidden" name="mail"/>so ungefähr kA ob das jetzt fonktioniert...
hab am laptop kein XAMPP...
Antwort 12 von Uesch
Aber jetzt ist ja PHP und HTML vermischt. Das if($_GET[mail]){ muss ja in den PHP-Bereich und der Rest in den HTML-Bereich.
Antwort 13 von harrrharrr
Zitat:
Aber jetzt ist ja PHP und HTML vermischt.
Aber jetzt ist ja PHP und HTML vermischt.
Vermischt ist da nichts, sondern schön getrennt, das ist schon richtig so.
Gruß
harrr
Antwort 14 von Uesch
Ja und in welchen Teil soll ich das jetzt schreiben? Da, wo der PHP-Bereich ist? Weil dann gibt es einen Fehler wegen dem <
Wenn ich es unten in den HTML-Bereich schreibe, dann erkennt er ja das PHP nicht und ich kann ja auch nicht schreiben: <?php if($_GET[mail]){ ?>
<form action="<?php mail("max@mustermann.land",$subject,$body, $more);?>">
}
<input type="hidden" name="mail"/>
Wenn ich es unten in den HTML-Bereich schreibe, dann erkennt er ja das PHP nicht und ich kann ja auch nicht schreiben: <?php if($_GET[mail]){ ?>
<form action="<?php mail("max@mustermann.land",$subject,$body, $more);?>">
}
<input type="hidden" name="mail"/>
Antwort 15 von helfer_001
<?php if($_GET[mail]){
echo '<form action="mail("max@mustermann.land",$subject,$body, $more);?>">';
}
echo "<input type="hidden" name="mail"/>";
das mit dem echo hättest du dir zwar selbst denken können, aber hier bitte....
Antwort 16 von helfer_001
sorry hochkomma vergessen so siehts aus
<?php
if($_GET[mail]){
echo '<form action="' . mail("max@mustermann.land",$subject,$body, $more); . '">';
}
echo "<input type="hidden" name="mail"/>";
jetzt müsste es stimmen
<?php
if($_GET[mail]){
echo '<form action="' . mail("max@mustermann.land",$subject,$body, $more); . '">';
}
echo "<input type="hidden" name="mail"/>";
jetzt müsste es stimmen
Antwort 17 von Uesch
Danke,
aber es kommt folgende Fehlermeldung:
aber es kommt folgende Fehlermeldung:
Zitat:
Parse error: syntax error, unexpected '.'
in der Zeile mit Parse error: syntax error, unexpected '.'
Zitat:
echo '<form action="' . mail("max@mustermann.land",$subject,$body, $more); . '">';
echo '<form action="' . mail("max@mustermann.land",$subject,$body, $more); . '">';
Antwort 18 von rabies
Aeeeh! Einspruch. Ihr schlagt hier etwas den falschen Weg ein.
Das
In dem oben gezeigtem Scriptteil (
Desweiteren wüsste ich gerne, wozu
Ich würde hier ein gesondertes Formular zum Abschicken benutzen.
HTML-Teil:
PHP-Teil (evtl. an den Kopf des Dokumentes setzen):
Grüße,
rabies.
Das
action-Attribut eines Formulares MUSS auf eine gültige URL, ein verarbeitendes JavaScript, oder einen mailto:-Link verweisen. Nicht auf eine PHP-Funktion. In dem oben gezeigtem Scriptteil (
<?php mail("max@mustermann.land",$subject,$body, $more);?>) würde gar keine Ausgabe kommen. Das action-Attribut würde einfach leer bleiben. Desweiteren wüsste ich gerne, wozu
$_GET['mail'] in diesem Beispiel dient? An welcher Stelle wird es gesetzt, und warum? Ich würde hier ein gesondertes Formular zum Abschicken benutzen.
HTML-Teil:
<form action="<?php echo $_SERVER['PHP_SELF'].'?action=abschicken'; ?>" method="get">
<input type="submit" value="Bestellung abschicken!">
</form>PHP-Teil (evtl. an den Kopf des Dokumentes setzen):
<?php
if(isset($_GET['action'] && $_GET['action'] == 'abschicken') {
$MailEmpfaenger = 'max@mustermann';
$MailBetreff = 'Neue Bestellung!';
$MailNachricht = ''; // Hier die Nachricht aus den Cookie-Daten heraus zusammenbauen.
if(@mail ( $MailEmpfaenger, $MailBetreff, $MailNachricht )) $MailStatus = 'Email erfolgreich versendet!';
else $MailStatus = 'Email konnte nicht gesendet werden!';
}
?>
$MailStatus kannst Du dann ja nach belieben, irgendwo auf der Seite per echo $MailStatus ausgeben lassen, um dem User zu zeigen, dass da auch etwas im Hintergrund passiert ist. :)Grüße,
rabies.
Antwort 19 von Uesch
Danke, aber klappt leider nicht: Diesen Part verstehe ich auch nicht so ganz:
Auf jeden Fall habe ich alles versucht, aber gibt immer nen Fehler.
Zitat:
if(@mail ( $MailEmpfaenger, $MailBetreff, $MailNachricht ))
if(@mail ( $MailEmpfaenger, $MailBetreff, $MailNachricht ))
Auf jeden Fall habe ich alles versucht, aber gibt immer nen Fehler.
Antwort 20 von rabies
aber gibt immer nen Fehler.
Präziser ging's ooch nich', wa? So kann man Dir aber schlecht helfen...
Präziser ging's ooch nich', wa? So kann man Dir aber schlecht helfen...
Antwort 21 von Uesch
Danke, aber ich glaub, es ist eh besser, das ganze mit sessions zu machen...

