Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rand()
Forum PHP.pl > Forum > PHP
electrolyte
Otóż przerabiam skrypt QUIZ`u, dodałem taką funkcję:

  1. <?php
  2.  
  3. // Ilość plików XML z pytaniami.
  4. $maxXML = 11; 
  5.  
  6. // Losowanie liczby ze zbioru $maxXML
  7. $rand = rand(1, $maxXML);
  8.  
  9. // Dla sprawdzenie aktualnej liczby, później zostanie to usunięte
  10. echo $rand;
  11.  
  12. // Tworzenie nazwy pliku XML z pytania dla QUIZU
  13. $xmlFile = 'xml/quiz_'."$rand".'.xml';
  14.  
  15. ?>


Stworzyłem ją po to aby generować liczby, które są w nazwach plików xml aby później je losowo otwierać te pliki.

Następnie $xmlFile idzie do napisanego parsera XML, które parsuje cały XML do wyświetlenia(pytanie i odpowiedzi). Z tym jest wszystko okej ale każde pytanie i 4 odpowiedzi są wysyłane przez POST do $PHP_SELF czyli do tego samego pliku. Co powoduje ponowne wygenerowanie liczby i wczytanie nowego XML z pytaniami i jak można się domyślić jest inny zestaw pytań. Miały by to sens gdy w pliku XML byłoby tylko jedno pytanie ale zestaw ma 10 więc nigdy to nie dojdzie do końcu zestawu pytań i opcja spróbuj jeszcze raz będzie bez sensu.

Czy można jakoś zatrzymać tę liczbę ? Bo z tym mam największy problem

A to jest forma do drukowania pytań.

  1. <?php
  2.  
  3. //
  4. // PRINT FIRST QUESTION
  5. //
  6.  
  7. if (!isset($post_answers)) {
  8. echo "<b>" . $questions[0]['text'] . "</b>\n";
  9. echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
  10.  
  11. // split choices into "choices" array
  12. $choices = explode(", ", $questions[0]['choices']);
  13.  
  14. // print text field if there are no choices
  15. if (count($choices) == 1) {
  16. echo "<input type=\"text\" name=\"answers[0]\" size=10>\n";
  17. }
  18.  
  19. // print radio fields if there are multiple choices
  20. else {
  21. // print a radio button for each choice
  22. for ($i = 0; $i < count($choices); $i++) {
  23. echo "<input type=\"radio\" name=\"answers[0]\" value=\"" . $choices[$i] . "\"> " . $choices[$i] . "<br>\n";
  24. }
  25. }
  26.  
  27. echo "<input type=\"submit\" value=\"Next Question\">\n";
  28. echo "</form>\n";
  29. }
  30.  
  31.  
  32. //
  33. // PRINT NEXT QUESTION
  34. //
  35.  
  36. elseif (count($questions) > count($post_answers)) {
  37. // get number of next question
  38. $nextQuestion = count($post_answers);
  39.  
  40. // print question
  41. echo "<b>" . $questions[$nextQuestion]['text'] . "</b>\n";
  42. echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
  43.  
  44. // print answers to previous questions as hidden form fields
  45. for ($i = 0; $i < count($post_answers); $i++) {
  46. echo "<input type=\"hidden\" name=\"answers[$i]\" value=\"$post_answers[$i]\">\n";
  47. }
  48.  
  49. // split choices into "choices" array
  50. $choices = explode(", ", $questions[$nextQuestion]['choices']);
  51.  
  52. // print text field if there are no choices
  53. if (count($choices) == 1) {
  54. echo "<input type=\"text\" name=\"answers[$nextQuestion]\" size=10>\n";
  55. }
  56.  
  57. // print radio fields if there are multiple choices
  58. else {
  59. // print a radio button for each choice
  60. for ($i = 0; $i < count($choices); $i++) {
  61. echo "<input type=\"radio\" name=\"answers[$nextQuestion]\" value=\"" . $choices[$i] . "\">" . $choices[$i] . "<br>\n";
  62. }
  63. }
  64.  
  65. // print appropriate button label
  66. if (count($questions) == count($post_answers) + 1) {
  67. echo "<input type=\"submit\" value=\"Calculate Score\">\n";
  68. }
  69. else {
  70. echo "<input type=\"submit\" value=\"Next Question\">\n";
  71. }
  72.  
  73. echo "</form>\n";
  74. }
  75.  
  76. ?>
siemakuba
sporo tego kodu, przyznam ze nie przegladalem dokladnie, ale widze ze masz tam formularz. Ja widze to tak:

1. w formularzu dajesz pole hidden z wartoscia wygenerowanej liczby losowej.
2. przed generowaniem liczby losowej sprawdzasz czy nie masz jej przypadkiem w danych $_POST, jezeli tak, uzywasz liczby z $_POST, jezeli nie - generuejsz liczbe i zapisujasz ja sobie w hidden.

pozdr.
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.