test

Programovacie jazyky, rady, poradňa...
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

test

Príspevok od používateľa Old Dirty Bastard »

Zdravim, mam test nakodeni v php, ktory vyzera asi takto:

Kód: Vybrať všetko

<?php

$handle = opendir('.');
$conf = 0;
while($dir = readdir($handle))
{
    if(substr_count($dir, 'questions_'))
    {
        $conf++;
    }
}
closedir($handle);

$rand = rand(1,$conf);

$file = './questions_'.$rand.'.php';
if(!file_exists($file))
{
    die(sprintf('This file: <b>%s</b> doesnt exists. Please create this file.', $file));
}
else
{
    include($file);
}
echo '<form method="post" action="results.php?file='.$rand.'">';

for($i = 1; $i <= $numofq; $i++)
{
    echo '<b>'.$quest[$i]['otazka'].'</b><br />';
    for($y = 1; $y <= $numofval; $y++)
    {
        echo $quest[$i][$y] . ' <input type="radio" name="q_'.$i.'" value="'.$y.'" /><br />';
    }

}
?>
<input type="submit" class="button" value="Submit">
</form>
tento test berie otazky aj s urcenymi spravnymi odpovedami s dopredu vytvorenych suborov(questions_1.php, questions_2.php, ...)

po odoslani vyplneneho testu sa results.php otvaraju na novej stranke:

Kód: Vybrať všetko

<?php

$file = './test_config_'.$_GET['file'].'.php';
if(!file_exists($file))
{
    die(sprintf('This file: <b>%s</b> doesnt exists. Please create this file.', $file));
}
else
{
    include $file;
}

$correct = 0;
$incorrect = 0;

for($i = 1; $i <= $numofq; $i++)
{
    if($_POST['q_'.$i] == $quest[$i]['correct'])
    {
         $correct++;
    }
    else
    {
        $incorrect++; 
    }
}

print 'Correct Answers­: <b>'.$correct.'</b><br />';
print 'Incorrect Answers­: <b>'.$incorrect.'</b><br />';
print 'Number of Questions: <b>'.$numofq.'</b><br />';
?>
dalo by sa to spraviť tak, aby sa results otvorali na rovnakej stranke ako test? teda ak mam test použity na nejakom webe, nechcem aby sa results zobrazovali na cistej stranke, chcem aby sa zobrazovali na rovnakej stranke ako test. Je to možne?
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

co som zase zle napisal? je nieco nezrozumitelne na tom, čo som sa opytal? proste chcem, aby sa mi vysledky po odoslani vyplneneho testu zobrazovali na rovnakom mieste ako test(neviem ako to mam ešte inak povedať..), nechcem aby sa mi tie vysledky vyplneneho testu nacitavali na prazdnej stranke ako je to teraz ked to mam nakodene tak ako som to tu postol..

//co este potrebujete? toto je cely test.. ibaže vam ešte možem postnuť ako vyzera subor s otazkami, ktore su použivane pri testoch..
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Dáš to do jedného súboru (samozrejme to náležite upravíš) a budeš tam testovať, či sa cez POST poslali odpovede. Ak nie, tak zobrazíš otázky a ak áno, tak tie odpovede skontroluješ.
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

pod tymi naležitymi upravami maš na mysli čo? treba tam niečo z kodu mazať alebo len pridať na koniec prvej časti kodu tu druhu časť kodu?
//okrem prvej podmienky v druhej casti kodu
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Ani presne neviem. Možností je viac. V tej najjednoduchšej stačí, aby si tam pridal test, či sa cez POST poslali odpovede a ak nie tak sa urobí tá prvá časť. Ak áno, tak tá druhá.
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

Kód: Vybrať všetko

<?php 

$handle = opendir('.'); 
$conf = 0; 
while($dir = readdir($handle)) 
{ 
    if(substr_count($dir, 'questions_')) 
    { 
        $conf++; 
    } 
} 
closedir($handle); 

$rand = rand(1,$conf); 

$file = './questions_'.$rand.'.php'; 
if(!file_exists($file)) 
{ 
    die(sprintf('This file: <b>%s</b> doesnt exists. Please create this file.', $file)); 
} 
else 
{ 
    include($file); 
} 
echo '<form method="post" action="results.php?file='.$rand.'">'; 

for($i = 1; $i <= $numofq; $i++) 
{ 
    echo '<b>'.$quest[$i]['otazka'].'</b><br />'; 
    for($y = 1; $y <= $numofval; $y++) 
    { 
        echo $quest[$i][$y] . ' <input type="radio" name="q_'.$i.'" value="'.$y.'" /><br />'; 
    } 

} 
?> 
<input type="submit" class="button" value="Submit"> 
</form>

<?php 

$file = './test_config_'.$_GET['file'].'.php'; 

$correct = 0; 
$incorrect = 0; 

for($i = 1; $i <= $numofq; $i++) 
{ 
    if($_POST['q_'.$i] == $quest[$i]['correct']) 
    { 
         $correct++; 
    } 
    else 
    { 
        $incorrect++; 
    } 
} 

print 'Correct Answers: <b>'.$correct.'</b><br />'; 
print 'Incorrect Answers: <b>'.$incorrect.'</b><br />'; 
print 'Number of Questions: <b>'.$numofq.'</b><br />'; 
?>
Takto by to podla najjednoduchšej upravy malo vyzerať spravne, nie? :?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Skôr nie ako áno. Najjednoduchšia verzia by mohla vyzerať nejako takto:

Kód: Vybrať všetko

<?php
	if (!isset($_GET['file'])) {
		// tu bude ten prvy skript
	} else {
		// a tu ten druhy
	}
?>
(ale nikomu nepovedz, že som ti to poradil ja, lebo by som sa musel hanbiť; chcelo by to prerobiť celé, ale nechce sa mi rozmýšľať, ako to vlastne funguje...)
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

no urobil som to asi takto:

Kód: Vybrať všetko

<?php 
   if (!isset($_GET['file'])) { 
$handle = opendir('.');
$conf = 0;
while($dir = readdir($handle))
{
    if(substr_count($dir, 'test_config'))
    {
        $conf++;
    }
}
closedir($handle);

$rand = rand(1,$conf);

$file = './test_config_'.$rand.'.php';
if(!file_exists($file))
{
    die(sprintf('Potrebný súbor(<b>%s</b>) neexistuje. Prosím vytvorte ho.', $file));
}
else
{
    include($file);
}
echo '<form method="post" action="test1.php?file='.$rand.'">';

for($i = 1; $i <= $numofq; $i++)
{
    echo '<b>'.$quest[$i]['otazka'].'</b><br />';
    for($y = 1; $y <= $numofval; $y++)
    {
        echo $quest[$i][$y] . ' <input type="radio" name="q_'.$i.'" value="'.$y.'" /><br />';
    }

}
?>
<input type="submit" class="button" value="Odoslať">
</form>
<?php 
   } else { 
$file = './test_config_'.$_GET['file'].'.php';
if(!file_exists($file))
{
    die(sprintf('Potrebný súbor(<b>%s</b>) neexistuje. Prosím vytvorte ho.', $file));
}
else
{
    include $file;
}

$correct = 0;
$incorrect = 0;

for($i = 1; $i <= $numofq; $i++)
{
    if($_POST['q_'.$i] == $quest[$i]['correct'])
    {
         $correct++;
    }
    else
    {
        $incorrect++; 
    }
}

print 'Správnych odpovedí: <b>'.$correct.'</b><br />';
print 'Nesprávnych odpovedí: <b>'.$incorrect.'</b><br />';
print 'Z celkového počtu otázok: <b>'.$numofq.'</b><br />';
   } 
?>
ale stale sa mi to otvara na prazdnom okne, hoci to mam všetko v subore test1.php :(

Kód: Vybrať všetko

http://www.spsesoc.kvalitne.cz/?sekcia=test1
tuto maš url kde som to nahral na net, nechapem ako to spraviť aby sa mi otvaralo tie vysledky tak ako otazky testu.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Zmeň:

Kód: Vybrať všetko

echo '<form method="post" action="test1.php?file='.$rand.'">'
na

Kód: Vybrať všetko

echo '<form method="post" action="?sekcia=test1&file='.$rand.'">'
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

OK, no.. takto to funguje.. len tak funkcia rand nejak nefunguje ak mam subory s testami v určitom priečinku, vtedy vybera stale len prvy subor, ak su ale subory s otazkami v rovnakom priecinku ako test, vybera otazky nahodne, nechapem :?

test vyzera takto:

Kód: Vybrať všetko

<?php 
   if (!isset($_GET['file'])) { 
$handle = opendir('.'); 
$conf = 0; 
while($dir = readdir($handle)) 
{ 
    if(substr_count($dir, 't1_otazky')) 
    { 
        $conf++; 
    } 
} 
closedir($handle); 

$rand = rand(1,$conf); 

$file = './t1_otazky_'.$rand.'.php'; 
if(!file_exists($file)) 
{ 
    die(sprintf('Potrebný súbor(<b>%s</b>) neexistuje. Prosím vytvorte ho.', $file)); 
} 
else 
{ 
    include($file); 
} 
echo '<form method="post" action="?sekcia=test1&file='.$rand.'">'; 

for($i = 1; $i <= $numofq; $i++) 
{ 
    echo '<b>'.$quest[$i]['otazka'].'</b><br />'; 
    for($y = 1; $y <= $numofval; $y++) 
    { 
        echo $quest[$i][$y] . ' <input type="radio" name="q_'.$i.'" value="'.$y.'" /><br />'; 
    } 

} 
?> 
<input type="submit" class="button" value="Odoslať"> 
</form> 
<?php 
   } else { 
$file = './t1_otazky_'.$_GET['file'].'.php'; 
if(!file_exists($file)) 
{ 
    die(sprintf('Potrebný súbor(<b>%s</b>) neexistuje. Prosím vytvorte ho.', $file)); 
} 
else 
{ 
    include $file; 
} 

$correct = 0; 
$incorrect = 0; 

for($i = 1; $i <= $numofq; $i++) 
{ 
    if($_POST['q_'.$i] == $quest[$i]['correct']) 
    { 
         $correct++; 
    } 
    else 
    { 
        $incorrect++; 
    } 
} 

print 'Správnych odpovedí: <b>'.$correct.'</b><br />'; 
print 'Nesprávnych odpovedí: <b>'.$incorrect.'</b><br />'; 
print 'Z celkového počtu otázok: <b>'.$numofq.'</b><br />'; 
   } 
?>
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Zmenil si v tom skripte aj ten adresár pri opendir?
Old Dirty Bastard
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2658
Registrovaný: 13 júl 2006, 8:05
Bydlisko: phpbb_posts

Príspevok od používateľa Old Dirty Bastard »

kua, to som prehliadol, dik.
Napísať odpoveď