Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Edycja i zarazem dodawanie nowych danych do bazy
Forum PHP.pl > Forum > Przedszkole
alex19
Potrzebuję zrobić taki myk, że jak użytkownik otworzy sobie formularz edycji, to zobaczy listę maili. Będzie mógł wyedytować to co już jest ale także dodać nowego maila.
Wszystko fajnie i prosto, bo maile dla danego ID(klienta) pobiorę sobie z bazy w pętli, powypełniam input'y i będzie to co już jest, użytkownik doda sobie nowe pole(a) i fajnie, ale jak zapisać do bazy nowe i poprawić te, które zostały zmienione.

Jeżeli zrobię sobie tak:
  1. <input type="text" name="email[]" />

to w efekcie dostane w PHP tablicę tych maili. Pytanie teraz jak rozróżnić te stare, które już były w bazie od tych, które trzeba dodać.

Czy jest jakieś sensowne i łatwe rozwiązanie tego problemu czy pozostaje tylko rzeźba z milionem warunków i zapytań do bazy?
ayeo
Możesz zdublować te inputy:
Kod
<input name="email[1][original_value]" hidden />
<input name="email[1][new_value]" />


Jeśli original_value jest inna niż new_value to znaczy, że było edytowane. Ta jedynka to id wiadomości. Jednak to sposób słaby bo podatny na manipulacje ze strony usera.

EDIT: to powyżej jest całkowicie bezsesnu smile.gif Musiałbyś budować sobie tablicę/kolekcję tych maili (identycznie jak przy wyświetlaniu listy wcześniej) i to traktować jako original_value.
alex19
Hmmm... to jest jakiś trop i to całkiem nie głupi wink.gif

Manipulacja mnie powiedzmy, że nie dotyczy, bo to będzie tylko lokalnie dostępne i nikt nie będzie ani umiał ani chciał manipulować danymi.

Ja chyba nie muszę wiedzieć co było tylko bardziej mnie interesuje tego ID, więc formularz można uprościć o pola hidden, ale co z nowo dodanymi przez JS?

Formularz ma wtedy wyglądać tak?
  1. <input type="text" name="email[id_w_bazie-1]" /> <!-- id_w_bazie-1=456 -->
  2. <input type="text" name="email[id_w_bazie-2]" /> <!-- id_w_bazie-1=500 -->
  3. <input type="text" name="email[id_w_bazie-3]" /> <!-- id_w_bazie-1=567 -->
  4. <!-- doddane przez JS -->
  5. <input type="text" name="email[]" /> <!-- jaka tu jest wartośćquestionmark.gif? -->


OK. Wielkiej pomocy nie otrzymałem, ale jakiś trop chociaż.

Problem rozwiązałem samemu w następujący sposób:
1. Problem oddzielenia danych edytowanych od nowych jest trywialny, ale trzeba było to przemyśleć. Wystarczy przecież inaczej nazwać pola imput i po sprawie.
2. Mając ten pomysł idzie już z górki, bo w pętli pokazujemy wypełnione pola i zarazem robimy sobie w nazwach tablicę z indexami z bazy
  1. while($dd = mysql_fetch_assoc(...)){
  2. echo '<input type="text" name="nasze_pole['.$dd['id_z_bazy'].']" value="'.$dd['wartosc'].'" />';
  3. }

Tym sposobem po wysłaniu formularza wróci nam w zmiennej POST tablica wartosciami i ich indeksami. Teraz tylko w pętli foreach update wszystkiego:
  1. foreach($_POST['nasze_pole'] as $id => $dane){
  2. $sql = "update tabela set nasza_dana='$dane' where id='$id'";
  3. mysql_query($sql);
  4. }

Drugą częśc problemu rozwiązujemy podobnie, ale zamiast gotowych pól dodajemy nowe za pomocą JS i wystarczy że bądą miały inną nazwe np.:
  1. <input type="text" name="naszae_nowe_pole[]" />

Tu nie trzeba wpisywać indeksów, bo wypełniają się automatycznie od 0. Jak wyślemy formularz to obrabiamy zmienna POST tak samo tylko że robimy insert.

Jest to chyba najprostsze rozwiązanie.
We wcześniejszym poście ayeo pisał, że podawanie id nie jest zbyt bezpieczne. Zgadzam się z tym i jestem ciekaw jak to zabezpieczyć lub jak zrobić bezpieczniejsze rozwiązanie problemu smile.gif
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.