login  Naam:   Wachtwoord: 
Registreer je!
 Forum

foto's verwijderen

Offline kenzo - 11/07/2008 10:54
Avatar van kenzoPHP beginner Hallo,

Ik heb een upload script wat bestanden upload in een map en een nummer geeft.

Is de laatste foto 1.jpg dan maakt hij van de nieuwe 2.jpg en zo verder tot bv 54.jpg.


Nu heb ik een script dat de foto's uitleest met een while loop. (handigste denk ik als ik met nummers werk).

Hij pakt nu gewoon foto 1.jpg en daarna 2.jpg etc.

Maar ik heb een probleem als ik een foto wil verwijderen.

Hij gaat dan van 2.jpg naar 3.jpg (ook al bestaat deze niet).


Weet iemand hoe ik dat kan oplossen?



Bedankt!  

10 antwoorden

Gesponsorde links
Offline Berten - 11/07/2008 10:57
Avatar van Berten PHP beginner Voor je de img gaat weergeven eerst PHP.net: file-exists
Offline kenzo - 11/07/2008 10:58 (laatste wijziging 11/07/2008 11:02)
Avatar van kenzo PHP beginner als 2.jpg niet bestaat, gaat de while loop dan van 1 naar 3?

en hoe kan ik dat hierbij zetten:

  1. <?php
  2.  
  3. $map = 'images/klanten/'; // Verander hier de map
  4.  
  5. $handle = opendir($map);
  6. $aantalbestanden = 0;
  7.  
  8. while (($b = readdir($handle)) !== false) {
  9. if(!is_dir($b) && $b != "." && $b != "..") {
  10. $aantalbestanden++;
  11. }
  12.  
  13. }
  14. closedir($handle);
  15. ?>



hij opent de map en telt de bestanden.

dus bijvoorbeeld 40 bestanden

als ik nu 1 t'm 38 heb (39 verwijdert) en dan 40.jpg en 41.jpg heb, heb ik er ook 40 maar dan bestaan die foto's niet


dit is de code om de foto's te laten zien:

  1. <?PHP
  2.  
  3. $aantal = "".$aantalbestanden.""; // Aantal foto's
  4.  
  5. $i=$aantal;
  6. while($i>=1)
  7. {
  8.  
  9. s = new slide();
  10. s.src = "images/klanten/' . $i . '.jpg";
  11. s.link = "images/klanten/' . $i . '.jpg";
  12. s.title = " van ' . $aantal . '";
  13. //s.text = "";
  14. //s.target = "";
  15. //s.attr = "";
  16. //s.filter = "";
  17. //s.timeout = "";
  18. ss.add_slide(s);
  19. ';
  20. $i--;
  21.  
  22.  
  23. }
  24.  
  25. ?>
Offline Berten - 11/07/2008 11:07
Avatar van Berten PHP beginner
  1. <?PHP
  2.  
  3. $aantal = "".$aantalbestanden.""; // Aantal foto's
  4.  
  5. $i=$aantal;
  6. while($i>=1)
  7. {
  8.  
  9. if(file_exists("images/klanten/".$i.".jpg")) {
  10.  
  11. s = new slide();
  12. s.src = "images/klanten/' . $i . '.jpg";
  13. s.link = "images/klanten/' . $i . '.jpg";
  14. s.title = " van ' . $aantal . '";
  15. //s.text = "";
  16. //s.target = "";
  17. //s.attr = "";
  18. //s.filter = "";
  19. //s.timeout = "";
  20. ss.add_slide(s);
  21. ';
  22. $i--;
  23. }
  24.  
  25.  
  26.  
  27. }
  28.  
  29. ?>
Offline kenzo - 11/07/2008 11:36
Avatar van kenzo PHP beginner nee dat doet hij niet.

Nu kijkt hij of alle afbeeldingen bestaan?

  1. Fatal error: Maximum execution time of 30 seconds exceeded in /home/shamrock/public_html/paginas/klantenfotos/klanten.php on line 46


regel 46 = de code met if(file_exist
Offline Berten - 11/07/2008 12:01 (laatste wijziging 11/07/2008 12:04)
Avatar van Berten PHP beginner hmz, zie niet waarom ie dat niet doet, zou toch nt zo lang mogen duren.

op php.net zag ik hetzelfde voorkomen.

de img string eerst in een variabele steken zou moeten werken
  1. $img = "/images/klanten/".$i.".jpg";
  2. if(file_exists($img))
Offline kenzo - 11/07/2008 12:24
Avatar van kenzo PHP beginner nee, hij doet het nog steeds niet

exact dezelfde fout

Maar ik denk niet dat daar de fout in zit.

Hoe kan hij nou in een keer kijken of alle foto's het doen.

Ik denk dat ik het met een while loop moet laten controleren
Offline memar - 11/07/2008 13:28 (laatste wijziging 11/07/2008 13:31)
Avatar van memar Nieuw lid ik zou zeggen gebruik een for-loop.

  1. for ($i=1; $i<=54; $i++) {
  2. $img = "/images/klanten/".$i.".jpg";
  3. if (file_exists($img)) {
  4. echo "...";
  5. } else {
  6. continue;
  7. }
  8. }

grtz memar
Offline Berten - 11/07/2008 13:38 (laatste wijziging 11/07/2008 13:50)
Avatar van Berten PHP beginner de $i--; moet uit de if natuurlijk, maar je code gaat nog niet werken, je gaat maar 38 fotos weergeven en je wil er natuurlijk veertig.

oplossing 1: (minst goede)

creer een variabele $teller = 0;
creer een variabele $aantalafgedruktefotos = 0

je maakt eenwhile loop met check ($aantalafbeeldingen>=$aantalafgedruktefotos)

in de while loop:

je checkt of een foto bestaat. (images/".$teller.".jpg)
bestaat ze: verhoog het aantal afgedrukte fotos (dit is iets extra dat je moet bijhouden) + druk de foto af.

voor je while lus afsluit: $teller++;

Dit zou moeten werken

2. betere oplossing
Wanneer je het aantal afbeeldingen gaat tellen sla dan in een array $afbeeldingen de naam van de foto op (1,4,8,9,10).
Lus daarna op deze array en haal de naam van de foto eruit en geef ze aan de hand van die waarde weer.


Offline bigcow1990 - 05/08/2008 19:47
Avatar van bigcow1990 Nieuw lid wat doen jullie moeilijk maak het script opnieuw of verwijder de bestanden uit de database
Offline Flex1986 - 06/08/2008 09:05 (laatste wijziging 06/08/2008 09:06)
Avatar van Flex1986 Gouden medaille

Senior Member
Een filemanager in een database is overbodig. Hij kan dit veel makkelijker oplossen.

PHP.net: read_dir

  1. if ($handle = opendir('.')) { //Opent de directory die je wil uitlezen.
  2. while (false !== ($file = readdir($handle))) { //Loopt door de directory heen
  3. if ($file != "." && $file != "..") { //Haalt . en .. eruit
  4. echo "$file\n"; //In $file staat nu de file name. Die je bijvoorbeeld in een <img src=""> kan zetten.
  5. }
  6. }
  7. closedir($handle); //En sluit de directory
  8. }


Tip aan de TS: Je had blijkbaar op php.net al read_dir gevonden als je volgende keer ook comments en voorbeeld code bekijkt dan hoef je je vraag niet te stellen omdat de meeste oplossingen daar in staan  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.236s