Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML]Dodanie kilka pozycji do bazy z formularza
Forum PHP.pl > Forum > Przedszkole
kropamk
Witam.
Mam kod.

  1. <form action="dodanie.php" method="post">
  2. <table class="w_zamowieniu">
  3. <tr>
  4. <td>Numer<br /></td>
  5. <td><input type="text" name="numer"></td>
  6. <td>Znak
  7. <select name="znak">
  8. <option value="">Wybierz</option>
  9. <option value="x">x</option>
  10. <option value="y">y</option>
  11. <option value="z">z</option>
  12. </select>
  13. </td>
  14. </tr>
  15. <tr>
  16. <td>Numer<br /></td>
  17. <td><input type="text" name="numer"></td>
  18. <td>Znak
  19. <select name="znak">
  20. <option value="">Wybierz</option>
  21. <option value="x">x</option>
  22. <option value="y">y</option>
  23. <option value="z">z</option>
  24. </select>
  25. </td>
  26. </tr>
  27. <td colspan="2"><input type="submit" value="Dodaj" /></td>
  28. </table>


i jak widzicie powtarzaj mi się name ponieważ chciałbym dodać dwie pozycje o tym samym name do tabeli. Czy jest to możliwe ? Czy muszę pojedynczo dodawać?
kadlub
jak są takie same to zmień na inne
kropamk
hmm, może inaczej z tego kodu powstaną mi dwa wiersze formularza. Każdy wiersz ma pole NUMER i ZNAK. więc jeżeli zmienie nazwe to nie doda mi sie do tej samej kolumny w bazie danych.

cariri
rozumiem że chodzi ci o to(dla jasności przykład poniżej):
(kluczowy jest nawias kwadratowy - tworzymy tablicę która zbiera to co do niej wsadzimy pod jedną nazwą)
<form action="" method="POST">
<p><strong>Wybierz produkt:</strong></p>
<select name="owoce[]" size="5" multiple="multiple"> //dla wielokrotnego wyboru istotny jest nawias kwadratowy(tablica)
<option> Truskawki
<option> Maliny
<option> Poziomki
<option> Wiśnie
<option> Śliwki
</select>
</select>
<input type="submit" value="ok">
</form>
<?
foreach($_POST['owoce'] as $owoce){
echo $owoce;
}
kropamk
@cariri dzięki za odp ale to nie o to mi chodzi. Potrzebuję takiego czegoś jak wspomniałem wyżej.

za pomocą PHP tego nie powinno się zrobić ? string ?
mortus
cariri podał prawidłowe rozwiązanie, jednak przykład już nie najlepszy:
  1. <form action="dodanie.php" method="post">
  2. <table class="w_zamowieniu">
  3. <tr>
  4. <td>Numer<br /></td>
  5. <td><input type="text" name="numer[]"></td>
  6. <td>Znak
  7. <select name="znak[]">
  8. <option value="">Wybierz</option>
  9. <option value="x">x</option>
  10. <option value="y">y</option>
  11. <option value="z">z</option>
  12. </select>
  13. </td>
  14. </tr>
  15. <tr>
  16. <td>Numer<br /></td>
  17. <td><input type="text" name="numer[]"></td>
  18. <td>Znak
  19. <select name="znak[]">
  20. <option value="">Wybierz</option>
  21. <option value="x">x</option>
  22. <option value="y">y</option>
  23. <option value="z">z</option>
  24. </select>
  25. </td>
  26. </tr>
  27. <td colspan="2"><input type="submit" value="Dodaj" /></td>
  28. </table>

Obsługę takiego formularza realizujemy w PHP podobnie, jak to przedstawił cariri:
  1. // zauważmy, że pól znak jest tyle samo co pól nazwa
  2. $sql = 'INSERT INTO `tabela` (`numer`, `znak`) VALUES ';
  3. foreach($_POST['numer'] as $klucz => $numer) {
  4. $sql .= '(' . $numer . ', ' . $_POST['znak'][$klucz] . '),';
  5. }
  6. $sql = substr($sql, 0, -1);
  7. // wykonujemy zapytanie

Do wstawiania danych do bazy najlepiej będzie skorzystać z multi INSERT-a, jak wyżej.
Przeczytaj komentarze.

EDIT: Poprawiłem kod.
kropamk
dziekuję, a czy mógłbyś trochę mi wyjaśnić o co chodzi w tym kodzie co napisałeś ?

  1. foreach($_POST['nazwa'] as $klucz => $nazwa) {
  2. $sql .= '(' . $nazwa . ', ' . $_POST['znak'][$klucz] . '),';
  3. }
  4. $sql = substr($sql, 0, -1);
mortus
Gdy stosujemy w formularzach tablice (jak u Ciebie numer[], znak[]) to dane przesyłane są do pliku jako tablice indeksowane domyślnie, czyli tablica $_POST będzie wyglądać tak:
  1. $_POST['numer'][0] = 'NUMER1';
  2. $_POST['numer'][1] = 'NUMER2';
  3. $_POST['znak'][0] = 'ZNAK1';
  4. $_POST['znak'][1] = 'ZNAK2';

Przedstawiona pętla foreach "porusza się" po tablicy $_POST i odpowiednio ją przetwarza, generując część zapytania MULTI INSERT. Na końcu trzeba wyciąć z tego wygenerowanego zapytania SQL zbędny przecinek (stąd substr).

Możesz na końcu pliku sprawdzić zawartość tablicy $_POST, jak i zmiennej $sql, a wtedy będzie Ci łatwiej zrozumieć. Przydatny kod:
  1. echo '<pre>';
  2. print_r($_POST);
  3. echo $sql;


PS: W poprzedniej odpowiedzi użyłem przez pomyłkę nazwy "nazwa", a tymczasem powinienem był użyć nazwy "numer".

EDIT: Poprawiłem kod powyżej.
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.