Ik heb een simpel winkelmand script die de producten in de sessie opslaat.

Nadat er een product aan het mandje is toegevoegd krijgt de browser de link
'winkelmand.php?action=add&id=6' door.
Als je echter 'per ongeluk' de pagina refresht, blijven er producten bij komen.

En dat is nou niet de bedoeling,

<?php
session_start();
$winkelmand = $_SESSION['winkelmand'];
$action = $_GET['action'];

switch ($action) {
case 'add':
if ($winkelmand) {
$winkelmand .= ','.$_GET['id'];
} else {
$winkelmand = $_GET['id'];
}
break
?>

Ik ben toen wezen zoeken en heb dit onder iedere $_GET['id'] in mijn if/else lus gezet
<?php
header("Location: winkelmand");
?>

Dit zorgt er dan wel voor dat je geen producten kan toevoegen met een refresh, maar het 2de product toevoegen gaat dus ook niet.

Na verder onderzoek kwam ik erachter dat de sessie wordt verwijderd na een redirect.

Dit in mijn lus zetten :
<?php
session_write_close();
header("Location: winkelmand");
exit();
?>

werkte ook al niet...

kan iemand mij in de juiste richting sturen?
en misschien dat een modje zo aardig wilt zijn om het topic in het juiste subforum te verplaatsen :)
iets in de richting van variabele setten of de url veranderen als hij geadd is .

OF je moet een $_POST ipv een $_GET gebruiken ;)!
of doorsluisen naar een andere pagina.


<script type='text/javascript'>window.location="http://www.websiteurl.nl"</script>


bvb :p
@jasper:
Het javascript zal niet functioneren als de computer/browser het niet ondersteund.
Javascript oplossingen zijn out


Dit is mijn oplossing:
<?php
if(isset($winkelmand)) {
$action = $_GET['action'];
} else {
$winkelmand = $_SESSION['winkelmand'];
$action = $_GET['action'];
}
?>

met

<?php
switch ($action) {
case 'add':
if ($winkelmand) {
$winkelmand .= ','.$_GET['id'];
header('Location: winkelmand.php');
} else {
$winkelmand = $_GET['id'];
header('Location: winkelmand.php');
}
break;
?>

@beneden:

Heb het al opgelost


<?
header("Location:index.php", true, 303); 
exit();
?>

Headertje? :)
Jey schreef op 05.07.2009 23:33
@jasper:
@beneden:

Heb het al opgelost

Misschien handig als je post hoe je het opgelost hebt? Dan hebben anderen er ook nog wat aan, en kunnen we mogelijk nog fouten uit je oplossing halen.
@rens :
De oplossing heb ik 2 posts hierboven al ner geplompt.
Jey schreef op 06.07.2009 08:07
@rens :
De oplossing heb ik 2 posts hierboven al ner geplompt.


mogelijk wil je er nog exit; onderschrijven onder de headers ^^
dit voorkomt dat code eronder word uitgevoerd mocht hij op die keuze uitkomen. het hoeft niet. maar als je code rare dingen gaat doen kun je dit over wegen :)

het is mij aangeleerd na een header.
@jasper... het is of if of else. en daarna wordt het script met break() gestopt.

als ik exit in die lus ga gebruiken gaat het juist fout.
Wat dacht je van een tussen pagina dus:

Catalogus.php --> Pagina met artikelen
add.php --> Als er iets wordt toegevoegd --> Redirect naar winkelmandje of andere pagina
winkelmandje.php --> zegt genoeg....

Als je dan op winkelmandje.php zit en je drukt op F5 dan wordt er niet weer add.php gebruikt
Je zou ook $_SERVER['HTTP_REFERER'] kunnen checken :) als deze vol is reageren als op F5 drukt is is deze leeg.

Reageren