Wie hebt mij op weg

Status
Niet open voor verdere reacties.

SillyMelody

Banned
Lid geworden
23 apr 2007
Berichten
4.309
Voorbeeldcode genoeg te vinden op internet, maar net niet wat ik wil hebben.

Wat ik zou willen is een website maken over auto's.
Met velden zoals merknaam, type, kleur, brandstof, één of meerdere foto's en nog wat velden.
Dit lukt mij wel om zoiets in PHP te maken en in een MySQL database te vullen.

Het probleem is om een tabel te maken met alleen de merknaam en type gesorteerd op merknaam en daarna op type. ( twee sorteersleutels dus) Ook moet dit als link aanklikbaar zijn en daarna moet de detailpagina openen van desbetreffende auto.

Bijvoorbeeld: Opel Ascona

Na maanden proberen met scripts van fotoalbums en forums en gastenboeken te combineren tot een geheel, krijg ik mijn wens niet werkend.

Ik werk met XAMPP en draai voorlopig alles nog lokaal.

Wie o wie ?
 
Voorbeeldcode genoeg te vinden op internet, maar net niet wat ik wil hebben.

Wat ik zou willen is een website maken over auto's.
Met velden zoals merknaam, type, kleur, brandstof, één of meerdere foto's en nog wat velden.
Dit lukt mij wel om zoiets in PHP te maken en in een MySQL database te vullen.

Het probleem is om een tabel te maken met alleen de merknaam en type gesorteerd op merknaam en daarna op type. ( twee sorteersleutels dus) Ook moet dit als link aanklikbaar zijn en daarna moet de detailpagina openen van desbetreffende auto.

Bijvoorbeeld: Opel Ascona

Na maanden proberen met scripts van fotoalbums en forums en gastenboeken te combineren tot een geheel, krijg ik mijn wens niet werkend.

Ik werk met XAMPP en draai voorlopig alles nog lokaal.

Wie o wie ?
Kan je niet gewoon dit doen:
Code:
if $_POST("naam")
{
  mysql_query en dan de hele query en SORT "naam" of zoiets
}
if $_POST("kenteken")
{
 mysql_query hele query en SORT"ketekenen" of zoiets
}

Ik weet niet zeker of dit werkt, maar ik denk het wel, moet je maar even uitproberen.

SUCCES:thumb:
 
PHP:
$autoQuery = "SELECT * FROM tabel ORDER BY merk, type";
$autoResult = mysql_query($autoQuery) or die (mysql_error());
while($autoRow = mysql_fetch_array($autoResult))
{
  echo'<a href="{link naar detailpagina}">'. $autoRow['merk'] .''. $autoRow['type'] .'</a>';
}

Volgens mij moet het zoiets worden...
 
Kan je niet gewoon dit doen:
Code:
if $_POST("naam")
{
  mysql_query en dan de hele query en SORT "naam" of zoiets
}
if $_POST("kenteken")
{
 mysql_query hele query en SORT"ketekenen" of zoiets
}

Ik weet niet zeker of dit werkt, maar ik denk het wel, moet je maar even uitproberen.

SUCCES:thumb:


Bedankt , ik ga het sorteren proberen, nu nog de link naar de detailpagina.
 
PHP:
$autoQuery = "SELECT * FROM tabel ORDER BY merk, type";
$autoResult = mysql_query($autoQuery) or die (mysql_error());
while($autoRow = mysql_fetch_array($autoResult))
{
  echo'<a href="{link naar detailpagina}">'. $autoRow['merk'] .''. $autoRow['type'] .'</a>';
}

Volgens mij moet het zoiets worden...


Bedankt, ik ga aan de slag ermee.
 
PHP:
$autoQuery = "SELECT * FROM tabel ORDER BY merk, type";
$autoResult = mysql_query($autoQuery) or die (mysql_error());
while($autoRow = mysql_fetch_array($autoResult))
{
  echo'<a href="{link naar detailpagina}">'. $autoRow['merk'] .''. $autoRow['type'] .'</a>';
}

Volgens mij moet het zoiets worden...


Ik ben een klein stapje verder, Merk en Type staan nu wel als link, maar worden aan elkaar geschreven.
Een spatie er tussen zou lekker zijn.
En de link naar de detailpagina is ook niet mogelijk, omdat elke auto of "record" een eigen id heeft.
Deze zou dus naar de desbetreffende ID moeten refereren.

Dit zijn dus de dingen waar ik al maanden me worstel
 
De spatie is simpel gedaan, gewoon even een spatie tussen
PHP:
.''.
zetten

Ik ga even er vanuit dat je de details op de pagina details.php weergeeft dus daar baseer ik de code op.

PHP:
$autoQuery = "SELECT * FROM tabel ORDER BY merk, type"; 
$autoResult = mysql_query($autoQuery) or die (mysql_error()); 
while($autoRow = mysql_fetch_array($autoResult)) 
{ 
  echo'<a href="details.php?id='. $autoRow['id'] .'">'. $autoRow['merk'] .' '. $autoRow['type'] .'</a>'; 
}

Als het goed is, is hij nu naar wens aangepast...

Ik hoop dat je nu weet hoe je in details.php de gegevens van de auto kan weergeven...
(TIP: Maak een SELECT-query waarbij je WHERE id='$_GET[id]' gebruikt)
 
De spatie is simpel gedaan, gewoon even een spatie tussen
PHP:
.''.
zetten

Ik ga even er vanuit dat je de details op de pagina details.php weergeeft dus daar baseer ik de code op.

PHP:
$autoQuery = "SELECT * FROM tabel ORDER BY merk, type"; 
$autoResult = mysql_query($autoQuery) or die (mysql_error()); 
while($autoRow = mysql_fetch_array($autoResult)) 
{ 
  echo'<a href="details.php?id='. $autoRow['id'] .'">'. $autoRow['merk'] .' '. $autoRow['type'] .'</a>'; 
}

Als het goed is, is hij nu naar wens aangepast...

Ik hoop dat je nu weet hoe je in details.php de gegevens van de auto kan weergeven...
(TIP: Maak een SELECT-query waarbij je WHERE id='$_GET[id]' gebruikt)

Wederom bedankt, ik ga hier morgen mee verder.
 
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>&nbsp;</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);
?>
 
Zou je het bericht aan willen passen door even de codes tussen
PHP:
te zetten.

Het wordt dan een stuk duidelijker.
 
Zou je het bericht aan willen passen door even de codes tussen
PHP:
te zetten.

Het wordt dan een stuk duidelijker.



ehhh, ik ben net 2 dagen nieuw hier op dit forum :confused:

Sorry ik begrijp even niet wat je bedoeld met
PHP:

Ik heb in rode letters de php bestandsnamen erboven gezet. Ik dacht dat dit duidelijk was.
Zoals : index.php config.php enzovoorts
 
Hij bedoelt het letterlijk zoals hij het zegt. Of je
PHP:
wilt gebruiken ;). Dat leest namelijk stukken prettiger :). Dus dan krijg je dit, zie je het verschil?:

PHP:
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
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:
<?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:
<?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:
<?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>&nbsp;</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:
<?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:
<?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:
<?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);
?>
 
Hij bedoelt het letterlijk zoals hij het zegt. Of je
PHP:
wilt gebruiken ;). Dat leest namelijk stukken prettiger :). Dus dan krijg je dit, zie je het verschil?:


OK bedankt, tsja het werkt op ieder forum weer anders.
Ik zal er rekening mee houden.

Weer wat geleerd :thumb:
 
Wanneer je een tabel wilt weergeven zul je dit wel goed moeten doen...

Probeer dit eens:

lijst.php
PHP:
<?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>
       <td>
         <a href="detail.php?id='. $autoRow['id'] .'">
           '. $autoRow['merknaam'] .' - '. $autoRow['type'] .'
         </a>
       </td>
     <tr/>';
}


mysql_close($db);
?>
[/php]

Ik neem aan dat detail.php goed gaat?
 
Ik neem aan dat detail.php goed gaat?[/QUOTE]

Wederom zeer bedankt, de tabel is nu goed.
Maar de link ging nog niet goed, deze ging nog steeds naar de view.php pagina.

Ik heb
PHP:
<a href="detail.php?id='. $autoRow['id'] .'">
veranderd in
PHP:
<a href="detail.php?photo='. $autoRow['id'] .'">

Grote klasse :thumb: !!

Nadat ik de heather en footer en css scripts heb toegevoegd, die ook al klaar waren, is het een mooie site geworden. De database was ook al gevuld tot enkele honderden exemplaren.
 
Dus je vragen zijn opgelost? Zou je dan de status aan willen passen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan