Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] usuwanie zdjęcia pętlą foreach
Forum PHP.pl > Forum > Przedszkole
--maciek--
Witam. Proszę o pomoc bo mam taki problem.

Strona www wyswietla miniatury zdjec. Pod kazdym zdjeciem jest chceckbox i przycisk delete które pojawiają sie tylko wtedy gdy w tabeli sql wartosc pola aproved jest inna niz 1.

Kod ma za zadanie usunąc z bazy danych wiersz o danym id.

Przykładowo 20 zdjec na stronie z tego 5 ma w tabeli sql pole aproved ==1. Pozozstałe 15 zdjec wyswietlają sie razem z formularzem. Po zaznaczeniu chcekboxa z tabeli usuwany jest wiersz przypisany danemu zdjęciu. I ten kod niby działa,

ale chce zeby usuwał tez plik zdjecia z folderu obrazy. Gdy wpisze w wewnatrz pętli foreach @unlink (SCIEZKA . $zdjecie) to usuwa mi wszystkie 15 zdjec z folderu ale zostawia mi 14 pozostałych wierszy w tabeli sql, a chce zeby usunął mi tylko jeden wiersz(co robi) i jedno zdjecie (czego nie robi bo usuwa wszystkie)

jak to naprawic zeby usuwał jeden wiersz i jedno zdjecie

prosze o pomoc

....
  1. $id = $row['pic_id'];
  2. $apr = $row['pic_aproved'];
  3. if( $apr!=1) {
  4.  
  5. echo '<form id="form" action="'.$_SERVER['PHP_SELF'].'" method="post">';
  6. echo '<input type="checkbox" id="del" name="pic_id[]" value="'.$row['pic_id'].'" class="check"/>';
  7. echo '<input type="submit" id="submit" name="delete" value="delete" class="check-button"/></br>';
  8. echo '</form>';
  9.  
  10. if (isset($_POST['delete'])){
  11. foreach ( $_POST['pic_id'] as $id )
  12. {
  13. $query2 = "DELETE FROM pictures WHERE pic_id =$id LIMIT 1 ";
  14. mysqli_query($dbc, $query2) or die ('Error');
  15. //@unlink (SCIEZKA . $zdjecie);
  16. }
  17. }
  18. }

...
erix
Na pewno ścieżka jest prawidłowo konstruowana?

Podstaw sobie jakieś echo z argumentem unlinka i wtedy przejrzyj.

PS. SQL-injection się kłania.
-maciek-
Ma ktoś jeszcze jakiś pomysł?
CuteOne
skąd pobierasz nazwę zdjęcia? na pewno jest prawidłowa? napisz nam co się wyświetli gdy zamiast unlink wstawisz
  1. echo SCIEZKA . $zdjecie;
-maciek-
Witam
kiedy zamiast unlinka wstawie echo to jak zaznacze checkboxa i klikne delete wyswietla sie pod zdjeciami sciezka dostepu : IMAGES/01.jpg pod nastepnym zdjeciem IMAGES/02.jpg itd.. i taką mam lokalizacje zdjec.
erix
A is_readable zamiast unlink co zwraca?
-maciek-
jesli ta linia jest prawidłowa

is_readable (SCIEZKA . $row['file_name']);

to nic
toaspzoo
  1. echo is_readable (SCIEZKA . $row['file_name']);


...
-maciek-
wyświetla 1
toaspzoo
Czyli plik ma prawa odczytu.

Zrób tak:

  1. if(is_readable(SCIEZKA . $row['file_name']))
  2. {
  3. chmod(SCIEZKA . $row['$file_name'], 0775);
  4. unlink (SCIEZKA . $row['$file_name'])
  5. }
  6. else
  7. {
  8. echo 'PLIK NIECZYTELNY! ('.SCIEZKA.$row['$file_name'].');
  9. }


Ew. sprawdź po kolei wszystkie ścieżki do katalogów
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.