login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Albums en images uit dir wegschrijven naar MySQL

Offline Martijn2008 - 23/07/2009 23:21 (laatste wijziging 23/07/2009 23:22)
Avatar van Martijn2008PHP beginner Beste Sitemasters,

In mijn vorige topic ging ik samen met jullie op zoek naar een oplossing om mijn albums en images uit een directory op te halen. Ik heb toen samen met Ibrahim en snxs geconcludeerd, dat dit het makkelijkst kan met een multidimensionale array. Na wat gehakkel en gesteggel is dit mij mede dankzij hun gelukt. Maar nu de volgende stap...

Ik wil alle albums en images onderbrengen in 2 aparte MySQL tabellen. Ik heb 2 tabellen aangemaakt:
- albums
- albums_photos

Hieronder zien jullie een uitdraai van beide tabellen:

  1. --
  2. -- Tabel structuur voor tabel `albums`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `albums` (
  6. `id` int(11) NOT NULL auto_increment,
  7. `albumNaam` varchar(255) NOT NULL,
  8. `albumOmschrijving` varchar(255) NOT NULL,
  9. `albumDir` varchar(255) NOT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  12.  
  13. --
  14. -- Tabel structuur voor tabel `albums_photos`
  15. --
  16.  
  17. CREATE TABLE IF NOT EXISTS `albums_photos` (
  18. `id` int(11) NOT NULL auto_increment,
  19. `albumPhotoName` varchar(255) NOT NULL,
  20. `albumID` varchar(255) NOT NULL,
  21. PRIMARY KEY (`id`)
  22. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Het is de bedoeling dat de juiste data in de de juiste tabel terecht komt. Dit met behulp van de multidimensionale array, die we in mijn vorige topic ontwikkelt hebben.

Bedankt alvast voor al jullie reacties!

Met vriendelijke groet,

Martijn




5 antwoorden

Gesponsorde links
Offline Tuinstoel - 24/07/2009 16:27
Avatar van Tuinstoel PHP expert En wat heb je zelf al geprobeerd?
Offline Martijn2008 - 24/07/2009 17:54
Avatar van Martijn2008 PHP beginner Ik heb het een en ander geprobeert met foreach, maar dat werkte allemaal niet. De code die ik nu heb, is dezelfde als in mijn vorige topic. Deze dus:

  1. <?php
  2.  
  3. function getDirectoryTree( $outerDir )
  4. {
  5. $dirs = array_diff( scandir( $outerDir ), Array( ".", ".." ) );
  6. $dir_array = Array();
  7. foreach( $dirs as $d )
  8. {
  9. if( is_dir($outerDir."/".$d) )
  10. {
  11. $dir_array[ $d ] = getDirectoryTree( $outerDir."/".$d );
  12. }
  13. elseif( is_file($outerDir."/".$d) )
  14. {
  15. $dir_array[ $d ] = $d;
  16. }
  17. }
  18. return $dir_array;
  19. }
  20.  
  21. $dirList = getDirectoryTree('.');
  22.  
  23. $album = array_rand($dirList);
  24.  
  25. // Haal 4 random photos op
  26. for($i = 0; $i < 4; $i++)
  27. {
  28. $file = array_rand($dirList[$album]);
  29.  
  30. echo '<a title="Album: ' . $album . ' / Image ' . $file . '" href="/albums/' . $album . '/' . $file . '">
  31. <img src="/thumbnail.php?im=albums/' . $album . '/' . $file . '" />
  32. </a>' . "\n";
  33. }
  34.  
  35. echo '<pre>' , $album, '</pre>';
  36.  
  37. ?>
Offline snxs - 24/07/2009 20:14
Avatar van snxs Nieuw lid Je moet de functie getDirectoryTree vervangen voor een functie die dus verbinding legt met de database. En een array samen stelt van array results, en niet dir results.

Dat is het ongeveer, ik zal later vanavond wel even een voorbeeld schrijven.

Iets in de trant van:
  1. // Connect met DB
  2.  
  3. // Query de database voor alle albums
  4. mysql_query("SELECT * FROM `albums`");
  5.  
  6. // Kies er 1 uit
  7.  
  8. // Query de database voor alle bijbehorende foto's van het zojuist uitgezochte album
  9. mysql_query("SELECT * FROM `albums_photos` WHERE `albumID`=".[RANDOM ALBUM ID]);


Nog heel vaag, maar misschien zelf iets proberen uit te zoeken? php.net is je grootste vriend, daar staat alle info op, en vaak quote ik letterlijk wat daar staat.
Offline Martijn2008 - 24/07/2009 21:27 (laatste wijziging 24/07/2009 21:31)
Avatar van Martijn2008 PHP beginner @snxs Bedankt voor je uitleg. Ik bedoel eigenlijk dat alle albums met images worden opgeslagen in een MySQL database. De connectie met de MySQL server bestaat trouwens al, alleen deze wordt niet ge-opent in dit script. Het is veel complexer dan ik zelf gedacht had, want met alleen een simpele foreach kom ik er niet.

Ik heb het volgende idee:

A.) Komt album al voor in tabel albums? Indien niet, voeg een nieuwe record toe met de albumnaam.

B.) Controleer per album of een image al is toegevoegd in tabel albums_photos. Indien niet, dan moet ook hier een record worden toegevoegd.

C.) Komt een images/album wel voor in de database, maar niet in de array, dan moeten de des betreffende records per direct uit de database verwijderd worden.

De records in de database moeten altijd synchroon lopen met de directory content.
Offline snxs - 25/07/2009 04:30
Avatar van snxs Nieuw lid Hooow!

Ik weet niet of ik dat allemaal in dit gedeelte van je code zou zetten. Wanneer je je fotoalbums beheert, moet je site dit beheren. Verwijder je een afbeelding dan moet je beheersysteem dit ook uit de database halen. Maak je een nieuw album, dan maakt het beheersysteem een nieuwe map aan, en schrijft een vermelding in de database.

Dat zou ik niet in een "front-end" zetten.

En waarom moet het in 2 tabellen staan als het ook al in een dir staat? Verklaar u nader.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.493s