Autor Zpráva
vetrnicek
Profil
Dobrý den, prosím o radu, potřebuji vytvořit kvíz v PHP. Jako laik jsem si samozřejmě stáhl již vypracovaný script zde. Po odeslání formuláře se však do sloupce "jmeno" a "spravne" nezapíše nic. Zapíše se údaj jen do "pocetotazek", to funguje. Když jsem do souboru vyhodnoceni.php vlozil
$jmeno = $_POST['jmeno']
, tak se jméno do databáze uložilo, ale sloupec "spravne" zůstal prázdný, zkoušel jsem
$spravne = $_POST['spravne']
, ale nepomohlo to. Nevíte někdo, v čem je zakopaný pes?
Celý kvíz se skládá ze 4 částí:

1) index.php
<? require "config.php" ?>
<html>
<head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
</head>
<body>
<form method="post" action="vyhodnoceni.php" onsubmit="return kontrola(this)">
<div align="center">
  <center>
  <table border="0" width="459" height="268" cellspacing="1" cellpadding="0">
    <tr>
      <td width="459" height="23" colspan="3">
        <p align="center">Vaše jméno: <input type="text" name="jmeno" size="20"></p>
      </td>
    </tr>
    <tr>
      <td width="459" height="19" colspan="3">
        <hr color="#FF9933">
      </td>
    </tr>
<?
for ($i = 1; $i <= $pocetotazek; $i++) {
echo "    <tr>\n";
echo "      <td width=\"459\" height=\"19\" colspan=\"3\" bgcolor=\"#C7C7C7\">".$i.". ".$otazka[$i]."</td>\n";
echo "    </tr>\n";
echo "    <tr>\n";
echo "      <td width=\"8\" height=\"50\" rowspan=\"4\"></td>\n";
echo "      <td width=\"47\" height=\"10\" bgcolor=\"#D7D7D7\"><input type=\"radio\" name=\"o[".$i."]\" value=\"a\">\n";
echo "        a)</td>\n";
echo "      <td width=\"381\" height=\"10\" bgcolor=\"#DFDFDF\">".$odpoved_a_[$i]."</td>\n";
echo "    </tr>\n";
echo "    <tr>\n";
echo "      <td width=\"47\" height=\"10\" bgcolor=\"#D7D7D7\"><input type=\"radio\" name=\"o[".$i."]\" value=\"b\">\n";
echo "        b)</td>\n";
echo "      <td width=\"381\" height=\"10\" bgcolor=\"#DFDFDF\">".$odpoved_b_[$i]."</td>\n";
echo "    </tr>\n";
echo "    <tr>\n";
echo "      <td width=\"47\" height=\"10\" bgcolor=\"#D7D7D7\"><input type=\"radio\" name=\"o[".$i."]\" value=\"c\">\n";
echo "        c)</td>\n";
echo "      <td width=\"381\" height=\"10\" bgcolor=\"#DFDFDF\">".$odpoved_c_[$i]."</td>\n";
echo "    </tr>\n";
echo "    <tr>\n";
echo "      <td width=\"47\" height=\"10\" bgcolor=\"#D7D7D7\"><input type=\"radio\" name=\"o[".$i."]\" value=\"d\">\n";
echo "        d)</td>\n";
echo "      <td width=\"381\" height=\"10\" bgcolor=\"#DFDFDF\">".$odpoved_d_[$i]."</td>\n";
echo "    </tr>\n";
echo "    <tr>\n";
echo "      <td width=\"459\" height=\"27\" colspan=\"3\">\n";
echo "        <hr color=\"#FF9933\">\n";
echo "      </td>\n";
echo "    </tr>\n";
}
?>
    <tr>
      <td width="459" height="10" colspan="3">
        <p align="center"><input type="submit" value="Hotovo" name="send" style="font-weight: bold; background-color: #009933"></td>
    </tr>
  </table>
  </center>
</div>
</form>
<script language="Javascript">
function kontrola(cur)
{
if (cur.jmeno.value == "")
{
alert("Zadejte jméno!");
return false;
}
}
</script>
</body>
</html>

2. config.php
<? $pocetotazek = 10;
// Spravne vysledky
$vysledek[1] = "a";
$vysledek[2] = "a";
$vysledek[3] = "a";
$vysledek[4] = "a";
$vysledek[5] = "a";
$vysledek[6] = "a";
$vysledek[7] = "a";
$vysledek[8] = "b";
$vysledek[9] = "c";
$vysledek[10] = "d";
// Otazky
$otazka[1] = "Otázka 1?";
$otazka[2] = "Otázka 2?";
$otazka[3] = "Otázka 3?";
$otazka[4] = "Otázka 4?";
$otazka[5] = "Otázka 5?";
$otazka[6] = "Otázka 6?";
$otazka[7] = "Otázka 7?";
$otazka[8] = "Otázka 8?";
$otazka[9] = "Otázka 9?";
$otazka[10] = "Otázka 10?";
// Odpovedi
$odpoved_a_[1] = "Odpověď_1a";
$odpoved_b_[1] = "Odpověď_1b";
$odpoved_c_[1] = "Odpověď_1c";
$odpoved_d_[1] = "Odpověď_1d";
$odpoved_a_[2] = "Odpověď_2a";
$odpoved_b_[2] = "Odpověď_2b";
$odpoved_c_[2] = "Odpověď_2c";
$odpoved_d_[2] = "Odpověď_2d";

atd.

function db()
{
mysql_connect("*****", "*****", "*****");
mysql_select_db("*****");
}
?>

3. vyhodnoceni.php
<? require "config.php";
if ($jmeno == "") exit;
$spravne = 0;
$chybne = "<b><u>Řešení chybných odpovědí: </u></b><br>";
for ($i = 1; $i <= $pocetotazek; $i++) {
if ($o[$i] == $vysledek[$i]){
$spravne++;
}else{
switch ($vysledek[$i]) {
    case "a":
        $odp=$odpoved_a_[$i];
        break;
    case "b":
        $odp=$odpoved_b_[$i];
        break;
    case "c":
        $odp=$odpoved_c_[$i];
        break;
    case "d":
        $odp=$odpoved_d_[$i];
        break;
}
$chybne = $chybne."<b>".$i.".</b>  ".$otazka[$i]."<br>&nbsp;&nbsp;&nbsp;<b>".$vysledek[$i].")</b>&nbsp;<i>".$odp."</i><br><br>";
}
}
//vsechny spravne
if ($spravne == $pocetotazek){
$chybne = $chybne."... Žádná chybná odpověd ...";
}
//zapis do databaze
db();
mysql_query("INSERT INTO test VALUES ('$jmeno', '$spravne', '$pocetotazek')");
mysql_close();
//vypis vysledku
?>  <table border="0" width="400" height="116" cellspacing="0">
    <tr>
      <td width="400" height="20">Jméno: <b><? echo $jmeno ?></b></td>
    </tr>
    <tr>
      <td width="400" height="20">Úspěšnost: <b><? echo ($spravne/$pocetotazek)*100 ?>%</b></td>
    </tr>
    <tr>
      <td width="400" height="20">Správné odpovědi: <b><? echo $spravne ?></b> z <b><? echo $pocetotazek ?></b></td>
    </tr>
    <tr>
      <td width="400" height="20">&nbsp;</td>
    </tr>
    <tr>
      <td width="400" height="20"><? echo $chybne ?></td>
    </tr>
    <tr>
      <td width="400" height="20">&nbsp;</td>
    </tr>
    <tr>
      <td width="400" height="20">
        <p align="center">Váš výsledek byl zapsán do <a href="vysledky.php">tabulky
        výsledků</a>.</td>
    </tr>
  </table>
  </center>
</div>
</body>
</html>
vetrnicek
Profil
Ještě soubor vysledky.php:
<html>
<head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title>Tabulka výsledků</title>
</head>
<body bgcolor="#E8E8E8">
<?
//cteni z databaze
require "config.php";
db();
$r=@mysql_query("SELECT * FROM test");
echo "<center><table width=\"30%\">";
echo "<tr>";
echo "<td width=\"10%\" align=\"left\"><b>Jméno</b></td>";
echo "<td width=\"10%\" align=\"center\"><b>Úspěšnost</b></td>";
echo "<td width=\"10%\" align=\"center\"><b>Správně</b></td>";
echo "</tr>";
while ($vys=mysql_fetch_array($r)) { echo "<tr>";
$usp=($vys["spravne"]/$vys["pocetotazek"])*100;
echo "<td width=\"10%\" align=\"left\">".$vys["jmeno"]."</td>";
echo "<td width=\"10%\" align=\"center\">".$usp."%</td>";
echo "<td width=\"10%\" align=\"center\">".$vys["spravne"]." z ".$vys["pocetotazek"]."</td>";
echo "</tr>";
}
echo "</table></center>";
mysql_close();
?>
</body>
</html>
Tori
Profil
vetrnicek:
Skript spoléhá na zapnuté register_globals, což je nebezpečná věc a neradím používat.
// správně:
$jmeno = $_POST['jmeno'];
// ještě lépe:
$jmeno = mysql_real_escape_string($_POST['jmeno']);

K chybě ukládání počtu správných odpovědí: Vypište si použitý DB dotaz, a zjistěte, jestli nevyhazuje chybu, tedy:
$jmeno = mysql_real_escape_string($_POST['jmeno']);
$sql = "INSERT INTO test VALUES ('$jmeno', '$spravne', '$pocetotazek')";
mysql_query($sql);
echo "SQL dotaz: $sql<br>Chyby: ".mysql_error();
Carlos
Profil *
Dobrý den,

stáhl jsem si tento kvíz, ale potřeboval bych, aby fungoval trochu jinak - potřeboval bych, aby otázky tahal z databáze, náhodně. Dejme tomu budu mít v databázi tabulku (ID, otázka, odpovědi, správna odpověď), v ní zadaných třeba 100 otázek a potřebuji, aby mi to pokaždé vygenerovalo 10 náhodných otázek a vyhodnotilo. Byl by mi někdo schopný ten skript předělat? Byl bych moc vděčný, díky moc.
Keeehi
Profil
Carlos:
Při tahání otázek z databáze si je náhodně seřaď
ORDER BY rand()
Carlos
Profil *
Tak jinak, použil jsem jiný kód.
Funguje to tak, že v DB v tabulce quiz (ID, otázka, správná odpověď, A,B,C,D - možnosti) mám otázky z nichž se mi vždy jedna náhodně zobrazuje. Zaškrtnu odpověď a v případě, že je správná, vyhodí to zelenou hlášku, že ok a zároveň mě to pošle na další náhodnou otázku. Pokud odpovím špatně, hodí to červenou chybu a napíše, která možnost byla správně. Kdo ví, tak to z toho všechno vykouká.

Já bych to ale potřeboval funkčnost celé téhle věci vylepšit o toto -
- pokud nic nezaškrtnu, tak po kliknutí na "vyhodnotit" mě to nechá na současné otázce. Teď mi to sice hodí hlášku "Zaškrtněte odpověď", ale už mě to přehodí na další otázku
- Když odpovím špatně, hodí mě to na další otázku a zároveň to napíše "správna odpověď měla být (např.) C. Já bych ale potřeboval, aby se zobrazilo znění té odpovědi, nikoliv písmeno.
- Vytvořit tlačítko "přeskočit otázku, které mi dovolí bez varování přejít na další otázku, aniž bych musel cokoliv zaškrtávat.

Prosím o pomoc, jsem úplný začátečník, díky.

Zde je můj kód:

<html>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>:: Projekt TJData ::</title>
</head>
<body bgcolor="888888" text="000000">
<font face="verdana">

<?php
include("config.php");
?>
<center>
<img src="logo.png"><br><br>
<?php
mysql_query("SET NAMES 'cp1250'");
$sql = "SELECT * FROM quiz ORDER BY rand() LIMIT 1";	//připojení k DB, náhodný výber otázky
$result = mysql_query($sql);
$row = mysql_fetch_object($result);			//Načtení záznamu z DB
$question = "$row->questions";				//Zadání otázky
$zaa = "$row->a";					//možnost A
$zab = "$row->b";					//možnost B
$zac = "$row->c";
$zad = "$row->d";					//možnost D
$oid = "$row->id";
$correctanswer = "$row->answers";
if (isset($_POST['submitted'])) {
if (empty($_POST['answer']) || empty($_POST['id'])) {
echo '<p><table bgcolor="dd0000" width="750"><td>Vyber odpověď!</td></table></p>';
} else {

$answer = $_POST['answer'];
$sql_answer = "select * from quiz where id = '".addslashes($_POST["id"])."'";
$result1 = mysql_query($sql_answer);
$row1 = mysql_fetch_object($result1);
$correctanswer = $row1->answers;
if (strtolower($answer) == strtolower($correctanswer))
{
echo '<p><table bgcolor="99cc33" width="750"><td>>> Super, odpověděl si správně!</td></table></p>';
$res3 = mysql_query($sql3);
}
elseif (strtolower($answer) != strtolower($correctanswer)){

echo '<p><table bgcolor="dd0000" width="750"><td>Špatná odpověď! Správná odpověď je '.$correctanswer.'.</td></table></p>';
}
}

}

?>

<table width="750">
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<?php echo "<b>Otázka č. $oid:</b> 
$question"; 

?> 
</table>
<br>
<table bgcolor="666666" width="750" cellpadding="10">
<tr><td height="60"><input type=radio name=answer value=a><?php echo $zaa ?><br></td></tr>
<tr><td height="60"><input type=radio name=answer value=b><?php echo $zab ?><br></td></tr>
<tr><td height="60"><input type=radio name=answer value=c><?php echo $zac ?><br></td></tr>
<tr><td height="60"><input type=radio name=answer value=d><?php echo $zad ?><br></td></tr>
</table><br>


<input name="id" value="<?php echo $row->id ?>" type="hidden">
<input name="submit" value="Vyhodnotit" type="submit">
<input name="submitted" value="TRUE" type="hidden">
</center>
</form>

</font>
</body>
</html>
pcmanik
Profil
Carlos:
Ten kod je velmi neprehladny a nikdo sa ti tu s nim hrat nebude, je tu sekcia Prace a zakazky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: