Autor Zpráva
Nindza
Profil
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
Změnit to z metody post na get a ty obrázky obalit odkazem <a href="?otazka1=1">
Nindza
Profil
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
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
ok moc děkuju zitra na to kouknu a dám ifno jak na tom jsem ;)
nindza
Profil *
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\">";
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

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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