Webboard

Pełna wersja: Test/quiz w php
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Hello :shy:

Znalazłem taki to skrypt testu/quizu
Kod PHP:
<?
$pytania 
file("test001.txt");

$k5 "<b>GRATULACJE!</b> <p>Twoja wiedza jest imponująca!";
$k4 "Bardzo dobrze. Jeszcze trochę wysiłku i zostaniesz mistrzem!";
$k3 "Poszło Ci przeciętnie. Koniecznie musisz wzbogacić swoją wiedzę!";
$k2 "Oj... słabo. Pora nadrobić braki i uzupełnić swoje wiadomości!";
$k1 "To nie były dobre odpowiedzi. Musisz się bardziej przyłożyć!";

$f $_POST["f"];
$wyniki $_POST["wyniki"];
srand((double)microtime()*1000000);

if (
$wyniki>0) {
  
$ile count($pytania); $dobre=0;
  for (
$o=0$o<$ile ;$o++) if ($f[$o]==1$dobre++;
  
$srednia=sprintf("%2d",($dobre/$ile)*100);
  echo 
"<p><center>Poprawne odpowiedzi: $dobre z $ile. ";
  echo 
"Zaliczone $srednia procent testu.<p>";
  if (
$srednia<=25) echo $k1;
  if (
$srednia>25 && $srednia<=50) echo $k2;
  if (
$srednia>50 && $srednia<=75) echo $k3;
  if (
$srednia>75 && $srednia<=99) echo $k4;
  if (
$srednia==100) echo $k5;
  echo 
"</center>";
} else {
  echo 
"<form action=\"index.php\" method=\"post\">";
  echo 
"<input type=\"hidden\" name=\"wyniki\" value=\"1\">";
  
$ile count($pytania);
  for(
$i=0;$i<$ile;$i++) {
    
$nr array_rand($pytania);
    
$tmp $pytania[$nr];
    
$pytania[$nr] = $pytania[count($pytania)-1];
    
$pytania[count($pytania)-1] = $tmp;
    
$pyt explode("`"array_pop($pytania));
    echo 
"<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
    for (
$b=1;$b<=count($pyt)-1;$b++)
      
$odp[]="<input type=radio name=\"f[$i]\" value=\"$b\">$pyt[$b]<br>";
    
$ileodp=count($odp);
    for(
$io=0;$io<$ileodp;$io++) {
      
$nr=array_rand($odp);
      
$tmp=$odp[$nr]; 
      
$odp[$nr]=$odp[count($odp)-1];
      
$odp[count($odp)-1]=$tmp;
      echo 
array_pop($odp);
    }
  }
  echo 
"<center><input type=submit value=\" Gotowe! \"></center></form>";
}
?>

Wygląda bardzo fajnie, ale brakuje mi jednej ważnej rzeczy a mianowicie, on pobiera wszystkie pytania jakie znajdują sie w pliku tekstowym z pytaniami. A ja bym chciał żeby np. z 50 pytań pobrał tylko 20. Ktoś obeznany w php może rzucić okiem, ja dopiero początkujący jestem i nie bardzo wiem jak sie za to zabrać :huh:
Najlepiej jest to zrobić przez bazę. Pytania dodajesz w ACP, potem losujesz tam 20 pytań z bazy i niech odpowiadają. Jak tak zrobiłem quiz dla grafifora ;)
A jeszcze lepiej, aby się nie męczyć zbytnio - dać do pliku 20 pytań. Pobierze tylko 20 pytań. No chyba, że po coś konkretnie musisz mieć te 50 pytań w pliku tekstowym.
lock ma chyba na myśli 20 losowych pytań. Zamiana count($pytania) przy $ile na 20 powinna zadziałać, ale bez przetestowania (nie chce mi się tworzyć pytań) to tylko zgadywanie.
Niestety nie :/
count($pytania) zlicza ile jest pytań i jest to używane do obliczenia średniej, przynajmniej tak to wyglada.
Tak na szybko wymyśliłem, powinno działać prawidłowo.

Losowanie pytań z puli:
Kod PHP:
<?php

/*
 * Funkcja losująca numery
 */

function random_numbers ($from$to$amount) {
    
$range range($from$to);
    
$random array_rand($range$amount);
    
$result = array();
    if (
is_array($random)) {
        foreach (
$random as $index) {
            
$result []= $range[$index];
        }
    } else {
        
$result []= $range[$random];
    }
    return 
$result;
}

/*
 * Nazwa zmiennej z pytaniami
 */

$nazwaZm 'pyt';

/*
 * Pytania
 */
$pyt2 'test';
$pyt7 'test2';

/*
 * Losowanie numerów 
 */

$numbers random_numbers(15020); // Numer pierwszego pytania, Numer ostatniego pytania, Ilość numerów do wylosowania

/*
 * Wywołanie pierwszego wylosowanego numery pytania
 */

$pytanie $nazwaZm $numbers[0];
echo $
$pytanie;

/*
 * Wywołanie drugiego wylosowanego numery pytania
 */

$pytanie $nazwaZm $numbers[1];
echo $
$pytanie;

?>