Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] 50 formularzy i dodanie ich do bazy
Forum PHP.pl > Forum > Przedszkole
miras
Witam, mam problem muszę stworzyć ( na jednej stronie ) 50 formularzy, a następnie dodać dane z tych formularz do bazy danych mysql. Mój plan jest taki: pętla, która kręci się 50razy, w niej ten formularz z wartością name="$nazwa[$licznik] i zwiększać tą wartość licznik o 1 za każdym obrotem pętli, następnie na końcu zrobić ten submit, po wysłaniu formularza druga część z dodaniem do bazy i tu tak samo jak wyżej to bym rozwiązał - pętla kręcąca się 50 razy i zapytanie insert i dodawanie do bazy tych danych, moje pytanie brzmi - czy to jest dobry pomysł ? da się to jakoś lepiej/optymalniej rozwiązać ?
b4rt3kk
Jaki to ma sens? Nie możesz jednym submitem przesłać 50 osobnych formularzy. Możesz kombinować z jQuery czy JS by pobrać wszystkie wartości, ale możesz też zamknąć wszystko to w jednym <form>...</form>. Jeden formularz może mieć kilka submitów, ale jeden submit nie może przesyłać kilku formularzy naraz.
miras
no właśnie to wszystko by było w jednym formularzu, dlatego mówię, że zwiększała by się liczba $licznik++; i później w polu formularza name="nazwa[$licznik]" co wy na to?
b4rt3kk
Szczerze mówiąc to nie za bardzo rozumiem w czym problem, może jakiś przykład jak to ma działać?

To że chcesz zmieniać name forma sugeruje, że chcesz stworzyć kilka formularzy, a co to oznacza pisałem wyżej.
miras
nie chcę zmieniać name <form> tylko name <input>
wNogachSpisz
Nazwa inputa może wyglądać też tak:

  1. <input type="text" name="foo[]"/>
b4rt3kk
A, to Ty wcale nie mówisz o 50 formularzach, tylko o 50 inputach. Wystarczy tak:

  1. for ($i=1; $i<=$liczba_inputow; $i++) {
  2. echo '<input name="nazwa[]" />';
  3. }


Nie potrzebujesz żadnego wewnętrznego wskaźnika czy licznika, PHP sam sobie poradzi z utworzeniem tablicy $_POST['nazwa'].
miras
i później w drugą stronę - jak będę dodawał do bazy, to tak samo ? nie zdechnie baza ?
b4rt3kk
Nie wiem jak wygląda Twoja baza, więc nie wiem. Jeśli każdy input odpowiada krotce w bazie to tak, może być w pętli.
miras
baza nie zdycha, ale jest inny problem:
  1. for ($i=1; $i<=$_SESSION['liczba_pytan']; $i++) {
  2. $tresc=$_POST['tresc'];
  3. $odpowiedz_a=$_POST['odpowiedz_a'];
  4. $odpowiedz_b=$_POST['odpowiedz_b'];
  5. $odpowiedz_c=$_POST['odpowiedz_c'];
  6. $praw_odp=$_POST['praw_odp'];
  7.  
  8. mysql_query("INSERT INTO `xxx` (nazwa, pytanie, odpowiedz_a, odpowiedz_b, odpowiedz_c, prawidlowa_odp) VALUES('$nazwa','$tresc','$odpowiedz_a','$odpowiedz_b','$odpowiedz_c','$praw_odp')") or die("Wystąpił błąd podczas dodawania testu!");
  9.  
  10. }


dodaje do bazy, ale puste wartości tj. Array.. jak pobierać te wartości z formularza? formularz jest zrobiony w ten sposób:


  1. for ($i=1; $i<=$_SESSION['liczba_pytan']; $i++) {
  2. echo '<table align="center">
  3. <tr><td>Treść Pytania:</td><td><textarea cols="65" rows="1" name="tresc[]">Treść Pytania</textarea></td></tr>
  4. <tr><td>Odpowiedź A:</td><td><textarea cols="65" rows="1" name="odpowiedz_a[]">Odpowiedź A</textarea></td></tr>
  5. <tr><td>Odpowiedź B:</td><td><textarea cols="65" rows="1" name="odpowiedz_b[]">Odpowiedź B</textarea></td></tr>
  6. <tr><td>Odpowiedź C:</td><td><textarea cols="65" rows="1" name="odpowiedz_c[]">Odpowiedź C</textarea></td></tr></table>
  7. <table align="center"><tr><td>Prawidłowa Odpowiedź:</td><td><select name="praw_odp[]"><option value="a">Odpowiedź A</option><option value="b">Odpowiedź B</option><option value="c">Odpowiedź C</option></select></td></tr></table>';
  8.  
  9. } echo '<div class="submit_panel"><input type="submit" value="Dodaj Test" /></div></form>';
b4rt3kk
  1. $odpowiedz_a=$_POST['odpowiedz_a'];
  2. $odpowiedz_b=$_POST['odpowiedz_b'];
  3. $odpowiedz_c=$_POST['odpowiedz_c'];


jak zauważyłeś są to tablice, więc $_POST['odpowiedz_a'][0], $_POST['odpowiedz_a'][1], itd.
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.