Ik ben een heel eind op de goede weg denk ik, maar het werkt nog niet helemaal.
Wat doe ik fout ?
Op de index pagina heb ik een link gemaakt naar lijst en hier zou ik graag alle auto's onder elkaar willen hebben, ook de link gaat naar de verkeerde pagina.
Deze zou naar de detailpagina moeten gaan.
Ik voeg alle code toe die ik momenteel gebruik.
Alles staat in de map htdocs in een map Autos in deze map zit een map uploads en in de map uploads zit een map thumbnails.
CREATE TABLE `autos` (
`id` int(11) NOT NULL auto_increment,
`merknaam` varchar(50) NOT NULL default '',
`type` varchar(50) NOT NULL default '',
`kleur` varchar(50) NOT NULL default '',
`brandstof` varchar(50) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
`photo_filename` varchar(50) NOT NULL default '',
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
`beschrijving` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Auto merken</title>
</head>
<body>
<h2><p align="center">Auto merken database</p></h2>
<ul>
<li><a href="upload.php">Auto's uploaden</a></li>
<li><a href="view.php">Auto's bekijken</a></li>
<li><a href="lijst.php">Naar lijst</a></li>
</ul>
<hr />
Gegenereerd op: <?php echo date("d-m-Y, G:i");?> uur.
</body>
</html>
config.php
<?php
/**
* yapa_config.php - configuratiebestand voor YAPA
*
* Hierin worden de configuratieparameters ingesteld<br>
* voor het fotoalbum Yet Another Photo Album
*/
//initialisatie databasevariabelen
$host = 'localhost';
$gebruiker = 'root';
$wachtwoord = 'skip';
$database = 'Automerken';
$query = null;
$db = null;
// initialisatie uploadvariabelen
$deze_pagina = $_SERVER['PHP_SELF']; // de naam van de pagina zelf
$upload_dir = 'uploads/'; // directory voor uiteindelijke opslag van foto's
$foto_naam = ''; // de bestandsnaam van de foto
$fout_bericht = ''; // Variabele voor eventueel opgetreden fouten
// Een array met toegestane afbeeldingstypen
$foto_MIME = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');
// Constanten
define ('DEBUG_MODE', true); // geeft aan of de debugging-mode voor queries actief is
// uitschakelen op een productiesite (false).
define ('MAX_FOTO_SIZE', 500000); // maximaal 500KB per foto
define ('FOTOS_PER_RIJ', 4); // het aantal foto's dat in 1 tabelrij wordt getoond
define ('UPLOAD_VERPLICHT', true); // het uploaden van een bestand is verplicht
define ('THUMB_SIZE', 120); // de breedte van thumbnails voor de foto.
// Verschillende typen inhoud voor formuliervelden
define('T_TEXT', 'tekst'); // valideren als tekst (alle tekens toegestaan)
define('T_EMAIL', 'email'); // valideren als e-mailadres
?>
functions.php
<?php
/**
* Configuratiebestand invoegen.
*
*/
include_once 'config.php';
/**
* function safe_query ()
* Algemene functie om queries safe uit te voeren, inclusief
* error-nummers. Schakel DEBUG_QUERY uit in config.php voor productiesites!
*
* @return resource
*/
function safe_query($db, $query){
global $ERRORS; // globale array met foutmeldingen
$result = '';
if (empty($query) || empty($db) || !is_string($query) || !is_object($db)){
// er zijn geen geldige parameters meegegeven
return false;
}
else{
if (DEBUG_MODE){
// uitgebreide debugging-mode, met meldingen voor de programmeur
if (!$result = @mysqli_query($db, $query)){
die ("{$ERRORS['QUERY_ERROR_ADMIN']}
<br> uitgevoerde query: $query .
<br> MySQL-foutnummer: " . mysqli_errno($db) .
"<br> MySQL-melding: " . mysqli_error($db));
}
else {
return $result;
}
}
else{
// geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
if (!$result = @mysqli_query($db, $query)){
die ($ERRORS ['QUERY_ERROR_USER']);
}
else {
return $result;
}
}
}
}// einde functie safe_query()
/**
* Function safe_text()
* Biedt de formuliergegevens eerst aan aan de functie safe_text().
* hierin worden HTML-tags uitgefilterd en (eventueel) speciale tekens
* als ', ", &, < en > omgezet naar tekst. Het binnensmokkelen van script
* in de database is dan al een stuk lastiger geworden.
* <p>Er wordt gebruik gemaakt van strip_tags() om ongewenste HTML-tags
* uit de invoer te weren. De tekst wordt eerst van spaties en andere whitespaces
* ontdaan via trim().
*
* @return string
*/
function safe_text($tekst='', $toegestane_tags=''){
$tekst = trim($tekst);
if(!get_magic_quotes_gpc()){
$tekst = addslashes($tekst);
}
return strip_tags($tekst, $toegestane_tags);
}// einde functie safe_text()
/**
* function get_docroot()
* Haal %DOCUMENT_ROOT% op, onafhankelijk van de gebruikte webserver.
* Werkt zowel voor Apache als voor IIS
*
* @return string
*/
function get_docroot(){
// twee variabelen inlezen
$docroot = $_SERVER['SCRIPT_FILENAME'];
$filename = $_SERVER['PHP_SELF'];
// backslashes vervangen door voorwaartse slashes
$docroot = str_replace('\\', '/', $docroot);
// de positie uitrekenen waar de bestandsnaam begint
$positie = strpos($docroot, $filename);
// deze van de docroot aftrekken en teruggeven
return substr($docroot, 0, $positie);
} // einde functie get_docroot()
/**
* function check_field()
* Valideert een formulierveld tegen een gegeven type
* @param string $inhoud De tekstuele inhoud van het formulierveld
* @param string $type Een van de typen die is vastgelegd in het configbestand (T_TEKST, T_EMAIL of T_URL)
*
* @return int
*/
function check_field($inhoud, $type){
trim($inhoud); // eventuele spaties verwijderen
switch ($type){
// controleer een tekstveld. Voorwaarde: niet leeg.
case T_TEXT:
if(empty($inhoud)){
return false;
}
else{
return true;
}
break;
// controleer een e-mailadres met behulp van een reguliere expressie
case T_EMAIL:
if(empty($inhoud) ||
!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $inhoud)){
return false;
}
else{
return true;
}
break;
// controleer een URL met behulp van een reguliere expressie
case T_URL:
if(empty($inhoud) ||
!eregi( '^http:\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}$', $inhoud)){
return false;
}
else{
return true;
}
break;
// EXTRA:
// controleer een opgegeven wachtwoord. Eis: minimaal 4, maximaal 10 tekens,
// moet beginnen met een letter.
// voorbeeld: Peter1 = true;
// 1Peter = false;
case T_PASSWORD:
if(empty($inhoud) ||
!eregi( '^[a-zA-Z].{3,9}$', $inhoud)){
return false;
}
else{
return true;
}
break;
// vangnet, deze regel zou nooit moeten worden uitgevoerd
// maar voor de zekerheid (hackpogingen?) laten we de functie
// false retourneren
default:
return false;
}
} // einde functie check_field()
/**
* function admin_toegang($melding, $foutmelding){
* Autoriseert een gebruiker/administrator voor YABG met Basic Realm
* @return string
*/
function admin_toegang($melding, $foutmelding){
header("WWW-Authenticate: Basic realm=\"$melding\"");
header("HTTP/1.0 401 Unauthorized");
die ($foutmelding);
}// einde functie admin_toegang()
/**
* function safe_db_open()
* algemene functie om database te openen. Kan vanuit alle modules
* worden aangeroepen. Zelf eventueel uitbreiden met code om ook MySQL 3.x
* te bedienen. (mysql_ in plaats van mysqli_).
* @param string $host
* @param string $gebruiker
* @param string $wachtwoord
* @param string $database
* @return resource
*/
function safe_db_open($host, $gebruiker, $wachtwoord, $database){
$db ='';
if (empty($host) || empty($gebruiker) || empty($wachtwoord) || empty($database)){
// er zijn geen geldige parameters meegegeven
// eventueel nog uitbreiden met controles op het meegegeven type,
// zoals is_string().
return false;
}
else{
if (DEBUG_MODE){
// uitgebreide debugging-mode, met meldingen voor de programmeur
// DEBUG_MODE is een constante, gedefinieerd in het config-bestand
if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
die ("Oooops: er is een fout opgetreden: <br />
host : $host <br />
gebruiker : $gebruiker <br />
wachtwoord : $wachtwoord <br />
database : $database <br />
MySQL-foutnummer: " . mysqli_errno($db) .
"<br /> MySQL-melding: " . mysqli_error($db));
}
else {
// alles OK, resource-handler teruggeven
return $db;
}
}
else{
// geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
die ("Er s een fout opgetreden bij het werken met de database");
}
else {
// alles OK, resource-handler teruggeven
return $db;
}
}
}
} // einde functie safe_db_open()
?>
view.php
<?php
// bestanden insluiten
include_once('config.php');
include_once('functions.php');
// initialisatie
$teller = 1; // voor bijhouden aantal foto's in een rij
$aantal_fotos = 0; // totaal aantal foto's in het fotoalbum
// database openen via user defined function
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
// Openen geslaagd, query opstellen en uitvoeren
$query = "SELECT id, photo_filename AS merknaam, type, kleur, brandstof, date_format(datum, '%d-%m-%Y') AS datum_upload
FROM autos ORDER BY datum_upload DESC";
$result = safe_query($db, $query);
$aantal_fotos = mysqli_num_rows($result);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Auto database</title>
</head>
<body>
<h2>Alle auto's</h2>
<table border="1" cellpadding="5">
<tr>
<?php
// in een while-lus alle foto's naar de tabel schrijven
while($foto = mysqli_fetch_array($result)) {
// bestandsnaam van de foto samenstellen
$thumb = "uploads/thumbnails/tn_" . $foto['merknaam'];
if($teller != FOTOS_PER_RIJ){
// als niet het einde van een tabelrij is bereikt,
// een cel met thumbnail op het scherm schrijven
echo "<td><a href=\"detail.php?photo={$foto['id']}\">";
echo "<img src=\"$thumb\" border=\"0\" /></a><br />";
echo "{$foto['naam']}<br />";
echo "{$foto['datum_upload']}</td>\n";
$teller++;
}
else{
// nieuwe tabelrij beginnen, maar wel eerst de laatste foto van de rij tonen
echo "<td><a href=\"detail.php?photo={$foto['id']}\">";
echo "<img src=\"$thumb\" border=\"0\" /></a><br />";
echo "{$foto['naam']}<br />";
echo "{$foto['datum_upload']}</td>\n";
echo" </tr><tr>\n";
// teller resetten
$teller = 1;
}
}
// ontbrekende lege tabelcellen schrijven
// om correcte HTML-code te verkrijgen
if ($teller != 1){
while ($teller <= FOTOS_PER_RIJ){
echo "<td> </td>";
$teller++;
}
}
?>
</tr>
</table>
Aantal foto's: <b><?php echo $aantal_fotos?></b><br />
<p><a href="index.php">Terug naar de homepage</a> </p>
</body>
</html>
upload.php
<?php
// bestanden insluiten
include_once('config.php');
include_once('functions.php');
// initialisatie en configuratie heeft plaatsgevonden in yapa_config.php
if (isset($_POST['verzonden'])){
// begin de controles
if (!isset($_FILES['foto'])){
// Het formulier is niet goed verzonden, of de pagina is foutief aangeroepen
echo 'Het formulier is niet goed ingevuld. <br />';
echo "Probeer het <a href=\"$deze_pagina\">nogmaals</a>";
exit;
}
else{
// Een array maken met alle waarden voor de foto
$foto = $_FILES['foto'];
}
// controleer of er fouten zijn opgetreden bij het uploaden
switch ($foto['error']){
case UPLOAD_ERR_OK:
// Het uploaden is goed gegaan, maar misschien is de foto
// groter dan toegestaan. Dit controleren
if ($foto['size'] > MAX_FOTO_SIZE){
$fout_bericht .= "De foto is te groot. Hij mag niet groter zijn dan " .
MAX_FOTO_SIZE . " bytes<br />";
}
// er is geen fout opgetreden, doe niets.
break;
case UPLOAD_ERR_INI_SIZE:
// de foto is groter dan wordt toegestaan door php.ini
$fout_bericht .= 'De foto is te groot! Hij mag niet groter zijn dan ' . MAX_FOTO_SIZE . 'bytes';
break;
case UPLOAD_ERR_PARTIAL :
// de foto is maar gedeeltelijk ge-uploaded
$fout_bericht .= 'Er is een fout opgetreden tijdens het uploaden. ';
break;
case UPLOAD_ERR_NO_FILE :
// Er is geen bestand opgegeven om te uploaden
if (UPLOAD_VERPLICHT){
// als het uploaden van een bestand verplicht is de foutmelding tonen
$fout_bericht = 'U hebt geen foto opgegeven om te uploaden. ';
}
break;
default:
// Vangnet; er zou geen onbekende fout mogen optreden, maar het is
// goed hier toch een voorziening voor te treffen
$fout_bericht = 'Er is een onbekende fout opgetreden. ';
break;
} // einde switch
if (!$fout_bericht){
// het uploaden is goed gegaan. Mogelijke overige fouten afvangen.
// Het MIME-type van de foto controleren.
// Alleen JPEG, GIF en PNG-bestanden zijn toegestaan
// De toegestane MIME-types zijn gedefinieerd in $foto_MIME
if (!in_array($foto['type'], $foto_MIME)){
$fout_bericht .= "U kunt alleen GIF-, JPG- of PNG-foto's uploaden. Het huidige type is: ". $foto['type'];
}
// controleren of er al een foto bestaat met deze naam.
// Dubbele namen (=per ongeluk
// overschrijven van een foto) mogen niet voorkomen.
$foto_naam = $upload_dir . $foto['name'];
if (file_exists($foto_naam)){
$fout_bericht .= 'Er bestaat al een foto met deze naam.
Verander de naam van de foto op uw computer en upload opnieuw. ';
}
// Overige formuliervelden valideren.
// Naam moet ingevuld zijn
if (!check_field($_POST['merknaam'], T_TEXT)){
$fout_bericht .= 'U hebt geen naam ingevuld <br /> ';
}
// Geldig e-mailadres controleren
if (!check_field($_POST['email'], T_EMAIL)){
$fout_bericht .= 'U hebt geen (geldig) e-mailadres ingevuld <br />';
}
}
// Einde van de controles. Als er geen fouten zijn opgetreden
// is $foutbericht nog leeg. In dat geval kan de foto worden
// verplaatst naar de definitieve directory
if (!$fout_bericht){
if(!move_uploaded_file($foto['tmp_name'], $foto_naam)){
$fout_bericht .= "Er is een fout opgetreden bij het opslaan van de foto. ";
}
}
if(!$fout_bericht){
/**
* database openen. Foutcontrole niet nodig, als dit failt
* wordt ge-die-d vanuit de functie
*/
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
/**
* openen geslaagd, query opbouwen met gegevens uit formulier
*/
$query = "INSERT autos (id, merknaam, type, kleur, brandstof, email, photo_filename,
datum, beschrijving)
VALUES ('', '" .
safe_text($_POST['merknaam']) ."', '" .
safe_text($_POST['type']) ."', '" .
safe_text($_POST['kleur']) ."', '" .
safe_text($_POST['brandstof']) ."', '" .
safe_text($_POST['email']) ."', '" .
safe_text($_FILES['foto']['name']) . "', '" .
safe_text($_POST['datum']) . "', '" .
safe_text($_POST['beschrijving']) . "')";
/**
* gegevens invoegen in de database, ook nu foutcontrole (in dit voorbeeld)
* niet nodig, omdat wordt ge-die-d vanuit de functie indien het opslaan mislukt.
* Mogelijk wilt u hier zelf een ander type error-handling toepassen, in de vorm van
* if(!safe_query())... enzovoort.
*/
safe_query($db, $query);
mysqli_close($db);
// Einde opslaan in database
// Thumbnail maken.
// Stap 1: eigenschappen van de foto achterhalen
list ($breedte, $hoogte, $image_type) = getimagesize($foto_naam);
// Stap 2: bepaal de verhouding tussen hoogte en breedte
$image_ratio = $breedte/$hoogte;
// Stap 3: bereken op basis van de ratio de nieuwe hoogte
if ($image_ratio > 1){
$tn_breedte = THUMB_SIZE;
$tn_hoogte = THUMB_SIZE / $image_ratio;
}
else{
$tn_hoogte = THUMB_SIZE;
$tn_breedte = THUMB_SIZE * $image_ratio;
}
// Stap 4: maak een lege thumbnail in het geheugen van de server
$thumb = imagecreatetruecolor($tn_breedte,$tn_hoogte);
// Stap 5: afhankelijk van het type foto het juiste type thumbnail maken
switch ($image_type){
case IMAGETYPE_GIF:
$source = imagecreatefromgif($foto_naam);
break;
case IMAGETYPE_JPEG:
$source = imagecreatefromjpeg($foto_naam);
break;
case IMAGETYPE_PNG:
$source = imagecreatefrompng($foto_naam);
break;
default:
// vangnet, dit komt als het goed is nooit voor.
// indien toch: trachten gif-bestand te maken
$source = imagecreatefromgif($foto_naam);
break;
}
// Stap 6: De grote foto verkleinen en kopieren naar de thumbnail
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $tn_breedte, $tn_hoogte, $breedte, $hoogte);
// Stap 7: naam van de thumbnail instellen
$thumbname= $upload_dir ."thumbnails/" . "tn_" . $_FILES['foto']['name'];
// Stap 8: tot slot: de thumbnail opslaan, opnieuw afhankelijk van het type
switch ($image_type){
case IMAGETYPE_GIF:
imagegif($thumb, $thumbname);
break;
case IMAGETYPE_JPEG:
// jpeg-afbeelding opslaan, kwaliteit: 100%
imagejpeg($thumb, $thumbname, 100);
break;
case IMAGETYPE_PNG:
imagepng($thumb, $thumbname);
break;
}
// In deze toepassing: De thumbnail op het scherm tonen
echo "<img src=\"$thumbname\" />";
// Einde thumbnail maken
// alle handelingen voltooid, melding op het scherm zetten
echo "<h2>Gegevens zijn opgeslagen in de database!</h2>";
echo "<a href=\"index.php\">Terug naar de homepage</a>";
exit;
}
else{
// normaal gesproken: netjes doorsturen naar een error-pagina.
// nu even Quick and Dirty naar het scherm schrijven (geen correcte HTML!)
echo '<h2>Er is een fout opgetreden</h2>';
echo $fout_bericht;
echo "<br />Probeer het <a href=\"$deze_pagina\">nogmaals</a>";
exit;
}
}
else{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Auto's uploaden</title>
</head>
<body>
<h2>Auto's uploaden</h2>
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']?>">
<pre>
Kies een foto: <input name="foto" type="file" size="30 "id="foto" />
Beschrijving: <textarea name="beschrijving" cols="30" rows="4"></textarea><br />
Merknaam: <input name="merknaam" type="text" size="40" />
Type: <input name="type" type="text" size="40" />
Kleur: <input name="kleur" type="text" size="40" />
Brandstof: <input name="brandstof" type="text" size="40" />
e-mailadres: <input name="email" type="text" size="40"/>
<input type="hidden" name="verzonden" value="1" />
<input type="hidden" name="datum" value="<?php echo date("YmdHis"); ?>" />
</pre>
<hr>
<input type="submit" name="Submit" value="Verzenden" />
<input type="reset" name="Reset" value="Leegmaken" />
</form>
</body>
</html>
<?php
} // het grote else-blok afsluiten
?>
detail.php
<?php
// bestanden insluiten
include_once('config.php');
include_once('functions.php');
// Controle: om deze pagina te openen moet een id zijn meegeven in de URL.
// als dit niet het geval is, de gebruiker doorsturen (of terugsturen)
// naar de masterpagina.
if(!isset($_GET['photo'])){
header("Location: view.php");
}
else{
$id = (int) $_GET['photo'];
}
// database openen via user defined function
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
// Openen geslaagd, query opstellen en foto met de gevraagde $id ophalen
$query = "SELECT *, date_format(datum, '%d-%m-%Y') AS datum_upload FROM autos WHERE id='$id'";
$result = safe_query($db, $query);
// de array $foto vullen met gegevens van de opgehaalde foto
if(!$foto = mysqli_fetch_array($result)){
// Controle: indien er geen resultaten zijn (ongeldige id meegegeven tijdens hackpoging?)
// terugsturen naar de masterpagina.
header("Location: view.php");
}
// de volledige bestandsnaam van de foto samenstellen
$foto_src = 'uploads/' . $foto['photo_filename'];
// enkele statistieken van de foto berekenen
// enkele eigenschappen van de foto achterhalen
list ($breedte, $hoogte) = getimagesize($foto_src);
// ruwe schatting van de omvang, afronden op kilobytes
$foto_size = filesize($foto_src);
$foto_size = round($foto_size/1024, 1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Aoto's bekijken</title>
</head>
<body>
<h2> <p align="center"> <?php echo $foto['merknaam'] . ' - '.$foto['type'];?> </p>
</h2>
<table border="1" cellpadding="5">
<tr>
<td>
<!-- cel met de foto -->
<img src="<?php echo $foto_src;?>" />
<td>
</tr>
<tr>
<td>
<!-- cel met aanvullende gegevens -->
<pre>
Geplaatst : <?php echo $foto['datum_upload']; ?> <br />
Merknaam : <?php echo $foto['merknaam']; ?><br />
Type : <?php echo $foto['type']; ?><br />
Kleur : <?php echo $foto['kleur']; ?><br />
Brandstof : <?php echo $foto['brandstof']; ?><br />
E-mail : <a href="mailto:<?php echo $foto['email']; ?>"><?php echo $foto['email'] ?></a><br />
Beschrijving : <?php echo $foto['beschrijving']; ?><br />
</pre>
</td>
</tr>
</table>
<p><a href="view.php">Terug naar het overzicht</a> </p>
</body>
</html>
en als laatste lijst.php deze werkt nog niet goed !!
<?php
include_once('config.php');
$db = mysql_connect($host, $gebruiker, $wachtwoord, $database)
or die("Kan niet verbinden: " . mysql_error());
mysql_select_db("Automerken", $db);
$autoQuery = "SELECT * FROM autos ORDER BY merknaam, type";
$autoResult = mysql_query($autoQuery) or die (mysql_error());
echo "<table border=1 width=100%>";
echo "<tr><td><b>Merkaam en type</b></td></tr>";
while($autoRow = mysql_fetch_array($autoResult))
{
echo "<tr>";
echo'<a href="detail.php?id='. $autoRow['id'] .'">'. $autoRow['merknaam'] .' - '. $autoRow['type'] .'</a>';
echo "</tr>";
}
mysql_close($db);
?>