Taifun
21.09.2011, 17:19:38
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
21.09.2011, 17:31:01
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:
SELECT COUNT(*) FROM tbl_name WHERE id = :id AND col_name_1 = :val1 AND col_name_2 = :val2 ...
Korab
21.09.2011, 17:38:08
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
21.09.2011, 17:43:53
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
21.09.2011, 17:58:57
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
21.09.2011, 19:52:52
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
21.09.2011, 20:08:29
foreach($_POST as $k => $v) {
foreach($row as $kk => $vv) {
if($k == $kk && $v != $vv) {
$zmien[] = $k.' = '.$v.',';
}
}
}
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ś
Crozin
21.09.2011, 20:40:17
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
22.09.2011, 11:16:05
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.