Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Tietovisa

Sivun loppuun

teemu_puurunen [11.04.2005 21:31:33]

#

Hei!

Kirjoitinpa tässä aikani kuluksi pienen ja yksinkertaisen tietovisan PHP:llä. Visa on hyvin yksinkertainen, ensin arvotaan annettu määrä kysymyksiä, kysymyksiin vastataan neljästä eri vaihtoehdosta valiten, siirrytään seuraavalle sivulle joka tarkastaa vastaukset ja antaa palautetta.

Kysymyksiä voit lisätä tiedostoon questions.php niin paljon kuin vaan haluat, kunhan muistat muuttaa q_amount nimisen muuttujan arvon questions.php nimisestä tiedostosta. Muista myös laittaa oikea vastaus ensimmäiseksi aina. Ko. vastaus tosin ei välttämättä tule esille ensimmäisenä, sillä vastausehdokkaiden järjestys arvotaan aina.

Olen testannut tämän useaan otteeseen, mutta on toki mahdollista, että siitä löytyy vieläkin virheitä.

Käytännössä voit testata tätä osoitteessa:
http://www.the-rm.com/index.php?main=1⊂=1

Tuohon visaan kysymykset ovat tosin hiukan hätiköiden tehtyjä, joten älä välitä jos ne eivät aina tuntuisi kovin mielekkäiltä.

Pahoittelen vielä, että itse visa on englanniksi, tosin ei liene kovinkaan suuri työ kääntää tämä suomeksi. Kommentit tosin ovat nyt suomeksi.

quiz.php

<?php

// Sisällytä kysymykset sisältävä php-tiedosto
include("questions.php");

$taken = array();
for($x=0;$x<count($questions);$x++) { $taken[$x] = 0; }

// Arvo kysymykset
for($x=0;$q_amount>$x;$x++) {
  $e=0;
  do {
    $n_q = mt_rand(0, (count($questions)-1));
      // Tarkista onko kysymys varattu
      if ($taken[$n_q]==0) {
    $taken[$n_q] = 1;
      if ($x == $q_amount) {
        $qx[$x] = "q$x=$n_q";
      } else { $qx[$x] = "q$x=$n_q&"; }
    $e=1;
    $x1=$x+1;
    $qs[$x] = "<div><b>$x1. $questions[$n_q]</b></div>";
    $v = mt_rand(0,3);
    for($w=0;$w<=3;$w++) {
      // Arvo vastausehdokkaiden järjestys
      $a=$answers[$n_q][$v];
      $v+=1;
      if ($v>3) { $v=0; }
      $aq[$x][$w] = "<input type=\"radio\" name=\"group$x\" value=\"$a\">$a </input>\n";
    }
      }
  } while ($e==0);
}

echo "<form action=\"results.php?";
for($x=0;$x<$q_amount;$x++) { echo "$qx[$x]"; }
echo "\" method=\"post\">\n";

for($x=0;$x<$q_amount;$x++) {
    // Tulosta kysymykset
    echo $qs[$x];
    for($y=0;$y<=3;$y++) {
    // Tulosta vastaukset
       echo $aq[$x][$y];
    }
}

echo "<br/><br/><input type=\"submit\" value=\"Submit\" />";
echo "</form>";

?>

results.php

<?php

include("questions.php");

// Lasketaan oikeiden vastauksien määrä
for($x=0;$x<$q_amount;$x++) {
  // Tarkistetaan ko. kysymys muuttuja muuttujien avulla
  $e = "group$x";
  $f = "q$x";
  // Onko muuttuja muuttuja f oikea vastaus
  if ($answers[$$f][0] == $$e) {
    $rans +=1;
  }
}


// Suhteellinen tulos
$score = ($rans/$q_amount)*100;

// Selitykset kullekin pistemäärälle
$result = array(1 =>
        "Way below standard.",
        "Very poor.",
        "Poor.",
        "Satisfactory.",
        "Rather okay.",
        "Good.",
        "Very good.",
        "Impressive.",
        "Very impressive.",
        "Excellent!");

// Tarkastetaan pistemäärälle vastaava selitys
for($class=0;$class<=100;$class+=10) {
  if ($score>=$class & $score<$class+10) {
    if ($class==0) {
    $r=0;
    } else {
    $r=$class/10;
    }
    break;
  }
}

echo "<h1><b>You got $score% right</b></h1><div>which is $rans out of $q_amount</div>\n";
echo "<div><br/><br/><b>So how did it go actually?</b></div>\n";
echo "<div>$result[$r]</div>";

?>

questions.php

<?php

// Kysymysten määrä
$q_amount = 10;

// Lisää niin monta kysymystä kuin haluat
$questions = array(
	"What is A?",
	"What is B?",
	"What is C?",
	"What is D?",
	"What is E?",
	"What is F?",
	"What is G?",
	"What is H?",
	"What is I?",
	"What is J?",
	"What is K?",
	"What is L?",
	"What is M?",
	"What is N?",
	"What is O?",
	"What is P?",
	"What is Q?",
	"What is R?",
	"What is S?",
	"What is T?"
);

// Vastaukset

$answers = array( 0 =>
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer"),
	array ("Correct answer", "False answer", "False answer", "False answer")
);

?>

tejeez [14.04.2005 16:20:38]

#

kivan epäselvää koodia, tulee ihan mun koodi mieleen :x
ja onko kiva tehdä tollanen kauhee correct answer-false answer-taulukko?

teemu_puurunen [25.04.2005 21:05:13]

#

lainaus:

ja onko kiva tehdä tollanen kauhee correct answer-false answer-taulukko?

Muuta keinoa tuon tekemiseksi ei ole, nimittäin tämä ei ole oikein-väärin -taulukko, vaan oikein-väärin-väärin-väärin -taulukko. Tässä nimittäin on neljä eri vastausvaihtoehtoa, joista yksi on oikea ja muut vääriä. Alkuun tein vaan tällaiset yksinkertaiset kysymykset, eikä niitä minun mielestä tarvitse vaihtaa, sillä koodivinkin idea tulee harvinaisen selväksi. Jos tämä jäi vielä epäselväksi, niin katso esimerkkivisa, johon annoinkin linkin aiemmin.

Kieltämättä, koodini on sekavaa, en ole ennen juurikaan koodivinkkejä levitellyt. Toivottavasti seuraavani on sitten selvempi.

elemo [26.05.2005 14:24:57]

#

ei se esimerkkivisan osote toimi..

McGordon [22.06.2005 16:32:26]

#

ei ni ^

kivimetalli [08.08.2005 03:07:54]

#

mitä täytyis muokata jotta toimii kahdella tai kolmella vastauksella?

alussa [26.07.2006 12:55:42]

#

En saa toimimaan tarkistusta vaan ohjelma väittää tuloksien olevan aina sataprosenttisesti oikein vaikka vastaisin väärin!

Mikä tuossa tarkistuksessa voisi olla väärin kun ei nyt oikein minulle aukene?

Terzu [05.10.2006 16:42:51]

#

lainaus:

En saa toimimaan tarkistusta vaan ohjelma väittää tuloksien olevan aina sataprosenttisesti oikein vaikka vastaisin väärin!

Mikä tuossa tarkistuksessa voisi olla väärin kun ei nyt oikein minulle aukene?

Sama ongelma minullakin...

mauku [02.11.2006 21:35:13]

#

Tästähän puuttuu vaan top- lista :)

jessenic [29.01.2008 22:06:02]

#

saiskohan tästä mitenkään sellasta versiota, että se hakis kysymykset ja vastaukset vaikka näin
jos osoite on
quiz.php?kysely=joku
niin se hakis joku.txt:stä kysymykset ja vastaukset.
joku.txt:
Kysymys|oikein|Väärin|Väärin|Väärin

edit:Taisin saada ideasta kiinni ja kokeilen väsätä sellaisen itse. Voitte kyllä valmiitakin ratkaisuja ehdottaa.

aleboy [13.09.2008 14:14:27]

#

alussa kirjoitti:

En saa toimimaan tarkistusta vaan ohjelma väittää tuloksien olevan aina sataprosenttisesti oikein vaikka vastaisin väärin!

Mikä tuossa tarkistuksessa voisi olla väärin kun ei nyt oikein minulle aukene?

Sama täälä. Voisko joku selittää, tarvitsisin tälläistä sivulleni.

Olli [12.10.2008 18:17:17]

#

Suomennettu koodi, toivottavasti toimii:

http://koti.mbnet.fi/ollins/muuta/testi/tietovisa.php

nerootto [06.09.2009 18:39:38]

#

aleboy kirjoitti:

alussa kirjoitti:

En saa toimimaan tarkistusta vaan ohjelma väittää tuloksien olevan aina sataprosenttisesti oikein vaikka vastaisin väärin!

Mikä tuossa tarkistuksessa voisi olla väärin kun ei nyt oikein minulle aukene?

Sama täälä. Voisko joku selittää, tarvitsisin tälläistä sivulleni.

Sama täällä


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta