| 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: 13 let
|
|||
0