Autor Zpráva
Mmarek9122
Profil
čaute potrebujem pomôcť...

poradte jak spraviť kontrolu otázok(10 otázky), ktoré vyberám náhodne z databázy. Nemám žiaden nápad potreboval by som radu alebo poprípade URL kde by som našiel nejaký podobný script alebo niečo podobné.


Ďakujem :)
jenikkozak
Profil
Dá se to vyřešit spoustou způsobů. Jeden (který považuji za nejsnadnější na pochopení) nadhodím:
Dotaz pro vybrání náhodné otázky:
$otazka=mysql_fetch_array(mysql_query("SELECT otazka FROM otazky ORDER BY RAND() LIMIT 1"), MYSQL_NUM);

Vypsání otázky na stránce:
Odpovězte na následující otázku: $otazka[0]? <input type="text" name="odpoved"><input type="hidden" value="$otazka[0]" name="zadani">

Dotaz na ověření odpovědi:
SELECT COUNT(*) FROM otazky WHERE otazka='".mysql_real_escape_string($_POST["zadani"])."' AND odpoved='".mysql_real_escape_string($_POST["odpoved"])."'

Pokud to vrátí nulu, odpověď nesedí na otázku.
Mmarek9122
Profil
hmm a nejak sa to nedá tam keď mám už tabuľku prichystanú takto:
otazka
odpoved A
odpoved B
odpoved C
spravna odpoved


lebo chcem to spraviť nejak tak keď bude mať určitý počet bodov tak podľa toho by mu vygenerovalo kód a mal by prístup do ostatných sekcií. podľa druhu kódu. tak akože by som potreboval akože potreboval aby mi spolu skontrolovalo všetky otázky a vypísalo mi počet bodov...
Mmarek9122
Profil
tak akože podľa toho by mi niekto vedel povedať? podľa toho ako mám tabuľku? lebo akože podľa toho kódu vyššie neviem spraviť... trochu tomu nechápem jak presne to spraviť...
KubaFibi
Profil
Nejsem žádný odborník přes programování, teprve jsem nastoupil na obor IT na SŠ. PHP ještě nebereme, jsem samouk. Asi to není odborně napsáno a šlo by to i lépe, ale mělo by to fungovat:


V DB je tabulka otazky, obsahuje buňky: | otazka | a | b | c | spravna |

buňka spravna obsahuje písmeno správné odpovědi (a, b nebo c)

První soubor:
<?
$otazka=mysql_fetch_array(mysql_query("SELECT * FROM otazky ORDER BY RAND() LIMIT 1"));

 echo "Odpovězte na otázku: ".$otazka['otazka']."?";
echo "<form action='script.php' method='post'>";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
echo "<select name='odpoved'>";
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 "</form>";
?>

soubor script.php
<?
$vyhodnoceni = mysql_fetch_array(mysql_query("SELECT spravna FROM otazky WHERE otazka='".$_POST['otazka']."'"));

 if($_POST['odpoved']==$vyhodnoceni['spravna']) {echo "Na otázku ".$_POST['otazka']." jste odpověděli správně.";} else {echo "Na otázku ".$_POST['otazka']." jste odpověděli špatně.";}
?>

Dále by to šlo modifikovat, aby se sčítalo skóre, kdyžtak napiš.
Mmarek9122
Profil
počuj vyhodilo mi chybu:


Warning: mysql_query(): Access denied for user 'zakaznik'@'srv31.endora.cz' (using password: NO) in /home/users/marekpal/socka.6f.sk/web/scripts/script.php on line 3 Warning: mysql_query(): A link to the server could not be established in /home/users/marekpal/socka.6f.sk/web/scripts/script.php on line 3 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/users/marekpal/socka.6f.sk/web/scripts/script.php on line 3 Na otázku kolko mas rokov jste odpovedali zle.
Davex
Profil
Mmarek9122:
Ta chyba znamená, že máš špatně připojení k databázi. V mysql_connect() musíš použít správné přihlašovací údaje včetně hesla.
Mmarek9122
Profil
Davex:
okis toto som už opravil...

KubaFibi:
vždy ukazuje hoci právne odpoviem že odpovedal som zle :(
KubaFibi
Profil
Pravděpodobně si vkládál otázky a odpovědi přes phpAdmina, pokud ano, tak je tu problém s kódováním. Otázka a odpovědi musí být ve správném kódování, jinak se při kontrole nenačte správná odpověď.

Tady je moje tabulka, na které jsem to zkoušel. Zkus si to nahrát k sobě a uvidiš, že to jde. P.S.: Otázky jen provizorní (na otestování funkčnosti).
-- phpMyAdmin SQL Dump
-- version 3.4.5
-- http://www.phpmyadmin.net
--
-- Počítač: localhost
-- Vygenerováno: Sob 14. led 2012, 20:57
-- Verze MySQL: 5.5.16
-- Verze PHP: 5.3.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Databáze: `test`
--

-- --------------------------------------------------------

--
-- Struktura tabulky `otazky`
--

CREATE TABLE IF NOT EXISTS `otazky` (
  `otazka` text COLLATE utf8_czech_ci NOT NULL,
  `a` text COLLATE utf8_czech_ci NOT NULL,
  `b` text COLLATE utf8_czech_ci NOT NULL,
  `c` text COLLATE utf8_czech_ci NOT NULL,
  `spravna` varchar(1) COLLATE utf8_czech_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

--
-- Vypisuji data pro tabulku `otazky`
--

INSERT INTO `otazky` (`otazka`, `a`, `b`, `c`, `spravna`) VALUES
('Kdo je prezident ÈR?', 'Václav Klaus', 'druhá blabla', 'tøetí blabla', 'a'),
('Zkratka Evropská unie?', 'blabla', 'blabla', 'EU', 'c'),
('Zkratka Èeské Vysoké Uèení Technické?', 'blabla', 'blabla', 'ÈVUT', 'c');
Mmarek9122
Profil
KubaFibi:
ide to ... len ma zaujíma, že prečo mi nechce ukázať 10 otázok keď mám takto kód:
$otazka=mysql_fetch_array(mysql_query("SELECT * FROM otazky WHERE sekcia='sie1' ORDER BY RAND() LIMIT 10"));

vždy ukáže len jednu ... :(

no a už len vyhodnotenie...
KubaFibi
Profil
Zkusil jsem to takto (dát to do while), ale to mi to zase vypisuje otázky do nekonečna, takže to přesáhně 30 sekund a vypíše chybu.

echo "<form action='script.php' method='post'>";

while($otazka=mysql_fetch_array(mysql_query("SELECT * FROM otazky WHERE sekcia='sie1' ORDER BY RAND() LIMIT 10"))){
  echo "Odpovězte na otázku: ".$otazka['otazka']."?";
  echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
  echo "<select name='odpoved'>";
  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 "<input type='submit'>";
echo "</form>";


Takže bych to udělal tak, aby se zobrazovala vždy jen jedna otázka a postupně se přičítalo skóre. Asi bych použil SESSION. Takže by to vypadalo nějak takto (celé do jednoho souboru):

<?
session_start();
if(!isset($_SESSION['pocetOtazek'])){$_SESSION['pocetOtazek']=0;}
if(!isset($_SESSION['body'])){$_SESSION['body']=0;}

if($_SESSION['pocetOtazek']<10){ // zde napiš, kolik otázek má být položeno
$otazka=mysql_fetch_array(mysql_query("SELECT * FROM otazky ORDER BY RAND() LIMIT 1"));
echo "Odpovězte na otázku: ".$otazka['otazka']."?";
echo "<form action='' method='post'>";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'>";
echo "<select name='odpoved'>";
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 "<input type='submit'>";
echo "</form>";

if(isset($_POST['odpoved'])){
  ++$_SESSION['pocetOtazek'];
  $vyhodnoceni = mysql_fetch_array(mysql_query("SELECT spravna FROM otazky WHERE otazka='".$_POST['otazka']."'"));
  if($_POST['odpoved']==$vyhodnoceni['spravna']) {
    echo "Na otázku ".$_POST['otazka']." jste odpověděli správně.<br><br>";
    ++$_SESSION['body'];
  } else {
    echo "Na otázku ".$_POST['otazka']." jste odpověděli špatně.<br><br>";
  }
}
}

echo "Počet zodpovězených otázek: ".$_SESSION['pocetOtazek']."<br>";
echo "Počet bodů: ".$_SESSION['body'];
?>
panther
Profil
KubaFibi:
Zkusil jsem to takto (dát to do while)
nejprve prveď dotaz, pak až použij cyklus while.
Mmarek9122
Profil
vyriešil som to takto ale tak neviem či to je to správne podľa písania kódu...

<?
echo "<form action='../scripts/kontrola.php' method='post'>";
$otazky=mysql_query("SELECT * FROM otazkyy ORDER BY RAND() LIMIT 10");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />Odpovedzte na otázku: ".$otazka['otazka']."?";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'><br />";
echo "<input type=\"radio\" value='a'>A: ".$otazka['a']."</option>";
echo "<input type=\"radio\" value='b'>B: ".$otazka['b']."</option>";
echo "<input type=\"radio\" value='c'>C: ".$otazka['c']."</option>";
}
echo "<br /><input type='submit' name='Odoslať'>";
echo "</form>";
?>

pokúšal som sa aj podľa toho spraviť aj informácie o správnosti odpovede ale veľmi to tak nejde...

<?
$vyhodnocení = mysql_query("SELECT spravna FROM otazkyy WHERE otazka='".$_POST['otazka']."'");
while($vyhodnotenie = mysql_fetch_assoc($vyhodnocení)){ 
 
if($_POST['odpoved']==$vyhodnotenie['spravna']) 
{echo "Na otázku ".$_POST['otazka']." ste odpovedali správne.";} 
else 
{echo "Na otázku ".$_POST['otazka']." jste odpovedali zle.";};
};
    ?>

s toto tvoje tak som skúšal ale viacej tak viacej, krát mi tam dáva tú istú otázku... čo mi veľmi netreba ... už len mi treba spraviť tú kontrolu nejak tak podľa toho ako ja mám ... alebo stačí mi len vypísať konečné % z testu alebo niečo ...
Mmarek9122
Profil
<?
echo "<form action='../scripts/kontrola.php' method='post'>";
$otazky=mysql_query("SELECT * FROM otazkyy WHERE kategoria='sie1' ORDER BY RAND() LIMIT 10");
while($otazka = mysql_fetch_assoc($otazky)){ 
echo "<br /><br />Odpovedzte na otázku: ".$otazka['otazka']."?";
echo "<input type='hidden' name='otazka' value='".$otazka['otazka']."'><br />";
echo "<input type='radio' name='".$otazka['id']."' value='a'>A: ".$otazka['a']."";
echo "<input type='radio' name='".$otazka['id']."' value='b'>B: ".$otazka['b']."";
echo "<input type='radio' name='".$otazka['id']."' value='c'>C: ".$otazka['c']."";
}
echo "<br /><input type='submit' name='Odoslať'>";
echo "</form>";
?>

som trochu opravil kód, + som zmenil tabuľku otázkyy pridal som tam kategórie a id a už to nekontroluje :(
CREATE TABLE `otazkyy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `otazka` text COLLATE utf8_general_ci NOT NULL,
  `a` text COLLATE utf8_general_ci NOT NULL,
  `b` text COLLATE utf8_general_ci NOT NULL,
  `c` text COLLATE utf8_general_ci NOT NULL,
  `spravna` varchar(1) COLLATE utf8_general_ci NOT NULL,
  `kategoria` text COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=4;

INSERT INTO `otazkyy` (`id`, `otazka`, `a`, `b`, `c`, `spravna`, `kategoria`) VALUES
(1, 'Ktorý je teraz mesiac?', 'Január', 'Február', 'Marec', 'a', 'sie1'),
(2, 'Skratka Európskej únie?', 'EU', 'EurU', 'Eunia', 'a', 'sie1'),
(3, 'Prezident SVK', 'I. Radičová', 'I. Gašparovíč', 'R. Fico', 'b', 'sie1');
KubaFibi
Profil
a/ co přesně to dělá? vypisuje chybu? nevypisje obsah ale chybu ne? nebo něco jíného?
b/ máš nahraný soubor - a ve správné složce? ../scripts/kontrola.php
Mmarek9122
Profil
Už som to opravil. Dik za pomoc :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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