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??
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:
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.
// 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)) {
}
}
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.
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.");
// 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)) {
}
}
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.