Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: formularz z paroma podstronami
Forum PHP.pl > Forum > PHP
ravenaot
Staram sie stworzyc formularz ktory bedzie mial pare podstron, czyli na kazdej z nich po 5 pytan, lacznie okolo 35. I teraz planuje dodac je do bazy danych i glowny problem lezy w jaki sposob. Czy na kazda podstrone jedna tabela i jak je ze soba najlepiej polaczyc czyli w taki sposob polaczyc wszystkie dane tak aby odpowiadaly tylko do jednego uzytkownika ktory go bedzie wypelnial. Uzytkownik jest oczywiscie anonimowy. Macie jakies pomysly?
kamil_lk
Sposób I:
Dzielisz formularz na kilka bloków w których ładujesz odpowiednie pytania, a następnie wyświetlasz/ukrywasz odpowiednie bloki. W ostatnim bloku oprócz pytań dodajesz przycisk obsługujący cały formularz.

Sposób II:
Robisz kilka formularzy. Dane z każdego zapisujesz do zmiennych sesyjnych. W ostatnim formularzu zapisujesz dane ze zmiennych sesyjnych do bazy.
Poniżej link do przykładu, który kiedyś tam pisałem w ramach nauki. Źródło mogę udostępnić, ale zaznaczam od razu, że cudów nie ma tongue.gif
Przykład
StrefaPi
III sposób:

Robisz kilka formularzy. Dane z każdego zapisujesz do bazy danych (od razu po każdej części) z odpowiednim ID, które ustawiasz i pobierasz wcześniej (potem ID przechowujesz np. w sesji)... wink.gif

(w przypadku natychmiastowego zapisu do bazy, masz przynajmniej odpowiedzi na część pytań w wypadku gdy użytkownik nie skończy ankiety bo się znudzi np.)
ravenaot
Kamil jezeli moglbys prosze udostepnij kod smile.gif
kamil_lk
Bez zbędnych komentarzy proszę. Pisałem to kilka lat temu w ramach nauki. smile.gif
http://kamilgluchowski.cba.pl/cv/index.zip <-- skopiuj i wklej do przeglądarki
ravenaot
Super, z tym mysle ze sobie juz poradze. Dzieki za pomoc smile.gif
Sielly
hmm, wydaje mi się najsensowniejszym rozwiązaniem sposób IV, czyli mając np 2 formularze, z jednego wysyłasz zmienne do drugiego i w tym drugim dajesz <input type="hidden"> o nazwie i wartości takiej jakie podał użytkownik na poprzedniej stronie.
kamil_lk
Cytat(Sielly @ 9.03.2013, 18:09:25 ) *
hmm, wydaje mi się najsensowniejszym rozwiązaniem sposób IV, czyli mając np 2 formularze, z jednego wysyłasz zmienne do drugiego i w tym drugim dajesz <input type="hidden"> o nazwie i wartości takiej jakie podał użytkownik na poprzedniej stronie.


Bez sensu. Lepiej już zastosować sposób I z wykorzystaniem jQuery.
Sielly
nie rozumiem, czemu według Ciebie jest to pomysł bez sensu, ale co kto lubi. wink.gif Sposób z jquery jest dobry, tylko trzeba ogarniać jquery. wink.gif
kamil_lk
Cytat
nie rozumiem, czemu według Ciebie jest to pomysł bez sensu

Prosty przykład. Zaczyansz czytać książkę z 10 rozdziałami.
Pierwszego dnia czytasz pierwszy rozdział.
Drugiego dnia czytasz znowu pierwszy, żeby przejść do drugiego? smile.gif
Przynajmniej w moim przekonaniu jest to bezsensowne.
Sielly
ja zrozumiałem że jest to formularz np rejestracyjny, który na raz się uzupełnia. Jeśli nie, to ajax też nic nie da, musi być mysql. Dobra, autor topicu wybierze sobie metodę i sam zrobi. wink.gif
ravenaot
Panowanie mam jeszcze problem z pobraniem danych z bazy. Po uzupelnieniu metryki.php przechodzi mi do pytania.php w ktorym znajduje sie kod, do bazy ladnie dodaje ale nie w tym sęk. Mam problem z wyciagnieciem z bazy id ktore zostalo wlasnie wpisane do bazy danych. Pozniej zamieszczam kod, jakies pomysly co moge miec zle ?
  1. <?php
  2. require_once('bazadanych.php');
  3. // Łączenie się z bazą danych.
  4. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)or die("Cannot execute SELECT query.");
  5.  
  6. if (isset($_POST['submit'])) {
  7. // Pobieranie danych do profilu z żądania POST.
  8. $pyt11 = $_POST['pyt11'];
  9. $pyt22 = $_POST['pyt22'];
  10. $pyt33 = $_POST['pyt33'];
  11. $pyt44 = $_POST['pyt44'];
  12. $pyt55 = $_POST['pyt55'];
  13. $pyt66 = $_POST['pyt66'];
  14. $pyt77 = $_POST['pyt77'];
  15. $pyt88 = $_POST['pyt88'];
  16. $pyt99 = $_POST['pyt99'];
  17. $query = "INSERT INTO metryka VALUES ('','$pyt11','$pyt22','$pyt33','$pyt44','$pyt55','$pyt66','$pyt77','$pyt88','$pyt99')";
  18. mysqli_query($dbc, $query);
  19. mysqli_close($dbc);
  20. }
  21.  
  22. $query2 = "SELECT * FROM metryka WHERE id = ".$_GET['id'];
  23. //$query2 = "SELECT * FROM metryka";
  24. $wynik = mysqli_query($dbc, $query2);
  25. while ($row = mysqli_fetch_array($wynik)) {
  26. echo $row['id'];
  27. }
  28.  
  29. ?>
!*!
Chodzi Ci o wyciągnięcie ostatniego ID? http://php.net/manual/en/mysqli.insert-id.php
ravenaot
Chodzi mi o wyciagniecia tego 'id' aby przekazac je dalej w podstronach formularza(pytania.php, pytania2.php itd.) tak zeby odpowiedzi byly spojnie dodane do bazy danych
!*!
Z tego co widzę, id siedzi w get
  1. $_GET['id']
lub przeleć post vardump() i wygrzeb.
ravenaot
Doszedlem do takiego punktu, zwraca mi wartosc "Id dodanego rekordu: 0". Do bazy danych dodaje, ale nie zwraca mi zadnego id. W bazie danych mam ustawiona kolumne na auto-increment, jakies pomysly?

  1. <?php
  2. require_once('bazadanych.php');
  3. // Łączenie się z bazą danych.
  4. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)or die("Cannot execute SELECT query.");
  5.  
  6. if (isset($_POST['submit'])) {
  7. // Pobieranie danych do profilu z żądania POST.
  8. $pyt11 = $_POST['pyt11'];
  9. $pyt22 = $_POST['pyt22'];
  10. $pyt33 = $_POST['pyt33'];
  11. $pyt44 = $_POST['pyt44'];
  12. $pyt55 = $_POST['pyt55'];
  13. $pyt66 = $_POST['pyt66'];
  14. $pyt77 = $_POST['pyt77'];
  15. $pyt88 = $_POST['pyt88'];
  16. $pyt99 = $_POST['pyt99'];
  17. $query = "INSERT INTO metryka VALUES ('','$pyt11','$pyt22','$pyt33','$pyt44','$pyt55','$pyt66','$pyt77','$pyt88','$pyt99')";
  18. mysqli_query($dbc, $query);
  19. $id = mysql_insert_id();
  20. if($query) echo "Rekord o ID: ".$id." został dodany poprawnie";
  21. else echo "Błąd nie udało się dodać nowego rekordu";
  22.  
  23.  
  24.  
  25. // dodajemy rekord do bazy
  26.  
  27. mysqli_close($dbc);
  28. }
  29. ?>
Sielly
a masz w tabeli kolumnę z kluczem AUTO_INCREMENT ?
ravenaot
Witam ponownie, zeby nie zakladac nowego tematu to zadam pytanie tutaj. Staram sie zrobic walidacje, nic specjalnego, ale w formularzu mam ze po uzupelnieniu pol przechodzi do nastepnej strony, wiec jezeli umieszcze kod na tej ktora ma sie wczytac to wyswietli sie blad na niej a nie wczesniej. Tak wiec postanowilem zeby zmienic parametr
<form method="post" action="index.php"> na <form method="post" action="pytania_1_5.php"> Tyle ze cos mi to nie wychodzi, moglby ktos rzucic okiem? mecze sie nad tym juz 2 dzien.
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. $pyt11 = mysqli_real_escape_string($dbc, trim($_POST['pyt11']));
  4. $pyt22 = mysqli_real_escape_string($dbc, trim($_POST['pyt22']));
  5. $pyt33 = mysqli_real_escape_string($dbc, trim($_POST['pyt33']));
  6.  
  7.  
  8. if (!empty($pyt11) && !empty($pyt22) && !empty($pyt33) {
  9. echo '<form method="post" action="pytania_1_5.php">';
  10. }
  11. else {
  12. echo '<div id="error">';
  13. echo '<br>Musisz wpisać wszystkie dane </a>';
  14. echo '</div>';
  15. echo '<form method="post" action="index.php">';
  16. }
  17. }
  18. ?>
  19. <h2>METRYKA RESPONDENTA</h2><br />
  20.  
  21. <h3>Płeć</h3>
  22. <input id="income" type="radio" name="pyt11" value="Kobieta" />Kobieta<br />
  23. <input id="income" type="radio" name="pyt11" value="Mężczyzna" />Mężczyzna
  24. <h3>Do której badanej grupy wiekowej się Pan/i zalicza?</h3>
  25. <input type="radio" name="pyt22" value="20-30" />20-30<br />
  26. <input type="radio" name="pyt22" value="31-40" />31-40<br />
  27. <input type="radio" name="pyt22" value="41-50" />41-50 <br />
  28. <input type="radio" name="pyt22" value="51-60" />51-60 <br />
  29. <input type="radio" name="pyt22" value="Więcej niż 60 " />Więcej niż 60
  30. <h3>Jakie stanowisko zajmuje Pan/i w firmie?</h3>
  31. <input type="text" name="pyt33" size="50"/>
  32.  
  33. <center><input type="submit" value="Zatwierdz" name="submit"/></center><br /><br />
  34. </form>
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.