Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Dziwne zachowania formularza
Forum PHP.pl > Forum > Przedszkole
bigda
Witam,

robię stronę z testami psychologicznymi na własny użytek. Dodaję kolejny test. W teście jest 567 pyt. Kod wygląda tak:

CODE
<?php
@session_start();
require_once "connect.php";

ob_start();

if (!isset($_SESSION['zalogowany']))
{
header('Location: index.php');
exit;
}


if (isset($_SESSION['nowymmpi']))
{
$_SESSION['plec']=$_POST['plec'];
$_SESSION['wiek']=$_POST['wiek'];

$polaczenie= new mysqli($host, $db_user, $db_password, $db_name);

if ($polaczenie->connect_errno!=0)
{
echo "Error: ".$polaczenie->connect_errno;
}

else
{
$data=date('Y-m-d');
$plec=$_SESSION['plec'];
$wiek=$_SESSION['wiek']=$_POST['wiek'];
$id=$_SESSION['id'];
$test_id = rand(1,1000);

$_SESSION['data']=$data;
$_SESSION['testid']=$test_id;

$polaczenie->query("INSERT INTO mmpi_skale (id, user_id, test_id, data, plec, wiek) VALUE ('', '$id', '$test_id', '$data', '$plec', '$wiek')");

$polaczenie->close();

}
unset($_SESSION['nowymmpi']);
}


/*********** zapisywanie pytań do bazy ***********/

if (isset($_POST['odp']))
{


$odp=$_POST['odp'];
$nr_pyt=$_SESSION['nr'];

$id=$_SESSION['id'];
$test_id=$_SESSION['testid'];
$data=$_SESSION['data'];



$polaczenie= @new mysqli($host, $db_user, $db_password, $db_name);
$polaczenie->query("INSERT INTO mmpi (id, user_id, test_id, data, nr_pyt, odp) VALUE ('', '$id', '$test_id', '$data', '$nr_pyt', '$odp')");


$polaczenie->close();


}


/************* koniec zapisywania pytań do bazy ***********/


include_once("mmpipyt.php");

if (isset ($_POST['odp']))
{
$_SESSION['nr']=++$_SESSION['nr'];
}
  1. [/HTML]
  2. else
  3. {
  4. $_SESSION['nr']=1;
  5. }
  6.  
  7. $nr=$_SESSION['nr'];
  8. $pytanie=$pyt[$nr];
  9.  
  10.  
  11.  
  12.  
  13. if ($nr>567)
  14. {
  15.  
  16. $polaczenie= new mysqli($host, $db_user, $db_password, $db_name);
  17. $polaczenie->query("UPDATE mmpi_skale SET zal='1' WHERE test_id='$test_id' AND data='$data' AND user_id='$id'");
  18.  
  19. $wynik=$polaczenie->query("SELECT nr_pyt, odp FROM mmpi WHERE test_id='$test_id' AND data='$data' AND user_id='$id' ORDER BY nr_pyt ASC");
  20.  
  21. while($w=$wynik->fetch_assoc())
  22. {
  23. $pyt=$w['nr_pyt'];
  24. $odp=$w['odp'];
  25. $_SESSION[$pyt]=$odp;
  26. }
  27.  
  28.  
  29.  
  30. include_once("mmpi_wyniki.php");
  31.  
  32. }
  33.  
  34.  
  35. ?>
  36.  
  37.  
  38.  
  39. <div class="mmpi_h">
  40. <?php echo 'pytanie '.$_SESSION['nr'].'. z 567' ; ?>
  41. </div>
  42.  
  43. <div class="mmpi_pyt">
  44. <?php echo $pytanie; ?><br />
  45. </div>
  46.  
  47.  
  48.  
  49.  
  50. <div class="mmpi_sub">
  51. <form action="index.php" method="POST" class="mmpi_form_sub">
  52. <input type="hidden" name="odp" value="1">
  53. <input type="submit" value="TAK" class="mmpi_form_sub">
  54. </form>
  55.  
  56. <form action="index.php" method="POST" class="mmpi_form_sub">
  57. <input type="hidden" name="odp" value="0">
  58. <input type="submit" value="NIE" class="mmpi_form_sub">
  59. </form>
  60. </div>
  61.  
  62. ?>
  63. [HTML]





W formularzu (na samym dole) wyświetla się treść pytania i należy wybrać odpowiedź "tak" lub "nie". Strona się przeładowuje i z każdym przeładowaniem zwiększa się o 1 $_SESSION ['nr'], dzięki czemu wyświetla się kolejne pytanie, a wcześniej właściwe pytanie (odpowiedź) zapisuje się do bazy.
Pogrubiony if ma się włączyć po przeklikaniu wszystkich pytań. Po kliknięciu na ostatnie - 567. strona się przeładowuje i $_SESSION['nr'] powinno zwiększyć się do 568. Wtedy if ($nr>20) ($nr=$_SESSION['nr']) powinien zareagować i wykonać instrukcje.

Kiedy w ifie dla przetestowania daję if($nr>10), wszystko jest ok. To samo z większymi numerami. Kiedy daję if($nr>200) - lub więcej niż 200, po przekroczeniu 200 if nie wykonuje instrukcji, a formularz wraca do pierwszego pytania. Jak zrobię takie kółko, w kodzie mogę np. przy 5. pyt. zmienić if na if($nr>10), ale wtedy nawet z taka małą liczbą nie zareaguje - po przekroczeniu 10. pytania, wraca do pierwszego.

W sytuacji, kiedy if nie reaguje - np. przy if($nr>200), kiedy kliknę na 200. pytanie - formularz nie wysyła $_POST. Echo nie wyświetla jego zawartości, var_dump też nic nie pokazuje. Po powrocie do pierwszego pytania, kiedy zatoczę kółko, echo $_POST['odp'] wywala błąd. Kiedy po takim kółku kliknę na odpowiedź na pierwsze pytanie (formularz wyświetla się prawidłowo), $_POST znów się wysyła.

Czy ktoś ma pomysł, na czym polega problem i jak zrobić, żeby if zaskakiwał?
nospor
Uzywaj BBCODE PHP dla kodu php nawet jak jest z html
Nie mieszaj kilku bbocde w jednym. Naprawde nie widzisz jak nieczytelne to jest?
javafxdev
Za dużo masz tutaj zamieszania zrób sobie normalnie klasę i wtedy wszystko będziesz widział z biznesowego punktu widzenia, a tak mieszasz zapytania do bazy z logiką - a zapytania do bazy to tylko szczegół implementacji:

  1. <?php
  2. include_once('PollingService.php');
  3.  
  4. $id = $_GET['random_poll_id'];
  5. $pollingService = new PollingService();
  6. if ($pollingService->isPollFinished($id)) {
  7. $pollingService->showResult($id);
  8. } else {
  9. $pollingService->showNextQuestion($id);
  10. }
  11.  


i wtedy łatwiej zobaczyć co się dzieje i co chcesz osiągnąć, a potem implementujesz tylko metody w środku i działa jak bajka
bigda
nospor

Przepraszam za zamieszanie, ale na podglądzie wyglądało to inaczej. Obiecuję poprawę.

javafxdev

Dziękuję za odpowiedź. Wiem, że to wszystko jest mało porządnie napisane, ale jestem tylko początkującym hobbystą. Z tego co wiedzę, pewnie faktycznie muszę bardziej skupić się na obiektowym podejściu, bo wszystko będzie prostsze, ale najpierw muszę się trochę douczyć.

A co do samego problemu, okazało się, że po wrzuceniu całego kodu na konto cba.pl wszystko działa. Winne są ograniczenia mojego Xamppa. Po przekroczeniu 165. pytania pamięć lub limit liczby zmiennych (stawiam na to drugie) został przekroczony i kolejne zmienne nie chciały się już zapamiętywać, dlatego formularz nie wysyłał $_POST. Po drobnej zmianie kodu wszystko działa również u mnie na Xamppie.

Jeszcze raz dziękuję za odpowiedź.
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.