Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]fromularz (checkbox)
Forum PHP.pl > Forum > Przedszkole
kobieta
Witam
Zrobiłam ankietę z polem jednokrotnego wyboru (radio) i wszystko zapisuje sie do bazy mysql.
Zmieniłam na pole wielokrotnego wyboru (checkbox) i dodaje do bazy z odpowiedzi A, B, C, tylko ostatnią wartość, zamiast wszystkich.
Chce zroić tak, aby na pytanie 1 można było wybrać odpowiedz A, B i C lub jedną z kombinacji


$pytanie_1=$HTTP_POST_VARS['pytanie_1'];

$zapytanie="INSERT LOW_PRIORITY INTO nazwa VALUES('$nazwa', '$pytanie_1', '$pytanie_2')";

Co mam poprawić?

Tak samo dzieje się przy wyciąganiu inforamacji z bazy pomimo że rębcznie dopisałem drugą wartość tylko jedna sie pokazuje

Dzięki za pomoc
Cienki1980
Tutaj bardziej przyda się wgląd w kod formularza a nie w zapytanie do bazy. Pokaż kod formularza oraz kod gdzie tworzysz zapytanie.
kobieta
Kod HTML
  1. <?php
  2. <TR>
  3.     <TD ALIGN="RIGHT"> Pytanie 1TD>
  4.     <TD COLSPAN="0" ALIGN="LEFT">
  5.    <INPUT TYPE="checkbox" NAME="pytanie_1" VALUE="A">A<br>
  6.    <INPUT TYPE="checkbox" NAME="pytanie_1" VALUE="B">B<br>
  7.    <INPUT TYPE="checkbox" NAME="pytanie_1" VALUE="C">C<br>
  8.     </TD>
  9.    </TR>
  10. ?>

Kod dodawania do bazy:

  1. <?
  2.   // dodaj_nazwa.php
  3.   include('wspolne_nazwa.php');
  4.   lacz_bd("......");               -  nazwa bazy
  5.   $gmina=$HTTP_POST_VARS['nazwa'];
  6.   $pytanie_1=$HTTP_POST_VARS['pytanie_1'];
  7.                
  8.   $zapytanie="INSERT LOW_PRIORITY INTO nazawa VALUES('$gmina', '$pytanie_1')";
  9.   @mysql_query($zapytanie);
  10.   mysql_close( );
  11. ?>
Cienki1980
Po pierwsze w odpowiedziach musisz wykorzystać tablice :
  1. <input type="checkbox" name="pytanie_1[]" value="A" />
  2. <input type="checkbox" name="pytanie_1[]" value="B" />
  3. <input type="checkbox" name="pytanie_1[]" value="C" />


po stronie PHP pod zmienną $_POST['pytanie_1'] ( szybkie wcięcie .. zamiast $_HTTP_POST_VARS korzystaj z $_POST , $_GET, $_COOKIES ) otrzymasz tablicę.

Jeżeli chcesz mieć w bazie w jednym polu wszystkie odpowiedzi np po przecinku .. czyli A,C ... to wystarczy jak wykorzystasz implode()" title="Zobacz w manualu PHP" target="_manual.

Jeżeli chcesz mieć dla każdej odpowiedzi osobny rekord w bazie musisz zapytanie INSERT wykonać w pętli.
Cysiaczek
Przenoszę na Przedszkole
kobieta
Witam
Ja jestem osobą początkująca i dopiero zaczynam przygodę z mySQL i php
Można prosić o bardziej wyjaśnienie tego polecenia. Co mam zmienić??
Dziękuję
hwao
  1. <input type="checkbox" name="pytanie_1[]" value="A" />
  2. <input type="checkbox" name="pytanie_1[]" value="B" />
  3. <input type="checkbox" name="pytanie_1[]" value="C" />



Jak masz taki fragment kodu, to wartości zaznaczone są w PHP w tablicy.
Po takiej operacji:
  1. <?php
  2. print_r( $_POST['pytanie_1'] )
  3. ?>

Otrzymamy tablice, z zaznaczonymi polami.

Teraz korzystając np z foreach
  1. <?php
  2. foreach( $_POST['pytanie_1'] As $k => $v ) {
  3. echo 'Zaznaczyle: '.$v;
  4. }
  5. ?>


Musisz wrzucić odpowiednie dane od bazy danych.
kobieta
Witam
Mam pytanie jaka typ powinna mieć tablica varchar czy jakiś inny??

Witam
Dzięki hwao za podpowiedz:)

Po wprowadzeniu tych powyższych kodów w bazie mysql pojawia się wartość "Array". Czy tak powinno być czy pownino pojawić się odpowiedzi ABC??

<?php
foreach( $_POST['pytanie_1'] As $k => $v ) {
echo 'Zaznaczyle: '.$v;
}
?>
Chcąc wyciągnąć informacje z bazy pojawia się błąd.
Czy można prosić o wyjaśnienie co ma być pod $k i $v

dzięki smile.gif
Cienki1980
Zamiast zapisywać do bazy sprawdzić co wygeneruje kod który podał hwao.

Jeżeli nie zmieniłaś zapytania INSERT to do bazy zostanie zapisane właśnie ciąg Array.

Jak już wcześniej pisałem od Ciebie zależy, czy chcesz dla odpowiedz A,C miec jeden rekord w bazie z ciągiem znaków 'A,C' czy też dwa rekordy jeden z wartością A a drugi z wartością C.
kobieta
Dane wprowadzone do tabeli mają być później jescze zliczane
czyli na pytanie 1 padło odpowiedzi a... b.... c....
i dla mnie jest to obojętne (czy to będzie zapisywało do jednego czy dwóch) bo i tak później musi mi to dodatkowo zliczać.
Próbowałem wykonać podane podane prze hwao pliki ale co mam podstawić za $k i $v.
Spodziewałem się ze wiekszych problemów z przejściem z jednego na wiele odpowiedzi nie będzie
Cienki1980
Cytat(kobieta @ 13.09.2008, 22:41:25 ) *
Dane wprowadzone do tabeli mają być później jescze zliczane
czyli na pytanie 1 padło odpowiedzi a... b.... c....
i dla mnie jest to obojętne (czy to będzie zapisywało do jednego czy dwóch) bo i tak później musi mi to dodatkowo zliczać.

No to chyba jednak sposób zapisania będzie miał znaczenie na szybkość obliczeń ... zakładam, że chcesz policzyć ile razy na pytanie numer 2 ktoś zaznaczył odpowiedź A lub B lub C ...

Cytat
Próbowałem wykonać podane podane prze hwao pliki ale co mam podstawić za $k i $v.
Spodziewałem się ze wiekszych problemów z przejściem z jednego na wiele odpowiedzi nie będzie


Nic nie musisz podstawiać. Po prostu zamiast kodu gdzie masz zapytanie INSERT do bazy wpisz kod podany przez hwao
kobieta
Mam taki kod dodawania do bazy
<?
// dodaj.php
include('wspolne_gmina.php');
lacz_bd("wszech");
$nazwa=$HTTP_POST_VARS['nazwa'];
$pytanie_1=$HTTP_POST_VARS['pytanie_1'];
$pytanie_2=$HTTP_POST_VARS['pytanie_2'];

$zapytanie="INSERT LOW_PRIORITY INTO gmina VALUES('$nazwa', '$gmina', '$pytanie_1', '$pytanie_2')";
@mysql_query($zapytanie);
mysql_close( );
?>


i w którym miejscu mam dodać

<?php
foreach( $_POST['pytanie_1'] As $k => $v ) {
echo 'Zaznaczyle: '.$v;
}
?>
Cienki1980
Tak jak napisałem powyżej: zamiast ... ten kod co masz możesz tymczasowo wykomentować, sprawdź tylko jak są przechowywane dane w tablicy i już powinnaś wiedzieć jak je dodawać do bazy.
kobieta
pojawił sie komunikat w przeglądarce

Zaznaczyle: AZaznaczyle: B

ale nic do bazy nic nie dodało

po wprowaszeniu polecenia:

<?php
print_r( $_POST['pytanie_1'] )
?>
pojawiło się

Array ( [0] => A [1] => B [2] => C ) Zaznaczyle: AZaznaczyle: BZaznaczyle: C

ale w bazie dalej przy pytaniu_1 jest wartość Array.

Czy może mieć znaczenie typ kolumny Pytanie_1?? Mam ustawione na varchar(5).
Cienki1980
Cytat(kobieta @ 13.09.2008, 23:26:34 ) *
pojawił sie komunikat w przeglądarce

Zaznaczyle: AZaznaczyle: B

ale nic do bazy nic nie dodało

po wprowaszeniu polecenia:

<?php
print_r( $_POST['pytanie_1'] )
?>
pojawiło się

Array ( [0] => A [1] => B [2] => C ) Zaznaczyle: AZaznaczyle: BZaznaczyle: C

ale w bazie dalej przy pytaniu_1 jest wartość Array.

Czy może mieć znaczenie typ kolumny Pytanie_1?? Mam ustawione na varchar(5).


Czyli z powyższego kodu wynika że ... odpowiedzi są w tablicy .... gdzie klucze ( to co jest w nawiasach [] to wartości zaczynające się od 0 ) a wartości to zaznaczone odpowiedzi.

Znowu zadam pytanie .. jak chcesz dodawać odpowiedzi .. czy razem w jednym wierszu ... czy w większej ilości wierszy ...

Jeżeli w jednym wierszu to zapytanie będzie wyglądało tak :
  1. <?php
  2. $sql = "INSERT into tabela (id,pytanie,odpowiedz) values ('pierwsze','".implode(",",$_POST['pytanie_1'])."')";
  3. ?>


A jeżeli w wielu wierszach to :
  1. <?php
  2. foreach($_POST['pytanie_1'] as $k=>$v)
  3. $sql = "INSERT into tabela (id,pytanie,odpowiedz) values ('pierwsze','".$v."')";
  4. ?>


kod pisany z palca bez sprawdzania .. ma dać Ci tylko pomysł, a nie gotowe rozwiązanie.
kobieta
W jednym wierszu
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.