Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> multi checkbox w tablicach array - a wpis do mysql
jaco1410
post 6.01.2011, 00:42:32
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

Ostrzeżenie: (0%)
-----


Znalazłem błąd w swoim kodzie przy zapisie wartości pola "checkbox" formularza, a mianowicie:

mam dwa kolejne pola checkbox o takiej samej nazwie pola "name", wynika to z zastosowanej pętli w formularzu i musi tak pozostać
  1. 1linia: <input type=checkbox name=poprawna_1[] value="1" >
  2. 2linia: <input type=checkbox name=poprawna_1[] value="1" >

przyjmijmy założenie że zaznaczam tylko pole "checkbox" w 2 linii

zapisuję poniższym kodem do tabeli mysql (jest tak samo dla pól mysql - text i ENUM)
  1. $ile1 = $_POST["ilePytan"]; //w powyższym przykładzie będzie to wartość 2
  2. $a=0;
  3. while($a <= $ile1-1) {
  4. $zapytanie = "INSERT INTO pytania SET pytanie='$pytanie[$a]', odp_1='$odp_1[$a]', poprawna_1='$poprawna_1[$a]'";
  5. mysql_query($zapytanie);
  6. $a++;
  7. };

niestety wartość value="1" otrzymała 1 linia zamiast 2, tak jakby brak zaznaczenia w tablicy array w 1 linii nie był brany pod uwagę,
myślałem o jakiejś funkcji sprawdzania w formularzu i wstawianiu odpowiedniej wartości(0,1) ale nie bardzo wiem z której strony to ugryźć..

pozdrawiam

Ten post edytował jaco1410 6.01.2011, 01:10:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
tehaha
post 6.01.2011, 01:31:47
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


1. użyj pętli foreach
2. co to za składnia INSERT INTO? --> manual mysql
3. można to dodać jednym zapytaniem a nie wieloma
4. jak masz te checkboxy jako tablica, to ustawienie dla każdego wartości jeden jest bez sensu, muszą być różne wartości, bo do jednej nazwy przypisujesz wiele wartości
Go to the top of the page
+Quote Post
jaco1410
post 6.01.2011, 02:13:02
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

Ostrzeżenie: (0%)
-----


poproszę o jakiś przykład gdzie miałbym użyć tej pętli foreach,
co do 4 punktu jakby było tak łatwo to bym się o to nie pytał, zresztą to i tak by nic nie dało bo jak nie zaznaczę to nie mam tej wartości...
Go to the top of the page
+Quote Post
CuteOne
post 6.01.2011, 07:41:51
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  1. $ile1 = $_POST["ilePytan"]; //w powyższym przykładzie będzie to wartość 2
  2. $a=0;
  3.  
  4. while($a <= $ile1-1) {
  5.  
  6. foreach($_POST['poprawna_1'] as $list) {
  7.  
  8. mysql_query("INSERT INTO pytania (pytanie, odpowiedz, poprawna) VALUES ('{$pytanie[$a]}', '{$odp_1[$a]}', '{$list}')");
  9. }
  10.  
  11. $a++;
  12. }


  1. <input type="checkbox" name="poprawna_1[]" value="1">
  2. <input type="checkbox" name="poprawna_1[]" value="2">
  3. <input type="checkbox" name="poprawna_1[]" value="3">

Go to the top of the page
+Quote Post
jaco1410
post 6.01.2011, 14:43:23
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

Ostrzeżenie: (0%)
-----


Hej,

niestety nie działa to, po zastąpieniu tymczasowo zapytania do mysql na
  1. echo "$list";

otrzymam odpowiedz ale powtórzoną $a razy (gdzie $a to jest ilość pytań),
czyli jak mam 3 tak jak w Twoim przykładzie formularza otrzymam wynik:

przy 3 zaznaczonych checkboxach:
123123123

przy 2 zaznaczonych checkboxach:
121212

itd..

może jest jakieś inne rozwiązanie?
pozdrawiam
Go to the top of the page
+Quote Post
CuteOne
post 6.01.2011, 18:04:00
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  1. foreach($_POST['poprawna_1'] as $list) {


podmien na to

  1. foreach($_POST['poprawna_'.$a] as $list) {
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:46