Autor | Zpráva | ||
---|---|---|---|
Nindza Profil |
#1 · Zasláno: 20. 8. 2012, 13:00:54
Zdravím,
chtěl bych udělat určitý test ve kterém bude klasicky otázka + možnost vybrat z určitého počtu odpovědí. Zatím jsem to řešil pomoci radiobuttnu, ale bylo by pro mě daleko výhodnější kdyby si šlo vybrat z několika obrázků a následným kliknutím na jeden z nich pokračovat k druhé otázce(problém je že zatím jsem uměl otázky řadit jen pod sebe a nevypadá to tak efektivně) ve výsledku by to mělo formulář vyhodnotit a napsat získaný počet bodu což už snad zvládnu. Nicméně nevím jak to vyřešit, s php jsem začal včera a nějak jsem se u tohodle zasekl. Budu rád za každý nápad. ;) Mé dočasné, nevyhovující řešení. <form action=vyhodnoceni.php method="POST"> <HR> <UL> 1. Otázka 1 ? <UL> <INPUT TYPE="RADIO" NAME="otazka1" VALUE="odpoved1.1">odpoved 1<BR> <INPUT TYPE="RADIO" NAME="otazka1" VALUE="odpoved1.2">odpoved 2<BR> </UL></UL> <ul> <INPUT TYPE="SUBMIT" VALUE="Done" > </ul> </FORM> <?php $otazka1 = $_POST['otazka1']; ?> <hr> 1. Otázka 1 ? <ul>odpověd: X<br> Tvoje odpověd byla: <?php if ($otazka1 == "odpoved1.1") { echo ("<b>Správně</b>"); } else { echo ("<b>Špatně</b>"); } ?></ul> |
||
Keeehi Profil |
#2 · Zasláno: 20. 8. 2012, 17:31:59
Změnit to z metody post na get a ty obrázky obalit odkazem
<a href="?otazka1=1">
|
||
Nindza Profil |
#3 · Zasláno: 20. 8. 2012, 18:40:41
No jo ale při metodě get půjdou vidět odpovědi v adrese a to já nechci. Nešlo by to vyřešit nějak aby nešli vidět v adrese ?
|
||
TomasJ Profil |
Nindza:
Udělal jsem pro tebe tento kód, nemá ještě doladěné názvy otázek a seznam správných odpovědí taky není, to si musíš dodělat. Funguje to tak, že se dostaneš na testy.php a musíš mít zadaný parametr ?otazka=1
Pak už jen klikáš na správné odpovědi (třeba na obrázky). Aby šlo klikat na obrázek, toho jsem docílil použitím <label></label> a aby se po kliknutí na obrázek automaticky posunulo na další otázku, jsem použil v tagu <form> událost onchange . Ukládání jsem zrealizoval pomocí cookies a posouvání na další otázku pomocí přesměrování. Kód není profesionální a není hotový (chybí například oprava otázky, časový limit, atd...), ale snad tě nakopne.
testy.php: <?php $posledni_otazka = 3; if(empty($_GET['otazka'])) die("Neni zadane cislo otazky."); if($_GET['otazka']>$posledni_otazka) exit; echo "<form onchange='this.submit();' action='".($_GET['otazka']==$posledni_otazka ? "vyhodnoceni.php" : "ulozit.php?otazka={$_GET['otazka']}")."' method='POST'> <HR> <UL> {$_GET['otazka']}. Otazka {$_GET['otazka']} ? <UL> <INPUT TYPE='RADIO' id='unikatni{$_GET['otazka']}1' NAME='otazka{$_GET['otazka']}' VALUE='odpoved{$_GET['otazka']}.1'><label for='unikatni{$_GET['otazka']}1'><img src='cesta'></label><BR> <INPUT TYPE='RADIO' id='unikatni{$_GET['otazka']}2' NAME='otazka{$_GET['otazka']}' VALUE='odpoved{$_GET['otazka']}.2'><label for='unikatni{$_GET['otazka']}2'><img src='cesta2'></label><BR> </UL></UL> <ul> <INPUT TYPE='SUBMIT' VALUE='Dalsi'> </ul> </FORM>"; ?> ulozit.php: <?php function Ulozit($otazka,$odpoved){ $old = ""; $new = "$otazka=$odpoved"; if(!empty($_COOKIE['otazky'])){ $old = $_COOKIE['otazky']; } if($old) $new = "$old,$new"; setcookie("otazky", $new, time()+7200); } if(!empty($_GET['otazka'])){ $cislo_otazky = $_GET['otazka']; if(!empty($_POST['otazka'.$cislo_otazky])){ Ulozit($cislo_otazky,$_POST['otazka'.$cislo_otazky]); $cislo_otazky++; header("Location:testy.php?otazka=$cislo_otazky"); } } ?> vyhodnoceni.php: <?php function Hodnoceni($odpoved,$spravna_odpoved){ if($odpoved==$spravna_odpoved) return "Spravne."; else return "Spatne, spravna odpoved je $spravna_odpoved."; } $spravne_odpovedi = Array("otazka1"=>"odpoved1.1", "otazka2"=>"odpoved2.2", "otazka3"=>"odpoved3.1"); if(!empty($_COOKIE['otazky'])){ $vyhodnoceni = ""; $otazky = explode(",",urldecode($_COOKIE['otazky'])); for($i=0;$i<count($otazky);$i++){ $otazka = explode("=",$otazky[$i],2); if(!empty($otazka[0]) && !empty($otazka[1])){ $spravne = $spravne_odpovedi['otazka'.$otazka[0]]; $vyhodnoceni .= "<b>Otazka c. {$otazka[0]}:</b> Zadana odpoved: {$otazka[1]} | Hodnoceni: ".Hodnoceni($otazka[1],$spravne)."<br>\n"; } } echo count($otazky); if($vyhodnoceni) echo "<h3>Vyhodnoceni testu:</h3>\n\n$vyhodnoceni"; } ?> Povytváříš soubory, dáš do jedné složky, a můžeš začít ;) |
||
DarkMeni Profil |
#5 · Zasláno: 21. 8. 2012, 13:36:45
Místo labelu se dá použít i image-input - html zápis by pak byl kratší / php skript by byl trochu složitější (musela by se testovat existense proměnné jako třeba "if(isset($_POST['value_a_x'])){...}")
Jestli to nechceš mít podsebou, ale třeba v mřížce 3x2, zkus použít tabulku. |
||
Nindza Profil |
#6 · Zasláno: 21. 8. 2012, 20:31:19
ok moc děkuju zitra na to kouknu a dám ifno jak na tom jsem ;)
|
||
nindza Profil * |
#7 · Zasláno: 23. 8. 2012, 22:52:19
Ahoj ještě jednou, tak jsem koukal na to co tady navrh TomasJ, a je to dost blízko mé představě jak by to mělo fungovat, nicméně i tak se objevilo pár problémů. Jeden z problému je že když to přejde z první otázky na druhou jsou tam pořád stejné obrázky a nevím jak to nastavit aby se to změnilo, pak bych ještě potřeboval poradit s těma radio buttonama, aby nešli vidět a byly tam zobrazené pouze ty obrázky. Moc dík za jakýkoliv návrh ;)
|
||
TomasJ Profil |
No možná by šlo obrázek posunout tak aby překryl radio button a nebo využít návrh od DarkMeni, ale jak říkal, je to složitější. Obrázky změníš tak, že jim přiřadíš název podle čísla otázky například, nebo podle jména.
echo "<img src=\"obrazek_k_otazce_cislo_{$_GET['otazka']}.jpg\">"; |
||
Časová prodleva: 7 měsíců
|
|||
matej2210 Profil |
Ahojte
Chel som vytvorit nieco podobne ako Nindza a presne podobne som zacal ale neskor som hladal ako niektore problemy vyriesit a nasiel som tento prispevok ... Tento priklad co tu dal : TomasJ Sa mi celkom pacil ale mam problem a to ze stale pise "Neni zadane cislo otazky" pritom mam spravene dve otazky otazka : Kde sa ma zapisat cislo otazky lebo nejak sa mi to nedari mam to takto : <UL> {$_GET['otazka']} 01. Čo považujeme za zváračske pracovisko ? {$_GET['otazka']} ?otazka=1 <UL> <INPUT TYPE='RADIO' id='unikatni{$_GET['otazka']}1' NAME='otazka{$_GET['otazka']}' VALUE='Priestor, kde sa pripravujú dielce na zváranie{$_GET['otazka']}.1'><BR> <INPUT TYPE='RADIO' id='unikatni{$_GET['otazka']}2' NAME='otazka{$_GET['otazka']}' VALUE='Priestor, v ktorom sú umiestnene zváracie prídavné materiály{$_GET['otazka']}.2'><BR> <INPUT TYPE='RADIO' id='unikatni{$_GET['otazka']}3' NAME='otazka{$_GET['otazka']}' VALUE='Priestor vymedzený pre trvalé alebo prechodné zváranie {$_GET['otazka']}.3'><BR> </UL></UL> som si isty ze som len nieco nezadal alebo dal na zle miesto som len zaciatocnik takže berte trocha ohlad. ďakujem |
||
Časová prodleva: 11 let
|
0