Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Dziwne zachowania formularza, formularz przestaje wysyłać $_POST
bigda
post 22.06.2020, 18:39:59
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 17.04.2018

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


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ł?
Go to the top of the page
+Quote Post
nospor
post 23.06.2020, 08:58:29
Post #2





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Uzywaj BBCODE PHP dla kodu php nawet jak jest z html
Nie mieszaj kilku bbocde w jednym. Naprawde nie widzisz jak nieczytelne to jest?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
javafxdev
post 23.06.2020, 16:09:47
Post #3





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 27.10.2015

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


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
Go to the top of the page
+Quote Post
bigda
post 24.06.2020, 16:21:00
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 17.04.2018

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


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ź.
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: 20.04.2024 - 04:45