Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][php]usuwanie zdjec cd
Forum PHP.pl > Forum > Przedszkole
olszam
ktoś mi może wyjaśnić czemu mi nie usuwa zdjęcia ale rekord z bazy to już usunie.
w bazie mam kolumne nazwapliku ale tam to się tam znajduje cała ścieżka pliku
np.test/danezawody/Hakumen_(Emblem,_Crest).png
  1. <?php
  2. require 'polacz.php';
  3. mysql_query("SET NAMES utf8");
  4. mysql_query("SET CHARACTER SET utf8");
  5. mysql_query("SET collation_connection = utf8_polish_ci");
  6.  
  7. $idDaneZawody = isset($_GET['id']) ? (int)$_GET['id'] : NULL; //sprawdzaie czy zmienna id została przekazana w adresie
  8. if($idDaneZawody != NULL && is_numeric($idDaneZawody)){ //jeśli $idDaneZawody nie równa się NULL i jest liczbą
  9. $zapytanie = mysql_query("SELECT * FROM danezdjecia WHERE iddanezawody=".$idDaneZawody); //zapytanie wyciągające wszystko z bazy o podanym ID
  10. $array = mysql_fetch_array($zapytanie); //zapis wyniku do tablicy asocjacyjnej
  11. $NazwaZdjecia = $array['nazwapliku']; // wyciąganie z bazy nazwe zdjęcia
  12. unlink($NazwaZdjecia); //usuwa plik z serwera
  13. //mysql_query("DELETE FROM danezdjecia WHERE iddanezdjecia = ".$idDaneZawody); <<<zakomentowałem tu ponieważ nie chce już parę razy usuwać i znów dodawać tego samego
  14. header('Location: usunzdjdanezawody.php'); // po zakończeniu aktualizacji bazy, przekieruje nas do strony głównej.
  15. }
  16.  
  17. //Teraz w tym miejscu lista rozwijana:
  18. $sql3 = "SELECT * FROM danezawody WHERE faza = 0";
  19. $rezultat2 = mysql_query($sql3);
  20. echo '<form action="usunzdjdanezawody.php" method="post">';
  21. echo 'danezawody: <select name="iddanezawody">';
  22. while ($Wiersz2 = mysql_fetch_array($rezultat2)){
  23. if($Wiersz2['iddanezawody'] == $idDaneZawody){
  24. echo '<option value="'.$Wiersz2['iddanezawody'].'" selected="selected">'.$Wiersz2['rodzajzawodow'].' w '.$Wiersz2['miejscezawodow'].'</option>';}
  25. else {
  26. echo '<option value="'.$Wiersz2['iddanezawody'].'">'.$Wiersz2['rodzajzawodow'].' w '.$Wiersz2['miejscezawodow'].'</option>';}
  27. }
  28. echo '</select>
  29. <input type="submit" name="sprawdz" value="sprawdz" />
  30. </form>';
  31. //Tutaj wyświetlić zdjęcia
  32. if(isset($_POST['sprawdz'])){
  33. $zdj=(int)$_POST['iddanezawody'];
  34. $sql4="select * from danezdjecia where iddanezawody=$zdj";
  35. $rezultat=mysql_query($sql4);
  36. while($wiersz = mysql_fetch_array($rezultat)){
  37.  
  38. echo '<br/><img src="'.$wiersz['nazwapliku'].'" width="200" height="200"><br/>
  39.  
  40. '.$wiersz['opis'].'<br/><br/>
  41.  
  42. <a href="usunzdjdanezawody.php?id='.$wiersz['iddanezdjecia'].'">USUŃ</a>';
  43. }
  44. }
  45. ?>
Chelo
Używaj intval, nie int. Skoro unlink nie usuwa pliku, to sprawdź, czy $NazwaZdjecia zawiera dobrą ścieżkę, mysql_fetch_array możesz zmienić na mysql_fetch_assoc.
mortus
Najpierw sprawdź, czy pod zmienną $NazwaZdjęcia rzeczywiście znajduje się ścieżka do pliku na serwerze i czy taki plik istnieje, czyli czy jest plikiem is_file(), później sprawdź prawa dostępu do pliku is_writable() i ewentualnie zmień je na 0666 chmod(), i dopiero wtedy spróbuj usunąć plik za pomocą unlink(). Przeglądnij komentarze w manualu dla funkcji unlink(). Upewnij się, że ścieżka jest właściwa dla systemu operacyjnego (chodzi o \ lub /).

Poza tym po header() obowiązkowo użyj exit(), bo cała reszta kodu zostanie wykonana mimo przekierowania.

@Chelo: W tym przypadku rzutowanie zadziała dokładnie tak samo, jak intval(). Poza tym rzutowanie jest o 300-650% szybsze i jest uważane za "lepszą praktykę".
17misiek09
a może zmienna $NazwaZdjecia zawiera dosłownie nazwę zdjęcia?
przed zmienna podaj nazwę folderu z którego chcesz usunąć zdjęcie.
toaspzoo
A może nazwa pliku zostala zapisana jako ta pierwotna (w bazie, np. : " DSC0001.jpg ") a skrypt zmieniał nazwy na inne w stylu np. " foto_xxx.jpg "

17misiek09
aaaaa ha biggrin.gif
juz wiem wink.gif

sprawa wyglada tak - zle robisz ze dodajesz do bazy danych caly link do zdjecia - calkowicie nie potrzebnie.
przy usuwaniu plikow nie jest wazny caly link, wystarczy podac katalog+nazwe zdjecia

takze dodawac do bazy danych mozesz cos takiego "/katalog/nazwazdjecia.jpg"
i usuwac w ten sam sposob przez unlink
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.