Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z metodą post
Forum PHP.pl > Forum > Przedszkole
Maniek1313
Witam aktualnie piszę skrypt z zadaniami, które pobiera z bazy danych. Po wybraniu poprawnych odpowiedzi będzie sprawdzał poprawność wyboru poprzez metodę post i tutaj właśnie zaczyna się problem, a mianowicie po wysłaniu formularza przekazuje dane post do plik2.php. Odbierać dane metodą post umiem ale nie wiem jak napisać skrypt, gdyż jak widać każde pytanie będzie miało inny name w input.

  1. <form method="post" action="plik2.php">
  2. <?php
  3. $sql = "SELECT * FROM `pytania` WHERE `Kategoria` LIKE \"Adresowanie%\"";
  4. $wynik= mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  5. $a = 0;
  6. while($linia = mysql_fetch_array($wynik)) /* Pętla dopóki istnieją dane */
  7. {
  8. echo '<p><b>Zadanie ', ++$a, ' :</b></p>';
  9. echo '<p>',$linia["Tresc pytania"],'</p>';
  10. echo '<input type="radio" name="',$linia["Nr"],'" value="A">',$linia["OdpA"],'</input><br>';
  11. echo '<input type="radio" name="',$linia["Nr"],'" value="B">',$linia["OdpB"],'</input><br>';
  12. echo '<input type="radio" name="',$linia["Nr"],'" value="C">',$linia["OdpC"],'</input><br>';
  13. echo '<input type="radio" name="',$linia["Nr"],'" value="D">',$linia["OdpD"],'</input>';
  14. }
  15. echo '<p><input type="submit" value="Gotowe" /></p>';
  16. echo '<p><input type="reset" value="Wyczyść formularz" /></p>';
  17. ?>
  18. </form>
Pawel_W
możesz przelecieć $_POST foreach, np.
  1. foreach($_POST as $key => $val){
  2.  
  3. }

zobacz co wtedy zawierają zmienne $key i $val smile.gif

ew. możesz skorzystać z array_keys żeby sprawdzić jakie zadania zostały przysłane
Maniek1313
No okey działa , a jak mam sprawdzać czy formularz został wysłany , jeżeli chciałbym mieć wszystko w jednym pliku questionmark.gif
Pawel_W
metod jest wiele, możesz choćby sprawdzić czy $_SERVER['REQUEST_METHOD'] równa się 'POST'
Maniek1313
Zrobiłem tak :
  1. if($_POST == TRUE)
  2. {
  3. foreach($_POST as $key => $val){
  4. echo $key;
  5. }
  6. }

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

Mam kolejny problem a mianowicie po wysłaniu formularza tekst że odpowiedź jest prawidłowa pojawia się po kilka razy, wiem że to jest spowodowane tym że najpierw while robi pętlę potem foreach kończy pętlę i potem od nowa while aż skończą się wyniki w while, tylko że nie wiem jak inaczej ułożyć te pętle , żeby sprawdzał wyniki ($val z $Prawidlowa).

  1. <form method="post" action="adresowanie.php">
  2. <?php
  3. if($_POST == TRUE)
  4. {
  5. $a == 0;
  6. $sql = "SELECT * FROM `pytania` WHERE `Kategoria` LIKE \"Adresowanie%\"";
  7. $wynik = mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  8. while($linia = mysql_fetch_array($wynik))
  9. {
  10. foreach($_POST as $key => $val){
  11. if($linia["Prawidlowa"] == $val){
  12. echo 'Zadanie nr ',++$a,' zostało rozwiązane prawidłowo.<br>';
  13. }
  14. }
  15. }
  16. }else{
  17. $sql = "SELECT * FROM `pytania` WHERE `Kategoria` LIKE \"Adresowanie%\"";
  18. $wynik= mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  19. $a = 0;
  20. while($linia = mysql_fetch_array($wynik)) /* Pętla dopóki istnieją dane */
  21. {
  22. echo '<p><b>Zadanie ', ++$a, ' :</b></p>';
  23. echo '<p>',$linia["Tresc pytania"],'</p>';
  24. echo '<input type="radio" name="',$linia["Nr"],'" value="A">',$linia["OdpA"],'</input><br>';
  25. echo '<input type="radio" name="',$linia["Nr"],'" value="B">',$linia["OdpB"],'</input><br>';
  26. echo '<input type="radio" name="',$linia["Nr"],'" value="C">',$linia["OdpC"],'</input><br>';
  27. echo '<input type="radio" name="',$linia["Nr"],'" value="D">',$linia["OdpD"],'</input>';
  28. }
  29. echo '<p><input type="submit" value="Gotowe" /></p>';
  30. echo '<p><input type="reset" value="Wyczyść formularz" /></p>';
  31. }
  32. ?>
  33. </form>
Pawel_W
po co to rozwiązujesz w ten sposób?

skorzystaj z in_array + $_POST + $linia['Prawidlowa']
Maniek1313
A mógłbyś podać przykład jak to zrobić questionmark.gif
Pawel_W
  1. while($linia = mysql_fetch_array($wynik))
  2. {
  3. if(in_array($linia["Prawidlowa"], $_POST)){
  4. echo 'Zadanie nr ',++$a,' zostało rozwiązane prawidłowo.<br>';
  5. }
  6. }
Maniek1313
Teraz jak zrobiłem na twoim kodzie i dodałem licznie pkt to błędnie liczy :/

  1. <form method="post" action="adresowanie.php">
  2. <?php
  3. if($_POST == TRUE){
  4. $sql = "SELECT * FROM `pytania` WHERE `Kategoria` LIKE \"Adresowanie%\"";
  5. $wynik = mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  6. $licznik_punktow = 0;
  7. $max = 0;
  8. while($linia = mysql_fetch_array($wynik)){
  9. $max++;
  10. if(in_array($linia["Prawidlowa"], $_POST)){
  11. $licznik_punktow = $licznik_punktow + $linia["Pkt"];
  12. echo $licznik_punktow,'<br>';
  13. }
  14. }
  15. //echo $licznik_punktow,'<br>';
  16. $licznik_punktow = ($licznik_punktow * 100)/($max * 3);
  17. //echo $max,'<br>';
  18.  
  19. echo '<p>Napisałeś test na : ',$licznik_punktow,' %</p>';
  20. }else{
  21. $sql = "SELECT * FROM `pytania` WHERE `Kategoria` LIKE \"Adresowanie%\"";
  22. $wynik= mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  23. $a = 0;
  24. while($linia = mysql_fetch_array($wynik)){
  25. echo '<p><b>Zadanie ', ++$a, ' :</b></p>';
  26. echo '<p>',$linia["Tresc pytania"],'</p>';
  27. echo '<input type="radio" name="',$linia["Nr"],'" value="A">',$linia["OdpA"],'</input><br>';
  28. echo '<input type="radio" name="',$linia["Nr"],'" value="B">',$linia["OdpB"],'</input><br>';
  29. echo '<input type="radio" name="',$linia["Nr"],'" value="C">',$linia["OdpC"],'</input><br>';
  30. echo '<input type="radio" name="',$linia["Nr"],'" value="D">',$linia["OdpD"],'</input>';
  31. }
  32. echo '<p><input type="submit" value="Gotowe" /></p>';
  33. echo '<p><input type="reset" value="Wyczyść formularz" /></p>';
  34. }
  35. ?>
  36. </form>
b4rt3kk
Nic dziwnego, że błędnie liczy. Masz porównać konkretną odpowiedź (przesłaną POST) na konkretne pytanie z konkretnym pytaniem z bazy danych.

  1. while($linia = mysql_fetch_array($wynik)){
  2. $max++;
  3. if($_POST[$linia['nr']] == $linia['prawidlowa']){
  4. $licznik_punktow = $licznik_punktow + $linia["Pkt"];
  5. echo $licznik_punktow,'<br>';
  6. }


Cytat(Pawel_W @ 2.12.2012, 17:02:42 ) *
  1. while($linia = mysql_fetch_array($wynik))
  2. {
  3. if(in_array($linia["Prawidlowa"], $_POST)){
  4. echo 'Zadanie nr ',++$a,' zostało rozwiązane prawidłowo.<br>';
  5. }
  6. }


Jeśli dobrze rozumiem założenia skryptu to takie rozwiązanie nie ma prawa działać jak należy, bo tablica $_POST, pełna jest odpowiedzi A, B, C, D, więc przy każdym obrocie pętli while istnieje ogromne prawdopodobieństwo na to, że odpowiedź prawidłowa znajduje się gdzieś w tablicy $_POST.
Maniek1313
Dzięki działa
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.