Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kasowanie plików - teoria i praktyka
Forum PHP.pl > Forum > PHP
tikky
Jak rozwiązujecie np. kasowanie plików. Wyświetlam na stronie jakieś dane z tabeli i przy każdej z nich robię linka typu
Kod
kasuj.php?id_do_skasowania=123
, ale każdy kto zna taki link, może wstawić swój numer zamiast "123" i skasować mi coś.

Jaki sposób jest najlepszy: przekazać zmienną post'em, cookie, a może da się jakoś skasować "w tle" używając AJAXa lub czegoś podobnego?

Jak to zrobić w elegancki i bezpieczny sposób?

Pozdrawiam

Tikky
sowiq
Domyślam się, że nie każdy może kasować pliki. Masz jakiś system logowania do panelu admina?

Sprawa jest banalnie prosta:
  1. <?php
  2. // kasuj.php
  3. if(zalogowany()){
  4.    // tutaj filtrujesz dane, żeby nie usunąć czegoś, co usunięte być nie powinno
  5.    @unlink($plik_do_skasowania);
  6. }
  7. else{
  8.   echo "Brak dostępu";
  9. }
  10. ?>
tikky
Tak mam skrypt logowania, chodzi o kasowanie z bazy a nie kasowanie pliku, ale to akurat nie jeste teraz najważniejsze.

A jak zrobić, żeby można było kasować "w tle"?
sowiq
Ale jaka różnica, czy robisz to 'w tle', czy po przejściu na jakiś adres? W obu przypadkach wysyłane jest zapytanie do serwera, w obu przypadkach musisz coś kliknąć, żeby coś innego zadziałało.

Jak dla mnie masz złe podejście do sprawy. Wszędzie gdzie wykonujesz jakieś operacje dozwolone tylko dla admina musisz sprawdzać, czy admin jest zalogowany. Nie możesz polegać na tym, że ktoś akurat nie będzie wiedział, że po wpisaniu tego adresu coś się usunie. Bo adres wywoływany przez Ajax'a ('w tle') można równie dobrze wpisać do paska adresu w przeglądarce.
mrok
Cytat
chodzi o kasowanie z bazy

zrób sobie jakiś klucz obcy od uzytkownika i potrm tylko sprawdz

if (ten_rekord_został_dodany_przez_tego_usera){
skasuj()
}

ten_rekord_został_dodany_przez_tego_usera - oczywiście przez to rozumiem usera aktualnie zalogowanego, bedzie mogl co nawyzje skasowac wlasne pliki (a kto chce zle robic samemu sobie?)

opcjonalnie jesli chcesz jeszcze bardziej zawezic mozliwosc kasowania to wstaw sobie jakas kolumne z flaga np: zaarchiwizowane i jesli rekord ma taki status to nawet wlasciciel nie moze go skasowac.

Wszystko powyżej zalatwia Ci umiejetenie zastosowany WHERE w zapytaniu sql.

Cytat
?id_do_skasowania=123

I na wszelki wypadek poszukaj sobie jakichs materialow na temat SQL Injection

Pozdrawiam
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.