[php]problem ze scryptem

Kostek próbowałem obydwa scrypty i nic się nie dzieje,zamiast usuwać to przenosi na stronę główną.Zdjęcia nadal są w bazie i na serwerze.

To jest niemożliwe musi cie przenieść do miejsca z którego kliknąłeś link, bo $_SERVER[‘PHP_SELF’], zwraca relatywna ścieżkę miejsca w którym jesteś. Mógłbyś mi cały skrypt podesłać na priv, być może używasz jakiś mechanizmów autoryzacji sesji jak sid?

Kostek scrypt nadal nie usuwa avatara,tylko przenosi na stronę główną.Gdzie jest błąd przecież wyświetla zdjęcie z bazy do usunięcia i klikasz i nic.Może nie otwiera folderu z avatarami,może trzeba zastosować opendir,czy coś podobnego.Pomóż mi z tym scryptem.

Sorki weekend majowy :stuck_out_tongue:

Zrób jeszcze tak (takie testowanie czy w ogóle działa zapytanie do bazy bo już naprawdę nie wiem co może być) u mnie wkleiłem na serwer ten skrypt co podałem wcześniej utworzyłem tabele o nazwie i kolumnach jakie w postach wcześniej podałeś i wszystko co miało się usunąć, znikło. Stwórz nowy plik o nazwie testujemy.php i wklej do niego:

<?

error_reporting(-1);

//połączenie z bazą wpisz tu sobie sam jak tam się z nią łaczysz

$select = mysql_query("SELECT * FROM uzytkownicy WHERE id = TU_PODAJ_ISTNIEJĄCE_W_BAZIE_ID"); // z palca podaj jakąś cyfrę wbitą w kod pod TU_PODAJ_ISTNIEJĄCE_W_BAZIE_ID (ważne żeby takie id było w bazie i miało jakiś avatar)

if($select === false) die("Nie udało się usunąć avatara");

$user = mysql_fetch_assoc($select);

$update = mysql_query('UPDATE uzytkownicy SET link_avatar = "" WHERE id = "'. $user['id'] .'"');

echo "Avatar usunięty";

?>

uruchom plik poprzez wrzucenie go na serwer do katalogu domowego i wpisanie w url http://www.twoja-domena.pl/testujemy.php, jeśli wyświetliło się, że avatar został usunięty to potem sprawdź (przez phpMyAdmin czy coś takiego) czy w bazie przy danym ID zniknęła informacja o avatarze. Jeśli to wcześniejsze się uda przywróć informacje o avatarze do bazy i do swojego skryptu wklej tak:

<?

//na samym poczatku daj poniższą linie

error_reporting(-1);

//Tu musisz być połaczony z baza i miec już zalogowanego użytkownika

if($_GET['avdelete'] === 'yes') {

    $update = mysql_query('UPDATE uzytkownicy SET link_avatar = "" WHERE nick = "' . $user['nick'] . '"');

    $fileToDelete = 'avatar/'.$user['link_avatar'];

    echo '$flieToDelete = ' . $fileToDelete; //To jest tylko na chwile (debug) napisz co to wyświetla po kliknieciu w link "Usuń Avatar".

    if(file_exists($fileToDelete)){

        unlink($fileToDelete);

    }

}

echo 'Nick: '.$user['nick'].'
';

echo 'Nazwa avataru: '.$user['link_avatar'].'
';

echo '
';

echo 'Usun avatar';

?>

[/code]


Jeżeli podczas uruchamiania wyskoczy jakikolwiek błąd interpretera php, podaj go tutaj. Acha i przeczytaj wszystkie komentarze w obu skryptach + zastosuj się do nich.



UPDATE

Powiedz mi jeszcze jak ty przechowujesz te avatary w bazie? "avatar/nazwa.jpg" czy "nazwa.jpg", bo sam poprawiłeś mi w którymś skrypcie jak teraz popatrzyłem sobie w tył

[code] echo ’ '.$user%5B'link_avatar'%5D.'na taką linię

echo '
';

[/code]

a ja ciągle uparcie pisałem w skrypcie usuwający fileToDelete z /avatar i w końcu sam już nie wiem jak ty to masz ułożone w tej bazie. Ja przyjąłem, że nikt przy zdrowych zmysłach nie będzie trzymał całego drzewa (redundancja wiadomo) tylko nazwy plików jeśli już - chociaż i to nie jest wydajne.

Witam kostek spróbowałem twój pierwszy kod,czyli stworzyłem osobny plik.php,przypisałem ręcznie id=1 czyli mój avatar i usunęło avatara w bazie.Został jeszcze ten avatar w folderze avatar/14141414.jpg na serwerze,no i jeszcze problem zapisanie aby to zalogowany użytkownik usuwał avatara.Odnośnie przechowywania zdjęć w bazie,to zapisują się w polu link_avatar i mają postać:avatar/img7fdc1a630c238af0815181f9faa190f5.jpg.Drugi scypt nie usuwa,żadnego komunikatu.

<?php

  error_reporting(-1); require 'db.php';

  $nick = $_SESSION['nick'];

$haslo = $_SESSION['haslo'];

    if ((empty($nick)) AND (empty($haslo))) {

echo '
Nie byłeś zalogowany albo zostałeś wylogowany
Strona Główna
';

exit;

}

$user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));

    if (empty($user[id]) OR !isset($user[id])) {

echo '
Nieprawidłowe logowanie.
';

exit;

}

// tresc dla zalogowanego uzytkownika

echo 'Witaj '.$user[nick].'';  

 echo '
'; echo 'Wyloguj mnie'; echo 'Dodaj tapete'; echo 'Zobacz profile'; echo 'usun avatar'; echo '
';echo '
';		    

echo '
'; if($_GET['avdelete'] === 'yes') {

    $update = mysql_query('UPDATE uzytkownicy SET link_avatar = "" WHERE nick = "' . $user['nick'] . '"');

    $fileToDelete = 'avatar/'.$user['link_avatar'];

    echo '$flieToDelete = ' . $fileToDelete; //To jest tylko na chwile (debug) napisz co to wyświetla po kliknieciu w link "Usuń Avatar".

    if(file_exists($fileToDelete)){

        unlink($fileToDelete);

    }

}

echo 'Nick: '.$user['nick'].'
';

echo 'Nazwa avataru: '.$user['link_avatar'].'
';

echo '
';

echo 'Usun avatar';								

     ?> [/code]

Pierwszy zrobił co miał zrobić, bo nie było usuwania pliku wpisanego chciałem tylko zobaczyć czy to wina UPDATE, czy nie jest wysyłana zmienna get okazuje się, iż to drugie, co mnie lekko zaskakuje. Możesz mi wyjaśnić co to jest bo nie tak to wygląda u mnie

echo 'Usun avatar';

[/code]


nie rozumiem tego kawałka. Ewentualnie (jeśli przypuszczam słusznie) zastąp to takim oto kawałkiem:

[code] echo ‘Usun avatar’;
Generalnie coś jest nie-halo z adresami url, bo to nie wysyła drugiej zmiennej, bo nie weszliśmy do tego if-a

if($_GET['avdelete'] === 'yes')

Tak chyba będzie wyglądać całość (poprawiłem też ścieżkę, bo myślałem, że w bazie nie ma tego “avatar/”) - imho powinieneś to zmienić ze względu na redundancję. Jakbyś miał bardziej rozbudowane drzewo plików tylko zapychasz bazę niepotrzebnymi danymi.

<?

//Tu musisz być połaczony z baza i miec już zalogowanego użytkownika

if($_GET['avdelete'] === 'yes') {

    $update = mysql_query('UPDATE uzytkownicy SET link_avatar = "" WHERE nick = "' . $user['nick'] . '"');

    echo '$flieToDelete = ' . $user['link_avatar']; //To jest tylko na chwile (debug) napisz co to wyświetla po kliknieciu w usuń link.

    if(file_exists($user['link_avatar'])){

        unlink($user['link_avatar']);

    }

}

echo 'Nick: '.$user['nick'].'
';

echo 'Nazwa avataru: '.$user['link_avatar'].'
';

echo '
';

echo 'Usun avatar';

?>

[/code]

poprawiłem scrypt tak jak mi napisałeś i najpierw $flieToDelete wyświetliło nazwę zdjęcia,a póżniej jak drugi raz kliknąłem avatar zosatał usunięty.Chyba dobrze działa.Jeśli myślisz też tak to bardzo dziękuję za pomoc. :smiley:

Też tak myślę (dwie dezinformacje były problemem to, że zmieniałeś na zły $_GET i to że zrozumiałem iż nie ma przedrostka avatar/) w porównaniu do mojej pierwszej wersji to jest bezpieczne, bo każdy może tylko swojego avatara usunąć, jak chcesz, żeby nie trzeba było odświeżać (przynajmniej user nie musi) to wykorzystaj przekierowanie funkcją header() po usunięciu obrazka. Acha i usuń ten debug :stuck_out_tongue:

UPDATE

Albo zrób bez hedera po unlinku daj

unset($user['link_avatar']);

a jakby nie poszło to daj

$user['link_avatar'] = "";

Będzie działać bez ponownego odświeżania, bo informacja ciągle jest z catchowana w tablicy $user po usunięciu - tak naprawdę już po wyjściu z ifa nie ma avatara w bazie.

Usunąłem debug,żeby usunąć avatar trzeba kliknąć 2 razy na link.CZy tak ma być.

nie trzeba jeżeli wprowadzisz poprawkę, którą napisałem wyżej wklej to:

<?

//Tu musisz być połaczony z baza i miec już zalogowanego użytkownika

if($_GET['avdelete'] === 'yes') {

    $update = mysql_query('UPDATE uzytkownicy SET link_avatar = "" WHERE nick = "' . $user['nick'] . '"');

    echo '$flieToDelete = ' . $user['link_avatar']; //To jest tylko na chwile (debug) napisz co to wyświetla po kliknieciu w usuń link.

    if(file_exists($user['link_avatar'])){

        unlink($user['link_avatar']);

    }

    $user['link_avatar'] = ""; //Dodana linijka

}

echo 'Nick: '.$user['nick'].'
';

echo 'Nazwa avataru: '.$user['link_avatar'].'
';

echo '
';

echo 'Usun avatar';

?>[/code]