Autor | Zpráva | ||
---|---|---|---|
vetrnicek Profil |
#1 · Zasláno: 30. 1. 2011, 15:55:04 · Upravil/a: vetrnicek
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'] $spravne = $_POST['spravne'] 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> <b>".$vysledek[$i].")</b> <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"> </td> </tr> <tr> <td width="400" height="20"><? echo $chybne ?></td> </tr> <tr> <td width="400" height="20"> </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 |
#2 · Zasláno: 30. 1. 2011, 15:57:12 · Upravil/a: vetrnicek
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 |
#3 · Zasláno: 30. 1. 2011, 16:14:53 · Upravil/a: Tori
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(); |
||
Časová prodleva: 3 měsíce
|
|||
Carlos Profil * |
#4 · Zasláno: 1. 5. 2011, 21:42:16
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 |
#5 · Zasláno: 2. 5. 2011, 01:46:23 · Upravil/a: Keeehi
Carlos:
Při tahání otázek z databáze si je náhodně seřaď ORDER BY rand() |
||
Carlos Profil * |
#6 · Zasláno: 2. 5. 2011, 15:59:18
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 |
#7 · Zasláno: 2. 5. 2011, 16:03:33
Carlos:
Ten kod je velmi neprehladny a nikdo sa ti tu s nim hrat nebude, je tu sekcia Prace a zakazky. |
||
Časová prodleva: 13 let
|
0