Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Algorytm na sprawdzanie czy użytkownik coś zmienił przy formularzu do edycji danych
Forum PHP.pl > Forum > Przedszkole
Taifun
witam,
Jak sprawdzacie w swoich skryptach, że użytkownik dokonał jakiś zmian podczas edycji danych (standard: <form ...>)?

Ja umiem wykryć tylko, że użytkownik wysłał formularz i być może coś się zmieniło ale równie dobrze nic nie zmieni i kliknie zapisz to wyświetli mu komunikat, że "dane zapisano".
Po głowie chodzi mi porównywanie danych z bazy mysql do tych z formularza, które użytkownik przesłał ale w przypadku programowania strukturalnego i dużej ilości pól jest to trochę brzydkie.
Jakie macie na to sposoby?
Crozin
Jedyny sposób po sprawdzenie każdego pola z odpowiadającym mu w bazie danych. O ile formularz nie reprezentuje jakiejś paskudnie rozbudowanej (relacyjnie) struktury to nawet nie będzie to specjalnie męczące:
  1. SELECT COUNT(*) FROM tbl_name WHERE id = :id AND col_name_1 = :val1 AND col_name_2 = :val2 ...
Korab
Ja mam formularz, w którym inputy i textaree są aktywowane po zaznaczeniu checkboxa. Jak użytkownik chce coś zmienić, to klika checkboxa i aktywuje się do edycji odpowiednie pole.
Taifun
Cytat
Jak użytkownik chce coś zmienić, to klika checkboxa i aktywuje się do edycji odpowiednie pole.

a jak zaznaczy ale nic nie zmieni to co?
Korab
Na ogół zaznaczają tylko wtedy, kiedy chcą coś zmienić. A pola są takie, że osoba, która wchodzi, wie, co chce zmienić - i tylko to zaznacza. Nie jest to doskonałe rozwiązanie, ale na pewno szybsze niż porównywanie, czy coś się zmieniło, albo dodawanie wszystkiego na pałę (minimalnie szybsze, ale zawsze coś).
Taifun
a są jakieś wzorce, klasy, szablony, funkcje dotyczące edytowania danych ?
Ja to pisze tak jak 100 lat temu czystym kodem php bez oop ;p
CuteOne
  1. foreach($_POST as $k => $v) {
  2.  
  3. foreach($row as $kk => $vv) {
  4.  
  5. if($k == $kk && $v != $vv) {
  6.  
  7. $zmien[] = $k.' = '.$v.',';
  8. }
  9. }
  10. }


Prościutki przykład jak sprawdzić czy coś się zmieniło... $row to wiersz z bazy danych. Bolączką tego rozwiązania jest to że nazy kolumn muszą odpowiadać nazwom pól z formularza ale coś za coś wink.gif
Crozin
Cytat
Na ogół zaznaczają tylko wtedy, kiedy chcą coś zmienić. [...]
Na ogól w edycję danych wchodzi się tylko wtedy, gdy chce się coś zmienić.

Na dobrą sprawę możesz wszystko zaktualizować. MySQL sam przed wprowadzeniem zmian sprawdza czy w ogóle trzeba je wprowadzać (czy dane się różnią). W dodatku po wykonaniu UPDATE-a możesz przy pomocy ROW COUNT-a zobaczyć ile rekordów zostało faktycznie zaktualizowanych (0 - dane się nie zmieniły, 1+ - dane się zmieniły).
Taifun
za ROW COUNT wielkie dzięki!
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.