Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: user chce ustawic kolejnosc,
Forum PHP.pl > Forum > PHP
AxZx
witam

mam 2 sporne kwestie nad ktorymi sie zastanawiam - wynikaja one z usuniecia zdjecia przez usera
zdjecie jest fizycznie zapisywane na serwerze, oraz jego dane oraz dodatkowe info w bazie,

1) jak ma wygladac bezpieczna procedura usuwania?
(chodzi mi juz o sam skrypt)
najpierw usuniecie danych z bazy a pozniej fizycznie z dysku?
czy na odwrot?
a co jesli ktoras z operacji nie wykona sie poprawnie?
bedzie taka sytuacja ze bedzie albo samo zdjecie bez wpisu w bazie albo sam wpis w bazie bez zdjecia (questionmark.gif?)

2) teraz kolejnosc zdjecia..
w tabeli mam kolumne zdjecie_kolejnosc - wedlug tej wartosci sa sortowane zdjecia na stronie
jezeli user usunie zdjecie ze srodka trzeba chyba od nowa przypisac kazdemu zdjeciu nowa wartosc zdjecie_kolejnosc
(?)
czy takie rozwiazanie bedzie dobre?

  1. <?php
  2. $i=0;
  3. $zap = $sql->query('SELECT * FROM zdjecia ORDER BY zdjecie_kolejnosc ASC');
  4. while($dane = $sql->fetch_assoc($zap)){
  5. $i++;
  6. $sql->query('UPDATE zdjecia SET zdjecie_kolejnosc = '.$i.' WHERE zdjecie_id = '.$dane1['zdjecie_id'].' LIMIT 1');
  7. }
  8.  
  9. ?>


z gory dzieki za jakies wskazowki
pozdrawiam
konys
1.
Cytat
jak ma wygladac bezpieczna procedura usuwania?
(chodzi mi juz o sam skrypt)
najpierw usuniecie danych z bazy a pozniej fizycznie z dysku?
czy na odwrot?

Chodzi o zachowanie spójności między danymi przechowywanymi na dysku, a danymi przechowywanymi w bazie. Kolejność usuwania danych będzie identyczna z kolejnością ich łączenia (jeśli pobierasz dane zdjęcia z katalogu, po czym szukasz informacji o nim w bazie (na podstawie np. nazwy pliku), najpierw powinieneś usunąć zdjęcie, następnie dane z bazy). Jeśli zaś pobierasz info o pliku z bazy a następnie wyświetlasz zdjęcie, usuń w pierwszej kolejności rekord w bazie.
Cytat
a co jesli ktoras z operacji nie wykona sie poprawnie?

Uruchom w cronie skrypt oczyszczający bazę z niepotrzebnych rekordów (w pierwszym przypadku) lub niepotrzebnych zdjęć (w drugim).
2. Jeśli użytkownik wyrzuci zdjęcie ze środka, kolejność jest nadal zachowana, nie musisz nic update'ować. Bardziej obrazowo: po wyrzuceniu 3 z ciągu (1,2,3,4,5) otrzymujesz (1,2,4,5) i zdjęcia są odpowiednio posortowane.
AxZx
tak, sa dalej posortowane, ale moze to popsuc mi skrypt do zmiany tej kolejnosci
konys
Skoro musisz mieć zdjęcia ustawione w kolejności zwiększającej się o 1, wykonaj przy kasowaniu zapytania:
  1. <?php
  2. $qr = 'SELECT zdjecie_kolejnosc FROM zdjecia WHERE zdjecie_id='.$id_kasowanego_zdjecia;
  3. $res = mysql_query($qr) or die($qr.' '.mysql_error());
  4. if( mysql_num_rows($res) ){
  5.  list($kolejnosc) = mysql_fetch_array($res);
  6.  $qr2 = 'UPDATE zdjecia SET zdjecie_kolejnosc=zdjecie_kolejnosc-1 WHERE zdjecie_kolejnosc>'.$kolejnosc;
  7.  $res2 = mysql_query($qr2) or die($qr2.' '.mysql_error());
  8.  
  9. ?>

A skrypt:
  1. <?php
  2. $i=0;
  3. $zap = $sql->query('SELECT * FROM zdjecia ORDER BY zdjecie_kolejnosc ASC');
  4. while($dane = $sql->fetch_assoc($zap)){
  5. $i++;
  6. $sql->query('UPDATE zdjecia SET zdjecie_kolejnosc = '.$i.' WHERE zdjecie_id = '.$dane1['zdjecie_id'].' LIMIT 1');
  7. }
  8. ?>

umieść w cronie.
AxZx
o widzisz, wlasnie o to mi chodzilo, myslalem o tym ale sie za to nie zabralem
dzieki

a ten drugi kod (moj - ktory wczesniej podalem) wrzucic do crona zeby robil sobie w nocu w cenu ewentualnego sprawdzenia czy nie ma bledow - albo poprawienie bledow, tak?
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.