PHP session help

Status
Niet open voor verdere reacties.

jwz104

Gebruiker
Lid geworden
4 feb 2013
Berichten
47
Ik probeer een winkel script te maken, maar het werkt niet helemaal. Ik heb dit script:
Code:
<?php
if($_SESSION['cart']) {
foreach($_SESSION['cart'] as $product_id => $quantity) { 
echo $product_id. ' - ' .$quantity. '<br>';
}
}else{
echo'Cart is empty';
}
?>

Hij geeft deze error aan:
Notice: Undefined index: cart in C:\xampp\htdocs\shisha-verkoop.tk\cart.php on line 108
(108 is de 2e lijn)
Maar wat klopt hier niet aan, ik heb bovenaan de page gewoon session_start(); gezet.

Het is al gelukt het script is nu:
Code:
<?php
if(isset($_SESSION['cart'])) {
foreach($_SESSION['cart'] as $product_id => $quantity) { 
echo $product_id. ' - ' .$quantity. '<br>';
}
}else{
echo'Cart is empty';
}
?>
 
Laatst bewerkt:
Nog een vraagje
Ik heb dit scripje
Code:
$product_id = $_POST['product'];
$_SESSION['cart'][$product_id]++;
Dan krijg een deze errors:
Notice: Undefined index: cart in C:\xampp\htdocs\....\producten.php on line 31

Notice: Undefined offset: 1 in C:\xampp\htdocs\....\producten.php on line 31

Lijn 31 is lijn 2, bij deze errors is $product_id 1

Hoe kan ik dit script werkende krijgen?
 
Je zou deze errors kunnen hiden met error_reporting(0); of je moet een verantwoordelijke fout af handeling maken, zou je de complete pagina willen laten zien?

Edit: je hebt de variabels laten zien wanneer ze nog geen uitvoering hadden.
 
Laatst bewerkt:
Twee vragen samengevoegd, aangezien ze over nagenoeg dezelfde fouten gaan
 
// ik zou deze regel nog wat meer valideren. Controleer of je daadwerkelijk een INTEGER hebt. (POST data injection)
$product_id = (int)$_POST['product'];

Wat je nu doet is gewoon alles wat niet begint met een getal omzetten naar nul. Dat voorkomt geen injectie, het geeft alleen een hele rits bugs die zeer lastig te achterhalen zijn.

Controleren of iets een integer is doe je met ctype_digit((string)$jouwvar).


Als je dit doet:
$_SESSION['cart'][$product_id] = (!isset($_SESSION['cart'][$product_id])) ? 1 : $_SESSION['cart'][$product_id]++;
Dan bouw je weer een fout in omdat je producten aan het mandje kunt toevoegen door hun aantal te verhogen. Dus als die functie niet het juiste productid doorgeeft dan ziet de gebruiker ineens heel andere producten in zijn mandje verschijnen.


Blijf bij het mantra dat je alleen toestaat wat toegestaan is, en niets anders. Nooit blind casten, nooit zomaar indexes aanmaken omdat hij nog niet bestond, etc. etc.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan