Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Ktora droga przekazac dane
Forum PHP.pl > Forum > Przedszkole
sepuku
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
Obciążenie będzie niewielkie. Jeśli dobrze to napiszesz.

  1. <?php
  2. $f = @mysql_query('SELECT `id` FROM `table` WHERE `name` = "'.$name.'" LIMIT 1');
  3. $c = @mysql_num_rows($f);
  4.  
  5. if($c == 0) // nie mamy rekordu
  6. else // mamy rekord
  7. ?>


Pozdrawiam.
sepuku
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
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.