Archief - [PHP] Winkelmandje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Prime-Omega

Legacy Member
Hellow,

Ik zoek een winkelmandje te maken voor mijn GIP, helaas bots ik echter op enkele problemen. Ik heb dus 2 files, producten.php en wmand.php. In mijn producten file haal ik alle producten op uit een MySQL database, dat gedeelte werkt al en ziet er simpel zo uit:

1. | Controller | &#8364;200 | Aantal: <input> | Koop (submit knop)
2. | Toetsenbord | &#8364;500 | Aantal: <input> | Koop (submit knop)

Wmand.php is een enkele php file waar ik al mijn producten in een cookie steek. Het id geef ik door via de naam van de koop knop en het aantal via de input.

Problemen wmand.php
Zie post #6

producten.php:
<?PHP

function winkel()
{
// Database-connectie maken
$link = mysql_connect ('127.0.0.1','root','') or die ("CONNECTIEFOUT MYSQL_CONNECT");
mysql_select_db('database',$link);

$query = "SELECT id, pronaam, prijs, korting FROM producten ORDER BY id ASC";
$result = mysql_query($query);

echo "<TABLE BORDER=2>";
while ($row = mysql_fetch_object($result))
{
echo "<TR>
<TD><input type='text' value='".$row->id."' name='id'></TD>
<TD><b>$row->pronaam</b></TD>
<TD>".number_format($row->prijs,2,",","."). "</TD>
<TD>Aantal:<input TYPE='text' NAME='aantal".$row->id."'></TD>

<FORM ACTION='wmand.php' METHOD='POST'>
<TD><INPUT TYPE='submit' NAME='".$row->id."' VALUE='Kopen'></TD>
</FORM></TR>";
}
echo "</TABLE>";

}
?>

<HTML>
<BODY BGCOLOR="black" TEXT="white">
<?PHP winkel(); ?>
</BODY>
</HTML>

wmand.php:
<?php

if( $_COOKIE['mand'] == true )
{
$mand = explode($_COOKIE['mand']);
$id = $_POST['id'];
$aantal = $_POST['aantal'.$id];

echo $id;
echo $aantal;

$mand[$id] = $aantal;
$cookieMand = join($mand);

//die(var_dump($cookieMand));
setcookie('mand', $cookieMand, time()+2629743, "/");
echo $_COOKIE['mand'];
}

else
{
$id = $_POST['id'];
$aantal = $_POST['aantal'.$id];

echo $id;
echo $aantal;
echo "hoi.";

$mand = array();
$mand[$id] = $aantal;
$cookieMand = join($mand);

//die(var_dump($cookieMand));
setcookie('mand', $cookieMand, time()+2629743, "/");
}

?>

Cycloon

Legacy Member
Voor het eerste probleem: aparte form tags gebruiken rond elke lijn.

Cycloon

Legacy Member
Kheb nu ook maar voor de andere problemen gekeken nu ik tijd heb:

Code:
$mand["$id"]

Je bedoelt zeker:

Code:
$mand[$id]

anders gaat die gewoon als key letterlijk $id gebruiken vermoed ik (alhoewel ik niet zeker ben omdat php in dubbele quotes ook vars parsed, maar het is alleszins meer netjes).

En dit stukje code in je if:

Code:
$mand = $_COOKIE['mand'];
$cookieMand = join($mand);

In uw $mand komt een gewone string en join werkt enkel op een array, ik vermoed dat dit het kan oplossen:

Code:
$mand = explode($_COOKIE['mand']);
$cookieMand = join($mand);

Voor de rest moet je nog maar posten wat er nog scheelt dan en mss ook line numbers van de errors vermelden.

Obliv`

Legacy Member
In mijn ogen is het veel beter dat je maar 1 submit knop hebt voor heel je producten lijst. Bij het posten ga je dan checken welke producten de klant effectief besteld heeft.

Prime-Omega

Legacy Member
@ Cycloon: Alvast bedankt voor de help tot nu toe, ik was vergeten dat een cookie van alles een string maakt. Ik heb het één en ander aangepast maar hij vindt de juiste variabelen van het vorige bestand nog steeds niet.

Notice: Undefined index: mand in C:\wamp\www\Gip\PHP\wmand.php on line 3
Notice: Undefined index: id in C:\wamp\www\Gip\PHP\wmand.php on line 21
Notice: Undefined index: aantal in C:\wamp\www\Gip\PHP\wmand.php on line 22
hoi.

line 3: if( $_COOKIE['mand'] == true )
line 21: $id = $_POST['id'];
line 22: $aantal = $_POST['aantal'.$id];

@Obliv': Dat heb ik overwogen maar het leek mij onpraktischer om dat te doen. De meeste webshops plakken ook gewoon een aparte knop op elk product.

Jerre Muesli

Legacy Member
Een beetje OO werken of een MVC-model implementeren zou ook lang geen kwaad kunnen als het voor een GIP is. Tenzij je dit allemaal niet geleerd hebt natuurlijk

Prime-Omega

Legacy Member
Ik zit nog maar in mijn eerste jaar informatica dus ken vrijwel alleen de basis. :)

Adelbert

Legacy Member
die error dat je krijgt kan zijn omdat ie zoekt naar een variabele in je cookies (?) dat nog niet bestaat omdat het de eerste keer is dat je je pagina laad. Je kan deze error laten hiden door "@" voor je variabele te zetten, dus: if(@$_COOKIE['mand'] == true), waarschijnlijk ook het probleem bij de andere

voor de rest hangt het een beetje af van hoe uw code opgesteld is, kga anders es beter kijken als ik thuiskom ;)

Prime-Omega

Legacy Member
Ik denk eerder dat hij de variabelen van producten.php niet doorkrijgt. Als ik @ voor al mijn errors zet krijg ik alleen hoi als uitvoer, wat wil zeggen dat $id en $aantal leeg is en dat de cookie bijgevolg niet wordt aangemaakt.

Cycloon

Legacy Member
Die @ methode is een smerige manier, je kan beter proberen:

Code:
if(isset($_COOKIE['mand'])) {}

Prime-Omega

Legacy Member
if(isset($_COOKIE['mand'])) {} verhelpt de eerste undefined index error wel maar de 2 onderstaande blijven. Mmmm ik zie de fout niet, waarom vindt hij de variabelen maar niet?

Notice: Undefined index: id in C:\wamp\www\Gip\PHP\wmand.php on line 21
Notice: Undefined index: aantal in C:\wamp\www\Gip\PHP\wmand.php on line 22

Cycloon

Legacy Member
Volgens mij komt het probleem omdat je al die formuliertjes gaat genereren met eenzelfde name attribuut 'id' waardoor die niet meer weet wat te selecteren bij je $_POST['id']. Als dat niet het probleem is zie ik het niet direct.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan