Scripts

Fotoalbums met MySQL

Ok, en ja ik weet het, er zijn tientallen fotoalbums op het internet te vinden.. Maar ik vond het allemaal niet fantastisch, dus heb ik zo'n 2-3 maanden terug mijn eigen foto-album script gescript. Ik weet dat er zeker punten zijn voor verbetering. Dit hoeven jullie dus niet te melden. O.a.: - Whiles gebruiken terwijl dit niet nodig is - mysql_fetch_object i.p.v. mysql_fetch_array o.i.d. - $_GET i.p.v. $_GET['vb']; Toch wilde ik het perse even plaatsen op PHPhulp omdat ik graag wil weten hoe chaotisch jullie mijn script-stijl vinden! Anyway, check it out. -- Thumbnail.php heb ik hier ergens van de site gehaald. Alle dank/rechten gaan naar die gene van wie het oorspronkelijk is. Aanwijzingen: Maak een map aan genaamd 'fotomap', plaats daarin de mappen met je foto's! Zo'n 'structuur' zou dat dus moeten zijn:

fotoalbums-met-mysql
Mysql tabellen:

[code]CREATE TABLE `foto_album` (
  `id` int(4) NOT NULL auto_increment,
  `naam` varchar(255) NOT NULL default '',
  `datum` varchar(255) NOT NULL default '',
  `map` varchar(255) NOT NULL default '',
  `views` int(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 AUTO_INCREMENT=115 ;

CREATE TABLE `foto_album_foto` (
  `id` int(4) NOT NULL default '0',
  `bestand` varchar(255) NOT NULL default '',
  `album` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
[/code]

[b]Fotoboek.php / index.php / maakt_niet_uit_eigenlijk.php[/b]

[code]<?php
/* (c) Stefanuzz.nl 
/* Dit script is gratis te gebruiken
/* Cool toch?
*/

// De syntax iets is belangrijk! (Geen idee waar ik syntax vandaan heb, gebruik de meest rare worden altijd..)
// Door middel van ?foto=[albumnr].[album_foto_nr] gaan wat we wel niet moeten doen
// Door explode te gebruiken splits ik dus alles
$syntax = $_GET[foto];
$syntax = explode(".", $syntax);

// Overzicht start
if($_GET[foto] == "overzicht"){
// Titel
echo '<span style="font-size:16px;">Foto-albums</span><br /><br />';
	// Alle files in een array zetten
	$files = glob("fotomap/*");
	// Foreach loop 
	foreach($files as $f){
		// Haal fotomap er uit
		$f = str_replace("fotomap/", "", $f);
		// Select query
		$select = "SELECT * FROM foto_album WHERE map = '" . $f . "'";
		$query = mysql_query($select);
		// Als de map niet bestaat, inserten!
		if(mysql_num_rows($query) < 1){
		
			$insert = "INSERT INTO foto_album (id, naam, datum, map) VALUES ('', '" . $f . "', '".date('Y').".".date('m').".".date('d')."', '" . $f . "')";
			$res = mysql_query($insert);
		// Anders niks doen
		}else{
		
			
		}
		
	}
	// Select nu alle albums
	$select_albums = "SELECT * FROM foto_album ORDER BY datum DESC";
	$query_albums = mysql_query($select_albums);
	// Even tellen
	$albums = mysql_num_rows($query_albums);
	// Zijn er geen fotoboeken? Dan dat melden!
	if($albums < 1){
	
	  echo 'Er zijn geen fotoboeken beschikbaar op dit moment';
	// Anders alles uitpersen!
	}else{
	
	// While met de query
	  while($list = mysql_fetch_object($query_albums)){
		
			if(is_dir('fotomap/' . $list->map)){
					// Bestaat de dir? Dan niks doen a.u.b.
					// Aantal albums het zelfde houden
					$albums = $albums;
										
			}else{
					// De dir bestaat niet omdat deze zojuist is verwijderd? Dan kwakken we de album uit de database!
					$delete = "DELETE FROM foto_album WHERE id = '" . $list->id . "'";
					$res2 = mysql_query($delete);
					// Aantal albums - 1
					$albums = $albums - 1;
						
			}
			// Zijn er geen fotoalbums?
			if($albums < 1){
			
				echo 'Er zijn geen fotoboeken beschikbaar op dit moment';
			// Anders gaan we nu de hele zooi er uit persen!
			}else{
				// Wat CSS uitspugen
				echo '<table style="border:1px solid #CCCCCC; width:90%;" onClick="window.location.href=\'?foto=' . $list->id . '\'">';
				
				// Nu komt het leuke werk; we gaan een thumbnailtje verzorgen.
				$fotos = glob("fotomap/" . $list->map . "/*");
				// Is er eigenlijk wel een foto in de map?
				if(!$fotos){
					echo '<tr><td style="border:1px solid #CCCCCC;"><a href="?foto=' . $list->id . '"><img src="gfx/geenthumb.png" border="0" /></a></td>';
				}else{
				// Anders zorgen we er voor dat er een thumb komt..				
				$a = "0";	
					// Zorg voor een thumb dan!
					foreach($fotos as $f){
								
						
						// Als het aantal thumbnails dat geplaatst is, nog steeds 0 is, dan kunnen we verder.
						if($a == "0"){
							// In Windows wordt er - als je in een map in je verkenner - nog wel eens thumb.db aangemaakt. Deze willen we natuurlijk niet zien.
							if($f == "Thumbs.db"){
							
							// En anders echo'en we de thumbnail! (Met nog wat CSS)
							}else{
								echo '<tr><td style="text-align:center; width:150px; height:150px;"><a href="?foto=' . $list->id . '"><img src="thumbnail.php?im=' . $f . '&maxsize=150" border="0"></a>';
								
								echo '</td>';
								// Tel het aantal geplaatste thumbnails + 1 (Dit kan nooit meer worden dan 1)
								$a++;
							}
						// Als er nog geen thumbnails zijn geplaatst, is het getal 0. Nu is het getal waarschijnlijk 1 of groter.
						}else{
						// Echo niks
						}
						
					}			
				}
				// Nu nog even netjes de datum er bij zetten waarop we het album geplaatst werd			
				$datum = explode (".", $list->datum);
				// Ja sorry, er zat nog wat CSS in..
				echo '<td style="width:*; text-align:center;"><a href="?foto=' . $list->id . '" class="fotoalbum">' . $list->naam . '</a><br /><span style="color:#CCCCCC;">' . $datum[2] . ' ' . maand($datum[1]) . ' ' . $datum[0] . '</span><br /><a href="?foto=' . $list->id . '">Bekijk nu &raquo;</a></td></tr>';
				
			}	
			
			echo '</table><br />';		
	  }
	  
	}
// Hiep hoi, het fotoboeken overzicht nu gehad. Nu gaan we knutselen met een foto...
// Als het eerste stuk voor de punt een cijfer is en het er na ook, dan weet ik zeker dat we een foto willen zien..
}elseif(is_numeric($syntax[0]) && is_numeric($syntax[1])){

	// Selecteer de foto uit de database
	$select = 'SELECT * FROM foto_album_foto WHERE id = "' . $syntax[1] . '" && album = "' . $syntax[0] . '"';
	$query = mysql_query($select);
	
	// Bestaat de foto eigenlijk wel?
	if(mysql_num_rows($query) > 0){
		
		// Nu gaan we uitzoeken uit welk album dit foto'tje komt
		$select2 = 'SELECT * FROM foto_album WHERE id = "' . $syntax[0] . '"';
		$query2 = mysql_query($select2);
		// VEROUDERD! Ik weet het.. ik gebruikte altijd fetch_object, dat schijnt wel wat trager te zijn... ach., ik denk dat een niet php-fanaat er niet al te moeilijk over doet.
		$list = mysql_fetch_object($query);
		$list2 = mysql_fetch_object($query2);
		
		// Laat maar zien uit welk foto deze album komt
		echo '<span style="font-size:16px;">Foto uit album "' . $list2->naam . '"</span><br /><br />';
		// Uiteraard! Laat de foto zien
		echo '<img src="' . $list->bestand . '">';
		// Terug naar het overzicht knopje is altijd fijn
		echo '<br /><br /><a href="?foto=' . $syntax[0] . '#' . $syntax[1] . '">&laquo; Terug naar overzicht</a>';
		
		echo '<br /><table>';
		
		// Nu gaan we even kijken welke foto voor deze foto zat..
		$aantalfotominder = "SELECT * FROM foto_album_foto WHERE album = '" . $syntax[0] . "' AND id < '" . $syntax[1] . "' ORDER BY id DESC LIMIT 1";
        $queryfotominder = mysql_query($aantalfotominder);

		// Ja, ff in een while zetten dan maar? Beetje onnodig, maar ja, verouderd..
        while($lista = mysql_fetch_object($queryfotominder)){

            $back1 = $lista->id;
            $back1_bestand = $lista->bestand;

        }
        
		// En nu kijken we welke foto er voor de foto zat die voor de huidige foto zat..
        $aantalfotominder2 = "SELECT * FROM foto_album_foto WHERE album = '" . $syntax[0] . "' AND id < '" . $back1 . "' ORDER BY id DESC LIMIT 1";
        $queryfotominder2 = mysql_query($aantalfotominder2);

		// Inderdaad, in een while
        while($listb = mysql_fetch_object($queryfotominder2)){

            $back2 = $listb->id;
            $back2_bestand = $listb->bestand;

        }
		
		// Nu kijken we welke foto er na deze foto zit
		$aantalfotomeer1 = "SELECT * FROM foto_album_foto WHERE album = '" . $syntax[0] . "' AND id > '" . $syntax[1] . "' ORDER BY id ASC LIMIT 1";
        $queryfotomeer1 = mysql_query($aantalfotomeer1);

        while($listc = mysql_fetch_object($queryfotomeer1)){

            $meer1 = $listc->id;
            $meer1_bestand = $listc->bestand;

        }
		// En kijken we welke foto er na de foto zit die na deze huidige foto komt.
        $aantalfotomeer2 = "SELECT * FROM foto_album_foto WHERE album = '" . $syntax[0] . "' AND id > '" . $meer1 . "' ORDER BY id ASC LIMIT 1";
        $queryfotomeer2 = mysql_query($aantalfotomeer2);

        while($listd = mysql_fetch_object($queryfotomeer2)){

            $meer2 = $listd->id;
            $meer2_bestand = $listd->bestand;

        }
		// Nog even het id'tje krijgen van het huidige fotoalbum. Als iemand zomaar wat heeft ingetypt in de adresbalk, komt er niks uit de query en krijg je dus een error.
		$falbum = mysql_query("SELECT id FROM foto_album_foto WHERE album = '" . $syntax[0] . "'");
        
		// Uh wat ik hier mee moet weet ik zelf niet eens meer..
         $query10 = mysql_query("SELECT * FROM foto_album_foto WHERE album = '" . $syntax[0] ."' ORDER BY id DESC limit 1");
         $list10 = mysql_fetch_object($query10);

		// Nu kijken we of er daadwerklijk een foto voor de foto zat die voor deze foto zit.. (ingewikkeld? Nee hoor!)
		if(strlen($back2) < 1){
        	echo '<tr><td style="text-align:center; width:75px; height:75px;">&nbsp;</td>';
		}else{
			echo '<tr><td style="text-align:center; width:75px; height:75px;"><a href="?foto=' . $syntax[0] . '.' . $back2 . '#' . $back2 . '"><img src="thumbnail.php?im=' . $back2_bestand . '&maxsize=75" border="0" /></a></td>';
		}
		
		// Doen we dat zelfde nu, maar dan met de foto voor de huidige foto
		if(strlen($back1) < 1){
			echo '<td style="text-align:center; width:75px; height:75px;">&nbsp;</td>';
		}else{
			echo '<td style="text-align:center; width:75px; height:75px;"><a href="?foto=' . $syntax[0] . '.' . $back1 . '#' . $back1 . '"><img src="thumbnail.php?im=' . $back1_bestand . '&maxsize=75" border="0" /></a></td>';
		}
		
		// De huidige foto
        echo '<td style="text-align:center; width:75px; height:75px;"><img src="thumbnail.php?im=' . $list->bestand . '&maxsize=75" border="0" /></td>';

		// Is er wel een foto hier na?
        if(strlen($meer1) < 1){
          echo '<td style="width:75px; height:75px;"></td>';
        }elseif($meer1 == $syntax[1]){
          echo '<td style="width:75px; height:75px;"></td>';
        }else{
          echo '<td style="text-align:center; width:75px; height:75px;"><a href="?foto=' . $syntax[0] . '.' . $meer1 . '#' . $meer1 . '"><img src="thumbnail.php?im=' . $meer1_bestand . '&maxsize=75" border="0" /></a></td>';
        }
        
		// En is er eigenlijk wel een foto na de foto hier na?
		if(strlen($meer2) < 1){
          echo '<td style="width:75px; height:75px;"></td>';
		}elseif($list10->id == $syntax[1]){
          echo '<td style="width:75px; height:75px;"></td>';
		}else{
         echo '<td style="text-align:center; width:75px; height:75px;"><a href="?foto=' . $syntax[0] . '.' . $meer2 . '#' . $meer2 . '"><img src="thumbnail.php?im=' . $meer2_bestand . '&maxsize=75" border="0" /></a></td></tr>';
		}
		
		// Dan nog even de tekst gevallen echo'en.
         if(strlen($back2) < 1){
           echo '<tr><td style="text-align:center;"></td>'; }
         else{
           echo '<tr><td style="text-align:center;"><a href="?foto=' . $syntax[0] . '.' . $back2 . '#' . $back2 . '"><< Daarvoor</a></td>'; }
		// Dan nog even de tekst gevallen echo'en.
         if(strlen($back1) < 1){
           echo '<td style="text-align:center;"></td>';
         }else{
           echo '<td style="text-align:center;"><a href="?foto=' . $syntax[0] . '.' . $back1 . '#' . $back1 . '">< Vorige</a></td>';
         }
		// Dan nog even de tekst gevallen echo'en.
         echo '<td style="text-align:center;">Huidige</td>';
		// Dan nog even de tekst gevallen echo'en.
         if(strlen($meer1) < 1){
            echo '<td style="text-align:center;"></td>';
         }else{
            echo '<td style="text-align:center;"><a href="?foto=' . $syntax[0] . '.' . $meer1 . '#' . $meer1 . '">Volgende ></a></td>';
         }
         
        
         
		// Dan nog even de tekst gevallen echo'en.
         if($list10->id == $syntax[1]){
             echo '<td style="text-align:center;"></td></tr>';
         }
         elseif(strlen($meer2) < 1){
             echo '<td style="text-align:center;"></td></tr>';
         }else{
             echo '<td style="text-align:center;"><a href="?foto=' . $syntax[0] . '.' . $meer2 . '#' . $meer2 . '">Daarna >></a></td></tr>';
         }

        
       
        echo '</table>';
        // En voor de gebruiksvriendelijkheid nog een fijne terug knop.
        		echo '<br /><br /><a href="?foto=' . $syntax[0] . '#' . $syntax[1] . '">&laquo; Terug naar overzicht</a>';

		
	}else{
			// Soms gaat het wel eens de soep in, daar heb ik even een error voor :-)
			echo '<span class="titel_error" style="color:red;">ERROR - Er deed zich een fout voor...</span><br /><br />
	Er ging iets fout. Waarschijnlijk bestaat deze album niet, of bestaat de foto die bij deze album hoort niet.<br /><br />
	<a href="?foto=overzicht">Ga terug en probeer het opnieuw.</a> ++ Fout: Foto&Album bestaat niet.';
	exit();
	
	}

// Nu nog even een overzichtje maken van de foto's die in een album staan
}elseif(is_numeric($_GET[foto])){
	
	// Selecteren album
	$select = "SELECT * FROM foto_album WHERE id = '" . $_GET[foto] . "'";
	$query = mysql_query($select);
	// $list defieneren
	$list = mysql_fetch_object($query);
	
	echo '<span class="titel_kop">Foto-album "' . $list->naam . '"</span><br /><br />';
	// Alle files in $bestanden zetten
	$bestanden = glob("fotomap/" . $list->map . "/*");
	$inserts = "0";
	$fotonr = "1";
	// Foreach loop beginnen
	foreach($bestanden as $b){
        
		// Selecteren van foto uit database
		$select_foto = "SELECT * FROM foto_album_foto WHERE bestand = '" . $b . "'";
		$query_foto = mysql_query($select_foto);
			// Als foto in database staat, niks doen
			if(mysql_num_rows($query_foto) > 0){
				echo '<!-- Bestand: ' . $b . ' -> Foto staat in database -->';
			// Anders in database zetten.
			}else{
				$select_laatste = "SELECT * FROM foto_album_foto ORDER BY id DESC LIMIT 1";
				$query_laatste = mysql_query($select_laatste);
				
					while($list_laatste = mysql_fetch_object($query_laatste)){
						$laatste = $list_laatste->id;
					}
				// Laatste id opzoeken.. tja.. daar hebben we ook auto_increment voor, maar dat werkte niet echt..
				$laatste++;
				// En nog even de insert dan..			
				$insert = "INSERT INTO foto_album_foto (id, bestand, album) VALUES ('" . $laatste . "', '" . $b . "', '" . $_GET[foto] . "')";
				$res = mysql_query($insert);
					if($res){
						echo '<!-- Bestand: ' . $b . ' -> Foto staat niét in database > Foto in database gezet. -->';
						$inserts++;
					}else{
						echo '<!-- Bestand: ' . $b . ' -> Foto staat niét in database > Foto kon niet in de database gezet worden. -->';
					}
				
								
			}
		
	}
	// Mooi, de controles nu gehad, nu gaan we de lijst met foto's 
	$select3 = "SELECT * FROM foto_album_foto WHERE album = '" . $_GET[foto] . "'";
	$query3 = mysql_query($select3);
		// Zijn er meer dan 0 foto's?
		if(mysql_num_rows($query3) > 0){
			// We beginnen met tellen!
			$count = "0";
			echo '<table width="100%">';
			// While dan maar!
			while($list3 = mysql_fetch_object($query3)){
				// Als de count 0 is, betekent dat dat we een nieuwe rij moeten beginnen
				if($count == 0){
					echo '<tr><td width="25%">';
				// En anders gewoon een nieuwe cel
				}else{
					echo '<td>';
				}
				// Nu even de thumb laten zien
				
					echo '<a href="?foto=' . $_GET[foto] . '.' . $list3->id . '.' . $fotonr . '"><img src="thumbnail.php?im=' . $list3->bestand . '" border="0" /></a>';
				// Als we nu trouwens op count = 3 zitten, moeten we de rij afsluiten.
				if($count == 3){
					echo '</td></tr>';
					$count = "0";
				// En anders alleen de cel zelf.
				}else{
					echo '</td>';
					$count++;
				}
				// Tellen we nog even de hoeveelste deze foto wel niet was..
				$fotonr++;
			}
			// En de tabel nog ff dicht..
			echo '</table>';
		// Stonden er toch geen foto's in? Dan even dat melden
		}else{
			echo 'Geen foto\'s gevonden voor in deze album';
		}
	// Nu nog even wat stats fabriceren.. dank u
	echo '<b>Aantal foto\'s:</b> ' . mysql_num_rows($query3) . '<br /><b>Aantal foto al in database:</b> ' . (mysql_num_rows($query3) - $inserts) . '<br /><b>Aantal foto in database gezet:</b> ' . $inserts . '<br /><br /><a href="?foto=overzicht">&laquo; Terug naar het overzicht</a>';
// En ja, als er niks is ingevuld, dan gaan we je doorversturen naar het overzicht!
}else{

	echo '<span class="titel_error">ERROR - Er deed zich een fout voor...</span><br /><br />
	<a href="?foto=overzicht">Je wou waarschijnlijk naar het overizcht? Klik hier!.</a>';
	
}

?>
[/code]

Thumbnail.php

[code]<?php

$im = $_GET['im'];

	$im = $im;
	
	$maxsize = $_GET['maxsize'];
	
	if($maxsize){
		$maxsize = $maxsize;
	}elseif($_GET[foto]){
		$maxsize = 100;
	}else{
		$maxsize = 100;
	}
		

            
// The file
$filename = $im;

// Set a maximum height and width
$width  = $maxsize;
$height = $maxsize;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

if ($width && ($width_orig < $height_orig)) {
	$width = ($height / $height_orig) * $width_orig;
} else {
	$height = ($width / $width_orig) * $height_orig;
}

// Resample
$image_p = imagecreatetruecolor($width, $height);
$image   = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

// Output
imagejpeg($image_p, null, 100);
imagedestroy($image);
imageDestroy($image_p);

?>[/code]

Reacties

0
Nog geen reacties.