kontrola otázok

Programovacie jazyky, rady, poradňa...
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

kontrola otázok

Príspevok od používateľa Flambar1 »

ahoj potreboval by som od vás pomôcť. ide o to, že robím tester ale tak som sa dopracoval ku kontrolovaniu otázok ale tak nejak neviem dosiahnúť to aby mi kontrolovalo všetky otázky. kontroluje iba náhodne vybratú odoslanú otázku.

1. časť

Kód: Vybrať všetko

<?
echo "<form action='kontrola.php' method='post'>";
echo "<br /><br />Odpovedzte na otázky: ";
$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='1' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
echo "<select name='odpoved1'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}

$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='2' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
echo "<select name='odpoved2'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}

$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='3' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
echo "<select name='odpoved3'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}


echo "<br /><input type='submit' name='Odoslať'>";
echo "</form>";            
?>
najprv som mal kontrolu takto

Kód: Vybrať všetko

<?
while($vyhodnotenie1 = mysql_fetch_assoc(mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka']."' and qid='1'"))){  
if($_POST['odpoved1']==$vyhodnotenie1['spravna']) 
{echo "Na otázku ".$_POST['otazka']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$_POST['otazka']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";};
};

	?>
a kontrolovalo 1 otázku
potom som skúsil tak takto

Kód: Vybrať všetko

<?
while($vyhodnotenie1 = mysql_fetch_assoc(mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka']."' and qid='1'"))){  
if($_POST['odpoved1']==$vyhodnotenie1['spravna']) 
{echo "Na otázku ".$_POST['otazka']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$_POST['otazka']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";};
};

while($vyhodnotenie2 = mysql_fetch_assoc(mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka']."' and qid='2'"))){  
if($_POST['odpoved2']==$vyhodnotenie2['spravna']) 
{echo "Na otázku ".$_POST['otazka']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$_POST['otazka']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";};
};

	?>
a nekontroluje už nič :D :/

viem že je to skoro celé zle ale tak kebyže niekto náhodou by poradil alebo urobil tú kontrolu bol by som mu veľmi vďačný.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa audiotrack »

daj si to do code, mne sa nechce klikať aby som si zobrazil kod, ktorý vôbec nie je naformátovaný aby sa dal prehladne čítať
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

oks stalo sa je to v code
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa audiotrack »

v oboch kontrolach ti vystupuje $_POST['otazka']. Musíš si na strane html tým otázkam dávať jedinečné identifikátory, aby sa vedelo o ktorú otázku ide
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

nahradím to s ID a potom k tomu priradím presné znenie otázky... potom by to malo fungovať? tak ako potrebujem?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa audiotrack »

z takejto časti kodu sa to nedá presne určiť či áno alebo nie (neviem štruktúru a celkovú logiku db a tvojho testu) ale hej, teoreticky by to malo odstrániť minimálne túto jednu chybu
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

upravil som to do tohto tvaru:

Kód: Vybrať všetko

	<?
$vyhodnocení = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['id']."' and qid='1'");
while($vyhodnotenie = mysql_fetch_assoc($vyhodnocení)){ 
 
if($_POST['odpoved']==$vyhodnotenie['spravna']) 
{echo "Na otázku ".$otazka['id']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$otazka['id']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";};
};

$vyhodnocení2 = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['id']."' and qid='2'");
while($vyhodnotenie2 = mysql_fetch_assoc($vyhodnocení2)){ 
 
if($_POST['odpoved2']==$vyhodnotenie2['spravna']) 
{echo "Na otázku ".$otazka['id']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$otazka['id']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";};
};
	?>

Kód: Vybrať všetko

<?
echo "<form action='kontrola.php' method='post'>";
echo "<br /><br />Odpovedzte na otázky: ";
$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='1' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='".$otazka['id']."' value='".$otazka['otazka']."'>";
echo "<select name='odpoved1'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}

$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='2' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='".$otazka['id']."' value='".$otazka['otazka']."'>";
echo "<select name='odpoved2'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}

$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' and qid='3' ORDER BY RAND() LIMIT 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp;";
echo "<input type='hidden' name='".$otazka['id']."' value='".$otazka['otazka']."'>";
echo "<select name='odpoved3'>";
echo "<option value='a'>A: ".$otazka['a']."</option>";
echo "<option value='b'>B: ".$otazka['b']."</option>";
echo "<option value='c'>C: ".$otazka['c']."</option>";
echo "</select>";
}


echo "<br /><input type='submit' name='Odoslať'>";
echo "</form>";            
?>
ale nejde to :/ nič neukáže...

a DB:

Kód: Vybrať všetko

--
-- Struktura tabulky `questions`
--

CREATE TABLE IF NOT EXISTS `questions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `otazka` text NOT NULL,
  `a` text NOT NULL,
  `b` text NOT NULL,
  `c` text NOT NULL,
  `spravna` varchar(1) NOT NULL,
  `kategoria` text NOT NULL,
  `qid` int(11) NOT NULL,
  `napoveda` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

--
-- Vypisuji data pro tabulku `questions`
--

INSERT INTO `questions` (`id`, `otazka`, `a`, `b`, `c`, `spravna`, `kategoria`, `qid`, `napoveda`) VALUES
(1, 'Ktorý je teraz mesiac?', 'Január', 'Február', 'Marec', 'a', 'sie1', 1, 'Pozri kalendár'),
(2, 'Skratka Európskej únie?', 'EU', 'EurU', 'Eunia', 'a', 'sie1', 1, 'najkratšie'),
(3, 'Prezident SVK', 'I. Radičová', 'I. Gašparovíč', 'R. Fico', 'b', 'sie1', 1, 'IG'),
(4, 'Počet súrodencov?', '1', '2', '3', 'a', 'sie1', 1, '0<1<2'),
(5, 'Počet dní v týždni', '7', '9', '5', 'a', 'sie1', 2, '28/4');

tak zatiaľ k tomu testu mám len to čo si videl zatiaľ mi treba len spraviť kontrolu či správne si odpovedal. a vyhodnotenie mi potom treba spraviť ... ale zatiaľ mi nejde tá kontrola :/
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa jorg22 »

Naco to robis tak zlozito stacilo by ti

Kód: Vybrať všetko

<?php

echo "<form action='kontrola.php' method='post'>
        <br /><br />Odpovedzte na otázky: ";

$otazky=mysql_query("SELECT * FROM ".TBL_QUESTIONS." WHERE kategoria='sie1' ORDER BY 1");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />".$otazka['otazka']."? &nbsp;&nbsp
        <input type='hidden' name='otazka_id[]' value='".$otazka['id']."'>
        <select name='odpoved[]'>
        <option value='a'>A: ".$otazka['a']."</option>
        <option value='b'>B: ".$otazka['b']."</option>
        <option value='c'>C: ".$otazka['c']."</option>
        </select>";
}

?>

Kód: Vybrať všetko

<?php
for($i = 0; i <= count($_POST['otazka_id']); $i++){
 $vyhodnoceni = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka_id'][$i]."' ");

 while($vyhodnotenie = mysql_fetch_assoc($vyhodnoceni)){ 
  if($_POST['odpoved'][$i] == $vyhodnotenie['spravna']) 
   echo "Na otázku ".$vyhodnotenie['id']." ste odpovedali správne.";} 
  else 
   echo "Na otázku ".$vyhodnotenie['id']." jste odpovedali zle. Správna odpoveď: . Odpovedali ste: .";
 }
}


?>
Neskusal som to , mozno tam budu nejake chyby ale takto by to malo fungovat, a je to prehladnejsie.
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

jorg22

počuj vyhodilo mi chybu ta tento riadok:

Kód: Vybrať všetko

$vyhodnoceni = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka_id'][$i]."' ");
t.b
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 50
Registrovaný: 10 feb 2012, 11:32

Re: kontrola otázok

Príspevok od používateľa t.b »

Mmarek9122 napísal:jorg22

počuj vyhodilo mi chybu ta tento riadok:

Kód: Vybrať všetko

$vyhodnoceni = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".$_POST['otazka_id'][$i]."' ");
ako to ze viackrat pouzivas "? skript sa zastavi hned po vykonani SELECT spravna FROM, lebo hned za tym ma ", to zn. expected ; ale ; missing, vyhodi tym padom chybu.
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

no ale takto mám všade tieto príkazy s ".TBL_NEWS.", ".TBL_USERS." ... a všade to ide ... len tu nie ...
t.b
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 50
Registrovaný: 10 feb 2012, 11:32

Re: kontrola otázok

Príspevok od používateľa t.b »

tak potom ukaz chybum ktoru ti vypisuje.

P.S. Sry, nepozrel som si celý riadok, len tak očami prebehol a ten zmätok v tých " mi hneď udrel do očí. Je to ale v poriadku.
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

tu je tá chyba:

Kód: Vybrať všetko

Fatal error: Maximum execution time of 20 seconds exceeded in /home/users/marekpal/socka.6f.sk/web/kontrola.php on line 117

čas uplynie ale neskontroluje nič :/
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa jorg22 »

lol zabudol som tam $ pri i
oprav to na

Kód: Vybrať všetko

for($i = 0; $i < count($_POST['otazka_id']); $i++){
a nezabudni na bezpecnost, proti SQL injection pouzi mysql_real_escape_string()

Kód: Vybrať všetko

$vyhodnoceni = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE otazka='".mysql_real_escape_string($_POST['otazka_id'][$i])."' ");
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

diki už tam nehádže tú chybu ale nevypíše mi žiaden výsledok :/ ...
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa jorg22 »

co keby si to skusal sam a hladal chyby, nielen kopcil to co ti sem napisem.

Kód: Vybrať všetko

$vyhodnoceni = mysql_query("SELECT spravna FROM ".TBL_QUESTIONS." WHERE id='".mysql_real_escape_string($_POST['otazka_id'][$i])."' ");
treba pozerat vyhodnotenie podla ID a nie podla textu otazky.
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

prepáč ale nevšimol som si to ... akože pozeral som nato, že čo a jak ale tak nezbadal som tú chybu ...a diki
a teraz budem musieť spraviť vyhodnotenie ešte k tomu ....

//autoeditácia príspevku (23 Feb 2012, 19:29)
hoši potrebujem pomôcť

k tomuto by som potreboval spraviť niečo také že výsledok mi automaticky odošle do databázy

Kód: Vybrať všetko

for($i = 0; $i <= count($_POST['otazka_id']); $i++){
$vyhodnoceni = mysql_query("SELECT spravna,kategoria FROM ".TBL_QUESTIONS." WHERE id='".mysql_real_escape_string($_POST['otazka_id'][$i])."' ");
while($vyhodnotenie = mysql_fetch_assoc($vyhodnoceni)){ 

  if($_POST['odpoved'][$i] == $vyhodnotenie['spravna'])
    {$k++; 
    $o++;}
   else
    {$o++;}
 

$p = ($k/$o)*100;
echo "Odpovedali ste správne na ".$k." otázok a získali ste ".$p." percent";

}
}
a potreboval by som niekto šupnúť toto:

Kód: Vybrať všetko

$database->query("INSERT INTO ".TBL_SCORE."(user,category,percent,time)"."VALUES('$session->username', '$vyhodnotenie['kategoria']', '$p', NOW())");
ale keď som to dal za echo vypíše chybu:

Kód: Vybrať všetko

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/users/marekpal/socka.6f.sk/web/kontrola2.php on line 129
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa jorg22 »

Odkial si nabral triedu? $database vsak predtym si posielal poziadavky na databazu cez mysql_query(); ....
Flambar1
Expert
Expert
Používateľov profilový obrázok
Príspevky: 165
Registrovaný: 23 feb 2010, 17:30
Bydlisko: Michalovce
Kontaktovať používateľa:

Re: kontrola otázok

Príspevok od používateľa Flambar1 »

tak mám aj toto tam už odkedy som tam dal systém pre užívateľov iný :D ...

a vedel by si pomôcť aj s tým odosielaním???
Napísať odpoveď