Hoi,

Ik ben bezig met een webwinkel om te oefenen hiermee (het is een wijnwinkel) en nu zit ik vast. Ik heb zo ver: webwinkel.php staan alle wijnen en kunnen je bestellen, dan ga je naar winkelwagen.php waarop je tot dusver ingevoerde aantallen staan.

Ik heb via sessions de aantal en artikelnummer opgevraagd, en deze toont hij ook goed, maar nu wil ik via het artikelnummer alle andere gegevens ophalen uit de database, maar dat krijg ik niet werkend. Ik heb de meeste code wel al, en al zoveel geprobeerd maar het lukt niet.

Hier een afbeelding van het resultaat: http://i43.tinypic.com/2qira7l.jpg


<?php
session_start();
include ('connection.php');
$artikelnummer=$_POST['artikelnummer'];
$aantal=$_POST['aantal'];
$_SESSION['winkelwagen'][$artikelnummer]=$aantal;

if (isset($_POST['verderwinkelen']))
{
header ("Location: wijnwinkel.php");
exit;
}
if (isset($_POST['plaatsbestelling']))
{
header ("Location: bestelling.php");
exit;
} 
?>

<html>

<head>
	<title>Wijnwinkel - winkelwagen</title>
</head>

<body>

<h1>Inhoud winkelwagen</h1>
<hr />

<?php
	echo '<table border="1">';
	echo '<tr>';
	echo '<td>Wijn</td>';
	echo '<td>aantal</td>';
	echo '<td>Prijs eenheid</td>';
	echo '<td>Totaal</td>';
	echo '</tr>';
	
foreach ($_SESSION['winkelwagen'] as $artikelnummer => $aantal)
{
	$keuze = mysql_query('SELECT omschrijving, eenheid, verkoopprijs FROM artikel WHERE artikelnummer=' . $artikelnummer . '');
	echo '<tr>';
	echo '<td> bla</td>';
	echo '<td>' . $aantal . '</td>';
	echo '<td>de prijs</td>';
	echo '<td>het totaal</td>';
	echo '<td><a href="">verwijder</a></td>';
	echo '</tr>';
}
	echo '</table>'; 

	echo '<form method="post" action="">';
	echo '<input type="submit" name="verderwinkelen" value="verder winkelen" />';
	echo '<input type="submit" name="plaatsbestelling" value="bestellen plaatsen" />';
	echo '</form>';

?>
</body>

</html>


ik weet dat je normaal een ($row = mysql_fetch_array($result) gebruikt, maar dat krijg ik hier niet bij en andere manier lukken ook niet. Ik weet dat er nog een andere fout in zit (dat hij een lege regel ertussen pakt) maar dat is niet het voornaamste, ik wil eerst deze grote fout eruit halen. Mocht iemand het antwoord op die tweede weten meldt het dan want dat is altijd wel zo handig!

Wat doe ik fout?
<?php
foreach ($_SESSION['winkelwagen'] as $artikelnummer => $aantal)
{
$keuze = mysql_query('SELECT omschrijving, eenheid, verkoopprijs FROM artikel WHERE artikelnummer=' . $artikelnummer . '');
if(!$keuze)
{
// query fout
}
$row = mysql_fetch_accoc($keuze);
echo '<tr>';
echo '<td> bla</td>';
echo '<td>' . $aantal . '</td>';
echo '<td>' . $row['prijs'] . '</td>';
echo '<td>' . ($aantal * $row['prijs']) . '</td>';
echo '<td><a href="">verwijder</a></td>';
echo '</tr>';
}
?>
Verder moet je regel 4 en 5 wijzigen zodat je kijkt of ze wel bestaan en of de waarde correct is alvorens je het in een session zet.

Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>

Edit: De a href zal je ook iets moeten meegeven want nu weet je niet wat er verwijderd moet worden.
Nog een correctie op SanThe's script: Je moet natuurlijk alleen gaan fetchen als er geen fout is, anders krijg je alsnog foutmeldingen. Dus het fetchen en het verwerken van de gefetchte gegevens moet je in een else blokje zetten

<?php
$query = "iets";
$result = mysql_query($query);
if(!$result) {
trigger_error(mysql_error());
}
else {
// gaan fetchen en dergelijke
{
?>
Dank jullie wel!

Ik zie nu dat hij het doet als ik mysql_fetch_array gebruik dus dat is al een hele opluchting, maar omdat SanThe dat mysql_fetch_accoc gebruikt zet ik dat er natuurlijk in, maar dan geeft hij deze fout: Fatal error: Call to undefined function mysql_fetch_accoc() in C:\Program Files\wamp\www\webwinkel\winkelwagen.php on line 51

en ik krijg hem niet weg :(

en als ik dan mysql_fetch_array gebruik zie ik de namen die ik besteld heb etc wel, maar dan geeft hij deze fout: Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in C:\Program Files\wamp\www\webwinkel\winkelwagen.php on line 48

en die zie ik ook niet..

Er zit nu toch niks meer fout? want ik heb alles gebruikt zoals jullie zeiden :)
Oeps. Grove typo.

Moet zijn
mysql_fetch_assoc($keuze);
Oke, maakt niet uit, iedereen maakt wel eens een foutje ^^

Nu doet hij het, maar geeft hij dit als foutmelding: Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in C:\Program Files\wamp\www\webwinkel\winkelwagen.php on line 46

Als ik dan datgene op lijn 46 (trigger_error(mysql_error());) weghaal, dan geeft hij geen foutmelding, dus wat is er fout aan?

----

Nog een klein andere vraagje, nu ik toch bezig ben: ik haal nu de verkoopprijs op (deze fout geeft hij trouwens ook in de winkel zelf al) dan laat hij 3 zien, terwijl in mijn database de prijs 3,75 is. Hij staat in de database als een int(3). Hoe kan dit? Hij moet dan toch gewoon de drie cijfers laten zien?
SanThe schreef op 04.07.2009 22:47

Verder moet je regel 4 en 5 wijzigen zodat je kijkt of ze wel bestaan en of de waarde correct is alvorens je het in een session zet.

Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>

Je zet nu ook lege waarden in de session en daar loopt de query op vast.

3,75 zijn technisch gezien twee getallen. 3.75 is één getal. Heb je wel het juiste TYPE op dat veld staan?

Edit: Een INT is een geheel getal. Jij zoekt waarschijnlijk DECIMAL.
Dat van die error reporting etc heb ik al boven in staan.. ik zal mijn hele script anders nog wel een keer invoegen :)

<?php
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
session_start();
include ('connection.php');
$artikelnummer=$_POST['artikelnummer'];
$aantal=$_POST['aantal'];
$_SESSION['winkelwagen'][$artikelnummer]=$aantal;

if (isset($_POST['verderwinkelen']))
{
header ("Location: wijnwinkel.php");
exit;
}
if (isset($_POST['plaatsbestelling']))
{
header ("Location: bestelling.php");
exit;
} 
?>

<html>

<head>
	<title>Wijnwinkel - winkelwagen</title>
</head>

<body>

<h1>Inhoud winkelwagen</h1>
<hr />

<?php
	echo '<table border="1">';
	echo '<tr>';
	echo '<td>Wijn</td>';
	echo '<td>aantal</td>';
	echo '<td>Prijs eenheid</td>';
	echo '<td>Totaal</td>';
	echo '</tr>';
	
foreach ($_SESSION['winkelwagen'] as $artikelnummer => $aantal)
{
    $keuze = mysql_query('SELECT omschrijving, eenheid, verkoopprijs FROM artikel WHERE artikelnummer=' . $artikelnummer . '');
    if(!$keuze) {
    trigger_error(mysql_error());
	}
	else {
    $row = mysql_fetch_assoc($keuze);
    echo '<tr>';
    echo '<td>' . $row['omschrijving'] . '</td>';
    echo '<td>' . $aantal . '</td>';
    echo '<td>' . $row['verkoopprijs'] . '</td>';
    echo '<td>' . ($aantal * $row['verkoopprijs']) . '</td>';
    echo '<td><a href="">verwijder</a></td>';
    echo '</tr>';
	}
}
	echo '</table>'; 

	echo '<form method="post" action="">';
	echo '<input type="submit" name="verderwinkelen" value="verder winkelen" />';
	echo '<input type="submit" name="plaatsbestelling" value="bestellen plaatsen" />';
	echo '</form>';

?>
</body>

</html>


Als ik die int verander in decimal pakt hij dat nog niet, wat ik net vergeten ben te zeggen, ik krijg steeds als ik van die 3 dan een 3,75 wil maken dan zegt hij dit: 0 rij(en) bijgewerkt.
Note: #1265 Data truncated for column 'verkoopprijs' at row 1
Dit geldt zowel voor als ik het met decimal als met int doe.

Mijn eenheidsprijs heb ik in varchar, maar ik dacht dat je daarmee niet kunt rekenen ofwel?
Kom je alleen op deze pagina nadat je een formulier hebt ingestuurd?
Geeft regel 6 geen notice?

Een VARCHAR is voor tekst en niet voor getallen.
SanThe schreef op 05.07.2009 11:24

3,75 zijn technisch gezien twee getallen. 3.75 is één getal.

3,75 is dus het getal 3 en het tweede getal is 75
Nooit een komma in een getal zetten.
Je doet je bestelling op webwinkel.php daarop staat een sumbit button in het form die je stuurt naar deze pagina, winkelwagen.php

die error die ik net zei is de enigste die ik krijg.
Zie mijn gewijzigde vorige post.

Reageren