Hallo iedereen,

Ik ben bezig met het schrijven van een webwinkel in php.
Het etalage gedeelte werkt al naar behoren (aangestuurd door mysql.). Maar nu is het de bedoeling dat bezoekers vanuit de etalage door middel van een button naar een andere pagina kunnen gaan die meer informatie biedt over dat bepaalde product. Hoe kan ik dit het beste aanpakken? heeft er iemand voorbeelden, tutorials of tips??

Groetjes,

Jeroen Brouns
Ik neem aan dat een product een id (Primary key in de producten tabel) heeft bijvoorbeeld van het type int (unsigned, auto_increment)? Zo niet,dan zou ik dit maar snel doen!

Dit unieke nummertje gebruik je in de query string van het script om het een product in detail te bekijken.


http://mijnsite.nl/view_product.php?id=324234


edit:

Heb je een eigen server? Zet dan Apache multiviews aan kun je dit doen als Internet adres gebruiken:

http://mijnsite.nl/view_product/324234/paar-schoenen.html

Hoi Martijn B

Bedankt voor je snelle reactie!
Ik heb je tip opgevolgd.
Hij verplaatst het id perfect naar de volgende pagina alleen vergelijkt hij hem niet met het id uit de database.

mijn code ziet er nu zo uit en je kan het bestand bekijken op deze link:
http://www.brouns-design.nl/webwinkel/informatie_link.php?id=2

<?php
// informatie_link.php
session_start();




// Het product wat we toevoegen moeten we eerst controleren
// if(is_numeric($_POST['id'])) $id = $_POST['id'];
// else exit("Verzin een mooie foutmelding als productnummer geen integer is.");

// $id = $_POST['id'];
// echo $id;

include('contactdb.php');

$id = $_GET['id'];
print($id);

// producten laten zien
$sql = "SELECT productnummer, productnaam, prijs, beschrijving, image_link, informatie_link, id
FROM product WHERE id = '".$id."'
ORDER BY productnaam"; // dit is dus de query om de producten op te halen
$query = mysql_query($sql) or die (mysql_error());



// tellen van de bestanden
$num = mysql_num_rows($query); // Het aantal producten
if(empty($num)) {
echo "<p>Er zijn geen producten gevonden.</p>\n";



} else {
// Laat de producten zien
while($product = mysql_fetch_object($query)) {
}
}

$afbeelding = "$product->image_link";
echo $afbeelding;
echo $query;
echo $num;
echo "Prijs per stuk: EUR ".$product->prijs."<br />\n";


Script is lek = SQL-Injection. Nooit een GET waarde, zonder te checken of het is wat je verwacht, in een query zetten. Regel 30 kan gewoon met 0 (nul) vergeleken worden, ik vind empty() daar niet correct. Regel 37 is de while() overbodig want er is slechts één record gevonden. Regel 41 is overbodig geheugengebruik. Niet zinloos copiëren van $vars, maar gewoon het origineel gebruiken. $vars horen niet tussen quotes te staan.
Erg bedankt voor je snelle reactie (SanThe Nvt). Kan iemand van jullie een juiste aanpassing doen? Het zou me erg op weg helpen.
om de injectie tegen te kan kan je iets doen als:

<?php
if(ctype_digit($_GET['id'])){
$id = $_GET['id'];
} else {
die("Geen rare waardes invullen, gebruiker!");
}
?>
Ik heb de tip van Johan Dam geprobeerd.
Mijn script ziet er nu zo uit, maar werkt nog steeds niet:
<?php
// informatie_link.php
session_start();




// Het product wat we toevoegen moeten we eerst controleren
// if(is_numeric($_POST['id'])) $id = $_POST['id'];
// else exit("Verzin een mooie foutmelding als productnummer geen integer is.");

// $id = $_POST['id'];
// echo $id;

include('contactdb.php');

if(ctype_digit($_GET['id'])){
$id = $_GET['id'];
} else {
die("Geen rare waardes invullen, gebruiker!");
}

// producten laten zien
$sql = "SELECT productnummer, productnaam, prijs, beschrijving, image_link, informatie_link, id
FROM product WHERE id = '".$id."'
ORDER BY productnaam"; // dit is dus de query om de producten op te halen
$query = mysql_query($sql) or die (mysql_error());





// tellen van de bestanden
$num = mysql_num_rows($query); // Het aantal producten
if(empty($num)) {
echo "<p>Er zijn geen producten gevonden.</p>\n";



} else {
// Laat de producten zien
while($product = mysql_fetch_object($query)) {
}
}

$afbeelding = "$product->image_link";
echo $afbeelding;
echo $query;
echo $num;
echo "Prijs per stuk: EUR ".$product->prijs."<br />\n";


// forward to cart
// header("Location: cart.php"); //<--- deze werkt!!

//echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"0; URL=".$cart_pagina."\">";
?>
Verwerk de tips van SanThe er ook even in,
Je hebt bij je query op regel 24 ORDER BY productnaam, maar er staat nog geen ASC of DESC achter.
Je query lijkt in orde te zijn.
Wat ik zelf altijd doe met o.a. id's in een query is:
<?php
$sql = "SELECT productnummer, productnaam, prijs, beschrijving, image_link, informatie_link, id
FROM product WHERE id = '" . (int)$id . "'
ORDER BY productnaam";
?>

Heb je de id kolom ook aan gemaakt als primary key en ook auto_increment?
Het lijkt mij ook belangrijk dat je id als eerste kolom aanmaakt van je tabel.

Je zou je query ook op het scherm kunnen zetten en deze door phpmyadmin laten uitvoeren.

Reageren