Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z metodą post
Maniek1313
post 2.12.2012, 13:52:33
Post #1





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


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>


Ten post edytował Maniek1313 2.12.2012, 13:55:17
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 14:00:02
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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
Go to the top of the page
+Quote Post
Maniek1313
post 2.12.2012, 14:09:48
Post #3





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


No okey działa , a jak mam sprawdzać czy formularz został wysłany , jeżeli chciałbym mieć wszystko w jednym pliku questionmark.gif
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 14:20:11
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


metod jest wiele, możesz choćby sprawdzić czy $_SERVER['REQUEST_METHOD'] równa się 'POST'
Go to the top of the page
+Quote Post
Maniek1313
post 2.12.2012, 14:53:41
Post #5





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


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>


Ten post edytował Maniek1313 2.12.2012, 14:54:55
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 16:36:20
Post #6





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


po co to rozwiązujesz w ten sposób?

skorzystaj z in_array + $_POST + $linia['Prawidlowa']
Go to the top of the page
+Quote Post
Maniek1313
post 2.12.2012, 16:53:33
Post #7





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


A mógłbyś podać przykład jak to zrobić questionmark.gif
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 17:02:42
Post #8





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


  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. }
Go to the top of the page
+Quote Post
Maniek1313
post 2.12.2012, 17:42:45
Post #9





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


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>
Go to the top of the page
+Quote Post
b4rt3kk
post 2.12.2012, 18:10:38
Post #10





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Maniek1313
post 2.12.2012, 18:14:09
Post #11





Grupa: Zarejestrowani
Postów: 148
Pomógł: 2
Dołączył: 8.07.2011

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


Dzięki działa

Ten post edytował Maniek1313 2.12.2012, 18:17:13
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: 12.06.2024 - 02:44