sepuku
16.10.2007, 22:42:26
Chcialbym sie zapytac, ktory ze sposobow bedzie lepszy (bezpieczniejszy, wydajniejszy).
Skrypt przetwarzajacy potrzebuje informaji czy dany rekord jest w bazie (w tym czasie update), czy go jeszcze nie ma (insert), w takim razie przyszly mi 2 rozwiazania do glowy. W czasie budowania formularza, gdzie jest sporo pol, dodaje tez pola hidden z informacja czy byl rekord. W takim przypadku zlosliwi mogliby zmienic wartosci takich pol, skutkiem czego bylyby niepoprawnie dodane, uaktualnione dane w bazie. W drugim sposobie po prostu skrypt przetwarzajacy sprawdzalby czy istnieje w bazie rekord, minusem tego jest dodatkowe obciazenie bazy. Co w takim przypadku zrobic?
templar
16.10.2007, 23:14:16
Obciążenie będzie niewielkie. Jeśli dobrze to napiszesz.
<?php
$f = @mysql_query('SELECT `id` FROM `table` WHERE `name` = "'.$name.'" LIMIT 1');
if($c == 0) // nie mamy rekordu
else // mamy rekord
?>
Pozdrawiam.
sepuku
16.10.2007, 23:58:05
Gdyby byl to jeden rekord nie widzialbym w tym rozwiazaniu problemu, w gre wchodzi od 30 do 40 rekordow co moze tez nie jest tak wiele, ale nie jest to jeden rekord. Mysle, ze w czasie kiedy umieszczenie w hidden tych danych bedzie zbyt niebezpieczne, zastosuje to.
Dodam jeszcze, ze jaki kolwiek dostepo do edytowania tych danych jest po uprzedniej autoryzacji i otrzymaniu dostepu do strony.
Darti
17.10.2007, 00:11:38
o ile dobrze zrozumiałem ...
Tak czy inaczej pytasz bazę o istnienie czegoś, różnica jedynie polega na tym, kiedy to robisz (przed lub po zbudowaniu formularza i go wysłaniu).
Ja bym sprawdził po wysłaniu.
nevt
17.10.2007, 10:29:46
Widzę, że baza to MySQL.
Poszukaj i poczytaj o poleceniu REPLACE - działa jak INSERT + UPDATE - to znaczy dopisuje wiersze ale nadpisuje istniejące (gdy powiela sie wartość klucza podstawowego).
Pozdrawiam.
sepuku
18.10.2007, 10:51:26
Dzieki za naprowadzenie, REPLACE nie zabardzo spelnia moje wymagania, gdyz musialbym kompletowac wszystkie dane chcac updatowac jedno pole.
Po drodze poszukiwan znalazlem:
INSERT INTO slownik (haslo, znaczenie) VALUES('house', 'dom (budynek), rodzaj obiektu mieszkalnego.')
ON DUPLICATE KEY UPDATE znaczenie=VALUES(znaczenie);
Oznacza to, ze jesli zapytanie trafi na taka sama wartosc w polu haslo, ktore jest kluczem podstawowym nastapi update.
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.