Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]fromularz (checkbox), problem z formularzem
kobieta
post 11.09.2008, 15:19:14
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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
Powód edycji: dodałem tagi (cysiaczek)
Go to the top of the page
+Quote Post
Cienki1980
post 11.09.2008, 16:31:31
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Tutaj bardziej przyda się wgląd w kod formularza a nie w zapytanie do bazy. Pokaż kod formularza oraz kod gdzie tworzysz zapytanie.


--------------------
404
Go to the top of the page
+Quote Post
kobieta
post 11.09.2008, 16:44:50
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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. ?>
Go to the top of the page
+Quote Post
Cienki1980
post 11.09.2008, 17:23:23
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.


--------------------
404
Go to the top of the page
+Quote Post
Cysiaczek
post 11.09.2008, 17:44:57
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Przenoszę na Przedszkole


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
kobieta
post 11.09.2008, 18:07:51
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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ę
Go to the top of the page
+Quote Post
hwao
post 11.09.2008, 18:12:04
Post #7


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  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.
Go to the top of the page
+Quote Post
kobieta
post 13.09.2008, 20:35:07
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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
Go to the top of the page
+Quote Post
Cienki1980
post 13.09.2008, 21:22:24
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.


--------------------
404
Go to the top of the page
+Quote Post
kobieta
post 13.09.2008, 21:41:25
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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
Go to the top of the page
+Quote Post
Cienki1980
post 13.09.2008, 21:44:37
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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


--------------------
404
Go to the top of the page
+Quote Post
kobieta
post 13.09.2008, 22:01:21
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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;
}
?>
Go to the top of the page
+Quote Post
Cienki1980
post 13.09.2008, 22:19:44
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.


--------------------
404
Go to the top of the page
+Quote Post
kobieta
post 13.09.2008, 22:26:34
Post #14





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


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).

Ten post edytował kobieta 14.09.2008, 16:23:38
Go to the top of the page
+Quote Post
Cienki1980
post 14.09.2008, 20:24:00
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.

Ten post edytował Cienki1980 14.09.2008, 20:55:28


--------------------
404
Go to the top of the page
+Quote Post
kobieta
post 14.09.2008, 20:53:04
Post #16





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 26.05.2007

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


W jednym wierszu

Ten post edytował kobieta 14.09.2008, 20:53:24
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: 23.06.2025 - 18:41