Usuwanie rekordu z bazy i pliku z serwera

0

Dzień dobry.
(chyba mały) problem, ale nie umiem sobie z nim poradzić...

<?php
 

$wynik = mysql_query("SELECT * FROM galeria ORDER BY id_zdjecie desc")
or die('Błąd zapytania');


if(mysql_num_rows($wynik) > 0) {

    echo "<center><table cellpadding=\"2\" style='width: 500px;border: 0px solid #777777;'>";
    while($r = mysql_fetch_assoc($wynik)) {
        echo "<tr>";
        echo "<td width='60%'><h9>".$r['nazwa_zdjecie']."</h9>";
        echo "<h5>".$r['opis_zdjecie']."</h5></td>";
	echo "<td align='center'><img src='".$r['link_zdjecie']."' style='background: #ffffff; padding: 4px;width: 100px;height: 100px; border: 1px solid #312715;'></td>";
        echo "<td align='center'>
	
	      <a href=\"wyswietl.php?a=del&amp;id_zdjecie={$r['id_zdjecie']}\" onclick='return confirm(\"Czy na pewno usunąć?\")'>Usuń</a> 
	
	</td>";
        echo "</tr>";
    }
    echo "</table></center>";
}

$a = trim($_GET['a']);
$id = trim($_GET['id_zdjecie']);

if($a == 'del' and !empty($id)) {
    

    mysql_query("DELETE FROM galeria WHERE id_zdjecie='$id'")
    or die('Błąd zapytania: '.mysql_error());
    
    echo '<script>setTimeout("document.location = \"usunieto.php\"", 1000);</script>';
} 
 

 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
 
 ?>

Chodzi generalnie o to żeby po kliknięciu USUŃ oprócz usuwania rekordu z bazy usuwany był też odpowiedni plik z serwera...

Przeglądałem różne fora, czytałem o unlink(), ale niestety, mimo kilku dni prób nadal nie potrafię tego zastosować...
Nie jestem też pewien czy ten kod jest poprawny, ale generalnie wykonuje to co chciałem żeby wykonywał (znaczy prawie bo nie usuwa pliku z serwera) :)
Jak ktoś znajdzie chwilkę i ochotę żeby się temu przyjrzeć i mi pomóc będę strasznie wdzięczny...

0

przed wykonaniem DELETE wybierz sobie rekord, który będziesz usuwał, wybierz z tego link do pliku, użyj unlink (odsyłam do manuala php) - zwróć uwagę na ścieżkę, usuń rekord przez DELETE

w ogóle nie ogarniam.. Jeżeli napisałeś choć tyle, co masz tam wyżej - to powinieneś głupie usuwanie pliku też potrafić napisać.

BTW: poczytaj o SQL Injection. Twój skrypt jest dziurawy.

0

ZANIM usuniesz rekord odczytaj z niego nazwę pliku do usunięcia. Potem spróbuj usunąć plik poleceniem usuwającym plik :) - unlink. Jak się uda, to dopiero wtedy usuwasz rekord. Jak się nie uda, to myślisz co zrobić...

0

Próbuje i nie bardzo...
W bazie w "link_zdjecie" mam przechowywane dane w postaci:

"img/nazwa_pliku.jpg"

I chyba nie wyciągało mi z tego nazwy pliku...
Szukałem na forach i gdzieś znalazłem żeby spróbować coś w stylu:

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4); 

Jeśli robię to przy wyświetlaniu to obcina tą część img/ i zostawia samą nazwę pliku więc to chyba jest ok...

Napisałem teraz coś takiego:

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4);  
$katalog = '/img';
unlink(''.$katalog.'/'.$plik.'');

Ale nadal nie działa :(
Teraz wyrzuca mi :

"Warning: unlink(/img/) [function.unlink]: No such file or directory..."

Może jeszcze jakaś podpowiedź?

0

daj:

echo $_SERVER['SCRIPT_FILENAME'];

żeby zobaczyć gdzie jest twój skrypt na serwerze a potem pomyśl jeszcze raz czy obrazki które chcesz usunąć są w folderze /img

0

Po wykonaniu

echo getcwd() . "\n";
chdir('img');
echo getcwd() . "\n";

Dostaje:

/home/a9064743/public_html/galeria
/home/a9064743/public_html/galeria/img

Obrazki mam w folderze img,
ale po

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4);  
$katalog = trim('img');
unlink(''.$katalog.'/'.$plik.'');

wyświetla

"Warning: unlink(img/) [function.unlink]: Is a directory in..."

Muszę chyba wejść do tego katalogu img i tam wykonać unlink(), tylko nie umiem...
Próbowałem tak:

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4);  
chdir('img');
unlink($plik);

Wyświetla:

"Warning: unlink() [function.unlink]: open_basedir restriction in effect. File() is not within the allowed path(s): (/home/:/usr/lib/php:/tmp) in /home/..."

I tak

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4);  
$katalog = trim('img/');
unlink($plik);

dostaję:

"Warning: unlink() [function.unlink]: open_basedir restriction in effect. File() is not within the allowed path(s): (/home/:/usr/lib/php:/tmp) in /home/..."

I chyba nie mam już pomysłu.. :(

0
 

<?php
 

 

$wynik = mysql_query("SELECT * FROM galeria ORDER BY id_zdjecie desc")
or die('Błąd zapytania');

if(mysql_num_rows($wynik) > 0) {

    echo "<center><table cellpadding=\"2\" style='width: 500px;border: 0px solid #777777;'>";
    while($r = mysql_fetch_assoc($wynik)) {
        echo "<tr>";
        echo "<td width='60%'><h9>".$r['nazwa_zdjecie']."</h9>";
        echo "<h5>".$r['opis_zdjecie']."</h5></td>";
	echo "<td align='center'><img src='".$r['link_zdjecie']."' style='background: #ffffff; padding: 4px;width: 100px;height: 100px; border: 1px solid #312715;'></td>";
        echo "<td align='center'>
	
	      <a href=\"wyswietl.php?a=del&amp;id_zdjecie={$r['id_zdjecie']}\" onclick='return confirm(\"Czy na pewno usunąć?\")'>Usuń</a> 
	
	</td>";
        echo "</tr>";
    }
    echo "</table></center>";
}

$a = trim($_GET['a']);
$id = trim($_GET['id_zdjecie']);

if($a == 'del' and !empty($id)) {
    

$link = trim($r['link_zdjecie']);
$plik = substr($link, 4);  
$katalog = 'img';
unlink(''.$katalog.'/'.$plik.'');
    mysql_query("DELETE FROM galeria WHERE id_zdjecie='$id'")
    or die('Błąd zapytania: '.mysql_error());
    
    echo '<script>setTimeout("document.location = \"usunieto.php\"", 1000);</script>';
} 
 

 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
 
 ?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1