Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Ankieta w PHP i MySQL
Forum PHP.pl > Forum > Przedszkole
malzon
Witam serdecznie!

Mam problem z bardzo podstawową ankietą. Otóż chodzi o to, że odpowiedz pytań 1 oraz 2 (są to odpowiedzi "radio") są zapisywane w bazie, natomiast odpowiedzi z pytania 3 ("checkbox") nie chcą się zapisać w bazie. Nie mam zielonego pojęcia jak to naprawić. Niżej zamieszczam kod.

Formularz ankiety:

  1. <form action="zapis_ankiety.php" method="get>">
  2. <div id="pytania">
  3. <h2 style="text-align: center; font-size: 24px; font-weight:bold; padding-top: 10px; padding-bottom: 5px;">ANKIETA</h2>
  4. <hr>
  5. <div id="pytanie_1">
  6. <p1 class="pytania">1. Technika malarska:</p1><br> <br>
  7. <span class="kolumna">
  8. <input type="radio" class="c" name="odp_pytanie_1" value="Akwarele" id="pyt_1_1">Akwarele</span> <br>
  9. <span class="kolumna">
  10. <input type="radio" class="radio" name="odp_pytanie_1" value="Olejne" id="pyt_1_2">Olejne</span> <br>
  11. <span class="kolumna">
  12. <input type="radio" class="radio" name="odp_pytanie_1" value="Olowek" id="pyt_1_3">Ołówek</span> <br>
  13. <span class="kolumna">
  14. <input type="radio" class="radio" name="odp_pytanie_1" value="Kredki" id="pyt_1_4">Kredki</span> <br>
  15. <span class="kolumna">
  16. <input type="radio" class="radio" name="odp_pytanie_1" value="Pastele" id="pyt_1_5">Pastele</span> <br>
  17. <span class="kolumna">
  18. <input type="radio" class="radio" name="odp_pytanie_1" value="Tusz" id="pyt_1_6">Tusz</span> <br>
  19. <span class="kolumna">
  20. <input type="radio" class="radio" name="odp_pytanie_1" value="Spray painting" id="pyt_1_7">Spray painting</span> <br>
  21. <span class="kolumna">
  22. <input type="radio" class="radio" name="odp_pytanie_1" value="Inne" id="pyt_1_8">Inne</span> <br>
  23. </div> <br>
  24. <div id="pytanie_2">
  25. <p1 class="pytania">2. Czas poswięcony na realizacje:</p1><br> <br>
  26. <span class="kolumna">
  27. <input type="radio" class="c" name="odp_pytanie_2" value="Do 1h" id="pyt_2_1">Do 1h</span> <br>
  28. <span class="kolumna">
  29. <input type="radio" class="c" name="odp_pytanie_2" value="1h-4h" id="pyt_2_2">1h-4h</span> <br>
  30. <span class="kolumna">
  31. <input type="radio" class="c" name="odp_pytanie_2" value="4h-7h" id="pyt_2_3">4h-7h</span> <br>
  32. <span class="kolumna">
  33. <input type="radio" class="c" name="odp_pytanie_2" value="7h-10h" id="pyt_2_4">7h-10h</span> <br>
  34. <span class="kolumna">
  35. <input type="radio" class="c" name="odp_pytanie_2" value="Powyżej 10h" id="pyt_2_5">Powyżej 10h</span> <br>
  36. </div> <br>
  37. <div id="pytanie_3">
  38. <p1 class="pytania">3. Inne zainteresowania:</p1><br> <br>
  39. <input type="checkbox" class="checkbox" name="odp_pytanie_3" value="Sport" id="Sport"><label for="id_Sport">Sport</label><br>
  40. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Muzyka" id="Muzyka"><label for="id_Muzyka">Muzyka</label><br>
  41. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Gry" id="Gry"><label for="id_Gry">Gry</label><br>
  42. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Moda" id="Moda"><label for="id_Moda">Moda</label><br>
  43. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Filmy" id="Filmy"><label for="id_Filmy">Filmy</label><br>
  44. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Motoryzacja" id="Motoryzacja"><label for="id_Motoryzacja">Motoryzacja</label><br>
  45. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Ksiazki" id="Ksiazki"><label for="id_Ksiazki">Książki</label><br>
  46. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Podroze" id="Podroze"><label for="id_Podroze">Podróże</label><br>
  47. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Informatyka" id="Informatyka"><label for="id_Informatyka">Informatyka</label><br>
  48. <input type="checkbox" class="checkbox" name="odp_pytanie_3[]" value="Inne" id="Inne"><label for="id_Inne">Inne</label><br>
  49. </div>
  50. <div id="przycisk">
  51. <input type="submit" value="Zapisz" class="zapisz"><br>
  52. </div>
  53. <a href="statystyka.php" class="link_statystyka">Statystyka</a>
  54. <?php
  55. date_default_timezone_set('America/Los_Angeles');
  56. $aktualna=date('d-m-Y');
  57. echo "<p style='margin-left:250px; margin-top: 15px; color:black;'>Dzisiaj jest: {$aktualna}</p>";
  58. ?>
  59. </div>
  60. </form>
  61.  


Zapisywanie ankiety w bazie:
  1. <?php
  2. $odp_pytanie_1=$_GET['odp_pytanie_1'];
  3. $odp_pytanie_2=$_GET['odp_pytanie_2'];
  4.  
  5. mysql_connect('localhost','root','');
  6. mysql_select_db('test123');
  7. mysql_query("SET NAMES UTF 8");
  8. $query="INSERT INTO ankieta_1(odp_pytanie_1,odp_pytanie_2,data) VALUES('$odp_pytanie_1','$odp_pytanie_2',NOW()) ";
  9.  
  10. $odpowiedzi_2=@mysql_query($query);
  11. echo $query;
  12.  
  13.  
  14. foreach($_GET['odp_pytanie_3'] as $key=>$value)
  15. {
  16. $query="INSERT INTO 'test123'.'ankieta_2'('id_pytanie_3','odp_pytanie_3','id_odpowiedzi') VALUES (NULL, '0','".$value."')";
  17. $do_zapisu_z_checkboxa=@mysql_query($query);
  18. echo $query;
  19. }
  20. header("Location: form_ankiety.php");
  21. ?>


Baza danych wygląda następująco:
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.5.1
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 21 Mar 2013, 11:12
  7. -- Wersja serwera: 5.5.24-log
  8. -- Wersja PHP: 5.3.13
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8 */;
  18.  
  19. --
  20. -- Baza danych: `test123`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Struktura tabeli dla tabeli `ankieta_1`
  27. --
  28.  
  29. CREATE TABLE IF NOT EXISTS `ankieta_1` (
  30. `odp_pytanie_1` varchar(20) NOT NULL,
  31. `odp_pytanie_2` varchar(20) NOT NULL,
  32. `data` date NOT NULL
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  34.  
  35. --
  36. -- Zrzut danych tabeli `ankieta_1`
  37. --
  38.  
  39. INSERT INTO `ankieta_1` (`odp_pytanie_1`, `odp_pytanie_2`, `data`) VALUES
  40. ('Kredki', '4h-7h', '2013-03-20'),
  41. ('', '', '2013-03-20'),
  42. ('', '', '2013-03-20'),
  43. ('', '', '2013-03-20');
  44.  
  45. -- --------------------------------------------------------
  46.  
  47. --
  48. -- Struktura tabeli dla tabeli `ankieta_2`
  49. --
  50.  
  51. CREATE TABLE IF NOT EXISTS `ankieta_2` (
  52. `id_pytanie_3` int(11) NOT NULL,
  53. `odp_pytanie_3` varchar(200) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  54. `id_odpowiedzi` int(11) NOT NULL
  55. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  56.  
  57. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  58. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  59. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Dziękuję bardzo za pomoc.
Pozdrawiam.
nospor
1)
nie: name="odp_pytanie_3"
a: name="odp_pytanie_3[]"

2) Masz błąd zapytania. Tu masz napisane jak wyswietlac błędy zapytania
Temat: Jak poprawnie zada pytanie

3) Odróżniaj ' od `
malzon
1) Poprawiłem.

2) Gdy wyświetlam zapytanie to wyskakuje:
  1. INSERT INTO ankieta_1(odp_pytanie_1,odp_pytanie_2,DATA) VALUES('Pastele','1h-4h', NOW()) INSERT INTO 'ankieta_2'.'odp_pytanie_3' ('id_pytanie_3','odp_pytanie_3','id_odpowiedzi') VALUES (NULL, '0', 'Filmy')INSERT INTO 'ankieta_2'.'odp_pytanie_3' ('id_pytanie_3','odp_pytanie_3','id_odpowiedzi') VALUES (NULL, '0', 'Motoryzacja')


Po wpisaniu tego w PhpMyAdmin -> SQL wyskakuje błąd:

Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO 'ankieta_2'.'odp_pytanie_3' ('id_pytanie_3','odp_pytanie_3','id_odpo' at line 1


Dodam jeszcze raz zapis_ankiety:

  1. <?php
  2. ini_set('display_errors','1');
  3.  
  4. mysql_connect('localhost','root','');
  5. mysql_select_db('rysunki');
  6. mysql_query("SET NAMES UTF 8");
  7.  
  8. $odp_pytanie_1=$_GET['odp_pytanie_1'];
  9. $odp_pytanie_2=$_GET['odp_pytanie_2'];
  10.  
  11. $query="INSERT INTO 'ankieta_1' (odp_pytanie_1,odp_pytanie_2,data) VALUES('$odp_pytanie_1','$odp_pytanie_2', NOW()) ";
  12.  
  13. $odpowiedzi_2 = mysql_query($query);
  14. echo $query;
  15.  
  16. // ZAPISYWANIE Z CHECKBOXÓW
  17. foreach($_GET['odp_pytanie_3'] as $key=>$value)
  18. {
  19. $query="INSERT INTO 'ankieta_2'.'odp_pytanie_3' ('id_pytanie_3','odp_pytanie_3','id_odpowiedzi') VALUES (NULL, '0', '".$value."')";
  20. $do_zapisu_z_checkboxa = mysql_query($query);
  21. echo $query;
  22. }
  23.  
  24. //header("Location: form_ankiety.php");
  25. ?>


Pytania 1 oraz 2 dodaje do bazy danych do tabeli ankieta_1. Pytanie z checkboxami nie dodaje do tabeli ankieta_2.

Proszę o wyrozumiałość.
Pozdrawiam.
nospor
Przecież napisałem wyraźnie:
Cytat
3) Odróżniaj ' od `

w zapytaniu. Odróżniaj apostrof od tego `
malzon
Zatem tutaj:

  1. // ZAPISYWANIE Z CHECKBOXÓW
  2.  
  3. foreach($_GET['odp_pytanie_3'] as $key=>$value)
  4. {
  5. $query="INSERT INTO 'ankieta_2'.'odp_pytanie_3' ('id_pytanie_3','odp_pytanie_3','id_odpowiedzi') VALUES (NULL, '0', '".$value."')";
  6. $do_zapisu_z_checkboxa = mysql_query($query);
  7. echo $query;
  8. }


Zamiast ' mam użyć `? Wszędzie?
Michael2318
Przykładowe zapytanie:
  1. $sql = "INSERT INTO `tabela` (`nazwa_pola`, `nazwa_pola2`) VALUES ('jakas_wartosc_string', 1)";


Przy czym druga wartość (ta jedynka) nie jest stringiem, więc tam bez żadnych apostrofów.
znak
Cytat
`
nie jest obowiązkowy, można go wyrzucić z całego zapytania.
malzon
@Michael2318:

I nadal nie działa. Usunąłem` i kod ma taką postać:

  1. foreach ($_GET['odp_pyt10'] as $key => $value)
  2. {
  3. $query = " INSERT INTO ankieta2 ( id_pyt10 , odp_pyt10 , id_odp ) VALUES (NULL , 0, ".$value." ) ";
  4. $do_zapisu = @mysql_query($query);
  5. echo $query;
  6. }
  7. }



Znalazłem na gdzieś też taki kod:

  1. $checkbox = $_GET['odp_pyt10'];
  2. if($_GET["Submit"]=="Submit");
  3. {
  4. for($i=0; $i<sizeof($checkbox);$i++)
  5. {
  6. $query="INSERT INTO ankieta2 (odp_pyt10) VALUES ('".$odp_pyt10[$i]."')";
  7. mysql_query($query) or die (mysql_error());
  8. }
  9. echo "Dodano";
  10. }


W nim niby wystarczy tylko jedna kolumna w bazie danych, w moim przypadku odp_pyt10. Dodają się nowe rekordy w bazie, ale bez wartości checkboxów. Rekord jest pusty.

Już nie mam żadnego pomysłu, a czas goni.
Michael2318
Linię 4 w pierwszym kodzie zapisz tak jak linia 7 w drugim kodzie.
malzon
Wywala taki błąd, chociaż zaznaczyłem prócz "FILMY" dodatkowo jeszcze innego checkboxa.
Cytat
INSERT INTO ankieta1(odp_pyt1,odp_pyt2,odp_pyt3,odp_pyt4,odp_pyt5,odp_pyt6,odp_pyt7,odp_pyt8
,odp_pyt9,odp_pyt11,odp_pyt12) VALUES('Mężczyzna','Dolnośląskie','Ekonomia','Pierwszy','1-2 godzin dziennie','Google Chrome','ASD','1-2 godzin dziennie','ASD','ASD','ASD') Unknown column 'Filmy' in 'field list'


Przy takim pliku zapisz.php:
  1. <?php
  2.  
  3. $odp_pyt1=$_GET['odp_pyt1'];
  4. ...
  5. $odp_pyt9=$_GET['odp_pyt9'];
  6. $odp_pyt11=$_GET['odp_pyt11'];
  7. $odp_pyt12=$_GET['odp_pyt12'];
  8.  
  9. mysql_connect('localhost','root','');
  10. mysql_select_db('ankieta');
  11. mysql_query("SET NAMES UTF8");
  12.  
  13. $query = " INSERT INTO ankieta1(odp_pyt1,odp_pyt2,odp_pyt3,odp_pyt4,odp_pyt5,odp_pyt6,odp_pyt7,odp_pyt8,odp
    _pyt9,odp_pyt11,odp_pyt12) VALUES('$odp_pyt1','$odp_pyt2','$odp_pyt3','$odp_pyt4','$odp_pyt5','$odp_pyt6','$odp_pyt7','$odp_pyt8','$odp_pyt9','$odp_pyt11','$odp_pyt12') "
    ;
  14.  
  15. $odpowiedzi_2=@mysql_query($query);
  16. echo $query;
  17.  
  18. foreach ($_GET['odp_pyt10'] as $key => $value)
  19. {
  20. $query1 = " INSERT INTO ankieta3 (id_pyt10,odp_pyt10,id_odp) VALUES (NULL, 0, ".$value.")";
  21. mysql_query($query1) or die (mysql_error());
  22. echo $query1;
  23. }
  24.  
  25.  
  26. header("Location: ankieta.php");
  27. ?>


Formularz:
  1. <?php
  2. ?>
  3.  
  4. <html>
  5. <body>
  6. <div id="tresc">
  7. <form action="zapis.php" method="get" onreset="if (!confirm('Czy na pewno chcesz wyczyścić cały formularz?')) return false">
  8. <fieldset class="ankieta">
  9. <legend class="legend">Ankieta</legend>
  10. <p>1. Twoje dane:</p>
  11. <label for="plec" class="dane2">Płeć: </label><br>
  12. <input type="radio" class="dane1" name="odp_pyt1" value="Kobieta">
  13. <label for="kobieta">kobieta</label>
  14. <input type="radio" name="odp_pyt1" value="Mężczyzna">
  15. <label for="mezczyzna" >mężczyzna</label><br>
  16.  
  17. ....
  18.  
  19. <p>4. Twoja ulubiona stacja telewizyjna?</p>
  20. <input type="text" class="dane2" id="pole1" name="odp_pyt9">
  21. <p>5. Do czego używasz komputera?: </p>
  22. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Filmy">
  23. <label for="komp" class="komp">Filmy</label><br>
  24. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Muzyka">
  25. <label for="komp" class="komp">Muzyka</label><br>
  26. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Surfowanie po Internecie">
  27. <label for="komp" class="komp">Surfowanie po Internecie</label><br>
  28. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Gry">
  29. <label for="komp" class="komp">Gry</label><br>
  30. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Prac">
  31. <label for="komp" class="komp">Praca</label><br>
  32. <input type="checkbox" name="odp_pyt10[]" class="dane2" value="Kontakt ze znajomymi">
  33. <label for="komp" class="komp">Kontakt ze znajomymi</label>
  34. <p>6. Jakie zachowanie najbardziej przeszkadza Ci wsród społeczności internetowej?</p>
  35. <textarea name="odp_pyt11" class="area" cols="70" rows="5" ></textarea>
  36. <p>7. Co byś robił, gdyby nie było Internetu oraz telewizji?</p>
  37. <textarea name="odp_pyt12" class="area" cols="70" rows="5"></textarea><br><br>
  38. <input type="submit" name="Submit" value="Submit" class="zapisz"></input>
  39. <input type="reset" value="Wyczysc" class="wyczysc">
  40. </fieldset>
  41. </form>
  42. </div>
  43. </body>
  44. </html>
  45.  
  46. <?php
  47. ?>


Struktura bazy:
- tabela ankieta1
odp_pyt1 | odp_pyt2 ... odp_pyt12

- tabela ankieta 3
- id_pyt10 | odp_pyt10 | id_odp

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