Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Foreach przy zapisie do bazy?
Forum PHP.pl > Forum > PHP
max_mcee
Mam formularz pobierający z bazy danych użytkowników:
  1. <?php
  2.  
  3. $query = "SELECT * FROM user";
  4. $result = mysql_query($query);
  5. while($row = mysql_fetch_array($result)) {
  6.  
  7. ?>
  8. <tr>
  9. <td><?php echo $row['imie']; ?> <?php echo $row['nazwisko']; ?></td>
  10. <td><input type="text" name="formularz[a<?php echo $row['id_user']; ?>]" value="" /></td>
  11. <td><input type="text" name="formularz[b<?php echo $row['id_user']; ?>]" value="" /></td>
  12. <td><input type="text" name="formularz[c<?php echo $row['id_user']; ?>]" value="" /></td>
  13. </tr>
  14. <?php
  15. }
  16. ?>


Co daje nam w rezultacie


Mam kod php:
  1. <?php
  2.  
  3. if($_POST['submit'] == 1) {
  4.  
  5. $table = $_POST['formularz'];
  6. foreach($table AS $row) {
  7. $query = "INSERT INTO test (id, a, b, c) VALUES (NULL, '$row', '$row', '$row')";
  8. $result = mysql_query($query);
  9. }
  10. }
  11. ?>


który powinien zapisywać dla każdego użytkownika dane do bazy, jednak zamiast rezultatu który chciałbym uzyskać, czyli:


otrzymuję po wpisaniu w formularz danych w ten sposób:


taki wynik w bazie:


Hmmm nie mam za bardzo pomysłu jak to naprawić...
sadistic_son
No i co w tym dziwnego? Twoje zapytanie wrzuca do bazy 3 razy to samo czyli za a, b i c podstawia tą samą wartość $row.
max_mcee
no to widzę smile.gif

jednak nie wiem jak zrobić to tak, aby działało...
wizu
Strzel sobie
  1. var_dump($table);

lub
  1. print_r($table);

I zobacz co masz w tablicy. Może wtedy zobaczysz w czym problem.
max_mcee
zrobiłem to :
  1. var_dump($val);


co daje wynik:
  1. string(1) "1" string(1) "2" string(1) "3" string(1) "4" string(1) "5" string(1) "6" string(1) "7" string(1) "8" string(1) "9" string(2) "10" string(2) "11" string(2) "12"


jednak nie wiem jak to zapisać do bazy...

hatesz
Jeżeli masz jeden wiersz w tabeli `test` dla jednego użytkownika w tabeli `users` to zamiast instrukcji INSERT korzystaj z UPDATE i po prostu aktualizuj już jeden gotowy wiersz zamiast dodawania kolejnego...
max_mcee
istotom tego jest właśnie, aby były zapisywane za każdym razem nowe wyniki.
nie wierzę, że nie da się tego zrobić...
hatesz
Jeśli chcesz, aby za każdym nowym, wysłanym formularzem była stała ilość pozycji w BD to masz dwa wyjścia:
a) poprawiać je (UPDATE),
cool.gif usuwać stare (DELETE) i dodawać w ich miejsca nowe (INSERT).
max_mcee
a gdyby dodać jeszcze jedno pole np. z datą?
hatesz
Na jakiej zasadzie miało by to działać? Nie za bardzo rozumiem o co Ci chodzi.
max_mcee
tak aby każdy rekord był unikalny.
nie potrafię poradzić sobie z samym zapisem do bazy, dla każdego użytkownika tak jak wyżej, mają zostać zapisane wartości wpisywane w inputach.
ale jak to zapisuje to wychodzi jak wychodzi tak jak na screenie powyżej ...
chodzi mi o sam zapis tej tablicy do bazy, jak to wykonaćquestionmark.gif
potem, aby wpisy były unikatowe, można by dodać pole z datą, która nie może się powtarzać.
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.