Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Zapis do bazy danych w pętli
Forum PHP.pl > Forum > Przedszkole
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ć...

lord2105
  1. <td><input type="text" name="formularz[a<?php echo $row['id_user']; ?>][]" value="" /></td>
  2.  
  3. <?php
  4. foreach ($formularz as $user) {
  5. foreach ($user as $val) {
  6. $query = "INSERT INTO test (id, a, b, c) VALUES ($user, '$val', '$val', '$val')";
  7. }
  8. }
  9. ?>
max_mcee
Zrobiłem tak jak napisałeś:

  1. <table>
  2. <tr>
  3. <td>Imię i nazwisko</td>
  4. <td>Ilość a</td>
  5. <td>Ilość b</td>
  6. <td>Ilość c</td>
  7. </tr>
  8. <form method="POST" action="">
  9. <?php
  10.  
  11.  
  12. mysql_connect("localhost", "root", "") or die ("Nie połączono");
  13. mysql_select_db("test") or die ("Nie udało się wybrać bazy");
  14. $query = "SELECT * FROM user";
  15. $result = mysql_query($query);
  16. while($row = mysql_fetch_array($result)) {
  17.  
  18. ?>
  19. <tr>
  20. <td><?php echo $row['imie']; ?> <?php echo $row['nazwisko']; ?></td>
  21. <td><input type="text" name="formularz[a<?php echo $row['id_user']; ?>][]" value="" /></td>
  22. <td><input type="text" name="formularz[b<?php echo $row['id_user']; ?>][]" value="" /></td>
  23. <td><input type="text" name="formularz[c<?php echo $row['id_user']; ?>][]" value="" /></td>
  24. </tr>
  25. <?php
  26. }
  27. ?>
  28. <tr>
  29. <td><input type="hidden" name="submit" value="1" /></td>
  30. <td><input type="submit" value="zapisz" /></td>
  31. </tr>
  32. </form>
  33. </table>
  34.  
  35. <?php
  36.  
  37. if($_POST['submit'] == 1) {
  38. $formularz = $_POST['formularz'];
  39. $id = $row['id_user'];
  40. foreach ($formularz as $user) {
  41. foreach ($user as $val) {
  42. $query = "INSERT INTO test (id, a, b, c) VALUES ($user, '$val', '$val', '$val')";
  43. $result = mysql_query($query) or die('BŁĄD:'.mysql_error());
  44. }
  45. }
  46. }
  47.  
  48.  
  49. ?>
  50.  


i otrzymuję wiadomość z sql:

  1. BŁĄD:Unknown column 'Array' in 'field list'


co może być jeszcze źle questionmark.gif

może do tego da się użyć innej pętli questionmark.gif
lord2105
sprawdź sobie czy podtablice tablicy wielowymiarowej $formularz zawierają interesujące cię dane:

  1. <?php
  2. foreach ($formularz as $user) {
  3. var_dump($user);
  4. echo '<br><br>';
  5. }
  6. ?>
max_mcee
zawierają, ale źle zapisują się do bazy...

  1. array(1) { [0]=> string(1) "1" }
  2.  
  3. array(1) { [0]=> string(1) "2" }
  4.  
  5. array(1) { [0]=> string(1) "3" }
  6.  
  7. array(1) { [0]=> string(1) "4" }
  8.  
  9. array(1) { [0]=> string(1) "5" }
  10.  
  11. array(1) { [0]=> string(1) "6" }
  12.  
  13. array(1) { [0]=> string(1) "7" }
  14.  
  15. array(1) { [0]=> string(1) "8" }
  16.  
  17. array(1) { [0]=> string(1) "9" }
  18.  
  19. array(1) { [0]=> string(2) "10" }
  20.  
  21. array(1) { [0]=> string(2) "11" }
  22.  
  23. array(1) { [0]=> string(2) "12" }
PanGuzol
Ja tu widzę dwa rozwiązania.

1. Czytelniejsze moim zdaniem to skorzystać z tablicy wielowymiarowej. Mianowicie tak oto zbudować formularz:
  1. <tr>
  2. <td><?php echo $row['imie']; ?> <?php echo $row['nazwisko']; ?></td>
  3. <td><input type="text" name="formularz[<?php echo $row['id_user'][a]; ?>]" value="" /></td>
  4. <td><input type="text" name="formularz[<?php echo $row['id_user'][b]; ?>]" value="" /></td>
  5. <td><input type="text" name="formularz[<?php echo $row['id_user'][c]; ?>]" value="" /></td>
  6. </tr>

A następnie odbierać to tak:
  1. $table = $_POST['formularz'];
  2. foreach($table AS $row) {
  3. $query = "INSERT INTO test (id, a, b, c) VALUES (NULL, '$row[a]', '$row[b]', '$row[c]')";
  4. $result = mysql_query($query);
  5. }


2. Bez zmieniania formularza
  1. $table = $_POST['formularz'];
  2. $query = "INSERT INTO test (id, a, b, c) VALUES";
  3. $i = 1;
  4. foreach($table AS $row) {
  5. if($i%3==1) $query .= "(NULL, '$row'";
  6. elseif($i%3==2) $query.= ", '$row'";
  7. else $query.= ", '$row'),";
  8. $i++;
  9. }
  10. $query = substr($query,0,-1);
  11. $result = mysql_query($query);
  12.  


Oczywiście w pierwszym przypadku również zalecam skorzystać z opcji dodawania wszystkich rekordów jednym zapytaniem.
max_mcee
Skorzystałem z tego drugiego sposobu i otrzymuję w bazie:

id a b c
1 Array Array Array
2 Array Array Array
3 Array Array Array
4 Array Array Array

co jeszcze jest nie tak??
PanGuzol
Możliwe, że coś przeoczyłem. Pokaż jak teraz Twój kod wygląda po zmianach.
max_mcee
Działa dzięki smile.gif
Wkradł się mały błąd, bo postawiłeś [] nie w tym miejscu.
  1. <tr>
  2. <td><?php echo $row['imie']; ?> <?php echo $row['nazwisko']; ?></td>
  3. <td><input type="text" name="formularz[<?php echo $row['id_user'][a]; ?>]" value="" /></td>
  4. <td><input type="text" name="formularz[<?php echo $row['id_user'][b]; ?>]" value="" /></td>
  5. <td><input type="text" name="formularz[<?php echo $row['id_user'][c]; ?>]" value="" /></td>
  6. </tr>


a powinno być tak
  1. <tr>
  2. <td><?php echo $row['imie']; ?> <?php echo $row['nazwisko']; ?></td>
  3. <td><input type="text" name="formularz[<?php echo $row['id_user']; ?>][a]" value="" /></td>
  4. <td><input type="text" name="formularz[<?php echo $row['id_user']; ?>][a]" value="" /></td>
  5. <td><input type="text" name="formularz[<?php echo $row['id_user']; ?>][a]" value="" /></td>
  6. </tr>


jeszcze raz dzięki 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.