Juiste antwoord
Voldemort - 18/08/2005 15:55 (laatste wijziging 18/08/2005 15:56)
PHP ver gevorderde
Ik wil controleren of men het juiste antwoord op een vraag heeft. Ik doe dit zo:
<?php
echo "<form method='post' action='verbeter.php?soort=meerk&id=".$_GET['id']."'>";
while($fetch3 = mysql_fetch_array($result3))
{
echo "<b>".$fetch3['vraag']."</b><br /><br />
<input type='radio' name='".$fetch3['vraagid']."' value='1' /> ".$fetch3['keuze1']."<br />
<input type='radio' name='".$fetch3['vraagid']."' value='2' /> ".$fetch3['keuze2']."<br />
<input type='radio' name='".$fetch3['vraagid']."' value='3' /> ".$fetch3['keuze3']."<br />
<input type='radio' name='".$fetch3['vraagid']."' value='4' /> ".$fetch3['keuze4']."<br /><br />";
}
echo "<input type='submit' name='submit' value='Verzenden' />
</form>";
<?php
echo "<form method='post' action='verbeter.php?soort=meerk&id=" . $_GET [ 'id' ] . "'>" ;
{
echo "<b>" . $fetch3 [ 'vraag' ] . "</b><br /><br />
<input type='radio' name='" . $fetch3 [ 'vraagid' ] . "' value='1' /> " . $fetch3 [ 'keuze1' ] . "<br />
<input type='radio' name='" . $fetch3 [ 'vraagid' ] . "' value='2' /> " . $fetch3 [ 'keuze2' ] . "<br />
<input type='radio' name='" . $fetch3 [ 'vraagid' ] . "' value='3' /> " . $fetch3 [ 'keuze3' ] . "<br />
<input type='radio' name='" . $fetch3 [ 'vraagid' ] . "' value='4' /> " . $fetch3 [ 'keuze4' ] . "<br /><br />" ;
}
echo "<input type='submit' name='submit' value='Verzenden' /> </form>" ;
En dan wil ik controleren:
<?php
$query2 = "SELECT `oplossing` FROM `lessen_meerk_vr` WHERE `lesid`='".$_GET['id']."'";
$result2 = mysql_query($query2) or die(mysql_error());
while($fetch2 = mysql_fetch_array($result2))
{
if($fetch2['oplossing'] == $_POST['vraagid'])
{
$i++;
}
}
echo "U had ".$i." juiste antwoorden.";
?>
<?php
$query2 = "SELECT `oplossing` FROM `lessen_meerk_vr` WHERE `lesid`='" . $_GET [ 'id' ] . "'" ;
{
if ( $fetch2 [ 'oplossing' ] == $_POST [ 'vraagid' ] )
{
$i ++;
}
}
echo "U had " . $i . " juiste antwoorden." ; ?>
De fout zit em bij die $_POST['vraagid'] die niet steeds gelijk is, maar hoe los ik het op? Hoe kan ik het in een while lus maken zodat de code niet te lang is? (Het aantal vragen is niet van les tot kes constant hetzelfde, vandaar de while.)
18 antwoorden
Gesponsorde links
Thomas - 18/08/2005 16:01
Moderator
Hoe weet je welke oplossing bij welke vraag hoort ?
Hoe zien je database-tabellen er uit ? Waarschijnlijk is daar al veel te verbeteren / eenvoudiger te maken.
Voldemort - 18/08/2005 16:07 (laatste wijziging 18/08/2005 16:56)
PHP ver gevorderde
Tabel structuur voor tabel 'lessen_meerk'
<?php
CREATE TABLE `lessen_meerk` (
`id` int(11) NOT NULL auto_increment,
`catid` tinyint(3) NOT NULL default '0',
`lesnaam` varchar(50) NOT NULL default '',
`les` text NOT NULL,
`leraar` varchar(100) NOT NULL default '',
`datum` varchar(10) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
?>
<?php
CREATE TABLE `lessen_meerk` (
`id` int( 11 ) NOT NULL auto_increment,
`catid` tinyint( 3 ) NOT NULL default '0' ,
`lesnaam` varchar( 50 ) NOT NULL default '' ,
`les` text NOT NULL ,
`leraar` varchar( 100 ) NOT NULL default '' ,
`datum` varchar( 10 ) NOT NULL default '' ,
) ENGINE= MyISAM DEFAULT CHARSET= latin1 AUTO_INCREMENT= 3 ;
?>
Tabel structuur voor tabel 'lessen_meerk_vr'
<?php
CREATE TABLE `lessen_meerk_vr` (
`lesid` int(11) NOT NULL default '0',
`vraag` varchar(100) NOT NULL default '',
`vraagid` tinyint(2) NOT NULL default '0',
`keuze1` varchar(50) NOT NULL default '',
`keuze2` varchar(50) NOT NULL default '',
`keuze3` varchar(50) NOT NULL default '',
`keuze4` varchar(50) NOT NULL default '',
`oplossing` varchar(100) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
?>
<?php
CREATE TABLE `lessen_meerk_vr` (
`lesid` int( 11 ) NOT NULL default '0' ,
`vraag` varchar( 100 ) NOT NULL default '' ,
`vraagid` tinyint( 2 ) NOT NULL default '0' ,
`keuze1` varchar( 50 ) NOT NULL default '' ,
`keuze2` varchar( 50 ) NOT NULL default '' ,
`keuze3` varchar( 50 ) NOT NULL default '' ,
`keuze4` varchar( 50 ) NOT NULL default '' ,
`oplossing` varchar( 100 ) NOT NULL default ''
) ENGINE= MyISAM DEFAULT CHARSET= latin1;
?>
Fenrir - 18/08/2005 20:18 (laatste wijziging 18/08/2005 20:18)
PHP expert
Beter is dit:
lessen_meerk_vr
ID
lesID
vraag
oplossingID <-- verwijst naar id van record uit lessen_meerk_keuzes
lessen_meerk_keuzes
ID
vraagID
keuze
Voldemort - 19/08/2005 11:09 (laatste wijziging 19/08/2005 11:10)
PHP ver gevorderde
Hoe wordt mijn controleercode dan?
Citaat:
lessen_meerk_keuzes
ID
vraagID
keuze (Hier zal ik moeten exploden voor de verschillende keuzes???)
Voldemort - 19/08/2005 11:39 (laatste wijziging 23/08/2005 14:22)
PHP ver gevorderde
Dit heb ik nu:
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
$result2 = mysql_query($query2) or die(mysql_error());
$i=0;
while($fetch2 = mysql_fetch_array($result2))
{
$query3 = "SELECT `id`, `vraagid` FROM `lessen_meerk_keuzes` WHERE `vraagid`='".$fetch2['id']."'";
$result3 = mysql_query($query3) or die(mysql_error());
while($fetch3 = mysql_fetch_array($result3))
{
if(($fetch2['oplossingid'] == $_POST[$fetch3['id']]) && ($_POST['vraagid'] == $fetch3['vraagid']))
{
$i++;
}
}
}
echo "U had ".$i." juiste antwoorden.";
?>
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='" . $_GET [ 'id' ] . "'" ;
$i = 0 ;
{
$query3 = "SELECT `id`, `vraagid` FROM `lessen_meerk_keuzes` WHERE `vraagid`='" . $fetch2 [ 'id' ] . "'" ;
{
if ( ( $fetch2 [ 'oplossingid' ] == $_POST [ $fetch3 [ 'id' ] ] ) && ( $_POST [ 'vraagid' ] == $fetch3 [ 'vraagid' ] ) )
{
$i ++;
}
}
}
echo "U had " . $i . " juiste antwoorden." ; ?>
En mijn form is:
<?php
echo "<form method='post' action='verbeter.php?soort=meerk&id=".$_GET['id']."'>";
while($fetch3 = mysql_fetch_array($result3))
{
echo "<br /><b>".$fetch3['vraag']."</b><br /><br />";
//De meerkeuze KEUZE'S uit de DB halen
$query4 = "SELECT `id`, `keuze` FROM `lessen_meerk_keuzes` WHERE `vraagid`='".$fetch3['id']."'";
$result4 = mysql_query($query4) or die(mysql_error());
while($fetch4 = mysql_fetch_array($result4))
{
echo "<input type='radio' name='".$fetch3['id']."' value='".$fetch4['id']."' /> ".$fetch4['keuze']."<br />";
}
}
echo "<br /><input type='submit' name='submit' value='Verzenden' />
</form>";
?>
<?php
echo "<form method='post' action='verbeter.php?soort=meerk&id=" . $_GET [ 'id' ] . "'>" ;
{
echo "<br /><b>" . $fetch3 [ 'vraag' ] . "</b><br /><br />" ;
//De meerkeuze KEUZE'S uit de DB halen
$query4 = "SELECT `id`, `keuze` FROM `lessen_meerk_keuzes` WHERE `vraagid`='" . $fetch3 [ 'id' ] . "'" ;
{
echo "<input type='radio' name='" . $fetch3 [ 'id' ] . "' value='" . $fetch4 [ 'id' ] . "' /> " . $fetch4 [ 'keuze' ] . "<br />" ; }
}
echo "<br /><input type='submit' name='submit' value='Verzenden' /> </form>" ;
?>
En mijn query:
<?php
//De meerkeuze LES uit de DB halen
$query2 = "SELECT `leraar`, `datum`, `les` FROM `lessen_meerk` WHERE `id`='".$_GET['id']."'";
$result2 = mysql_query($query2) or die(mysql_error());
$fetch2 = mysql_fetch_array($result2);
$num_rows2 = mysql_num_rows($result2);
//De meerkeuze LESVRAGEN uit de DB halen
$query3 = "SELECT `id`, `vraag` FROM `lessen_meerk_vr` WHERE `lesid`='".$_GET['id']."'";
$result3 = mysql_query($query3) or die(mysql_error());
?>
<?php
//De meerkeuze LES uit de DB halen
$query2 = "SELECT `leraar`, `datum`, `les` FROM `lessen_meerk` WHERE `id`='" . $_GET [ 'id' ] . "'" ;
//De meerkeuze LESVRAGEN uit de DB halen
$query3 = "SELECT `id`, `vraag` FROM `lessen_meerk_vr` WHERE `lesid`='" . $_GET [ 'id' ] . "'" ;
?>
Alleen geeft ie nu nog steeds: U had 0 juiste antwoorden. ipv het echt aantal juiste antwoorden. Wat is er fout?
Dit is de tabel structuur (die van Fenrir dus)
lessen_meerk_vr
id
lesid
vraag
oplossingid
lessen_meerk_keuzes
id
vraagid
keuze
Wat doe ik fout?
Fenrir - 23/08/2005 14:22 (laatste wijziging 23/08/2005 14:22)
PHP expert
Dit is fout:
Citaat:
lessen_meerk_keuzes
ID
vraagID
keuze (Hier zal ik moeten exploden voor de verschillende keuzes???)
Je zet voor elke keuze een aparte row in de tabel.
Dus:
ID vraagID keuze
------------------------------------
1 1 Keuze1 bij vraag 1
2 1 Keuze2 bij vraag 1
3 2 Keuze1 bij vraag 2
etc....
ID vraagID keuze
------------------------------------
1 1 Keuze1 bij vraag 1
2 1 Keuze2 bij vraag 1
3 2 Keuze1 bij vraag 2
etc....
Zo kun je een keuze er makkelijk uithalen.
Fenrir - 23/08/2005 14:31 (laatste wijziging 23/08/2005 14:32)
PHP expert
O, ik had de code nog niet goed gelezen
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
$result2 = mysql_query($query2) or die(mysql_error());
$i=0;
while($fetch2 = mysql_fetch_array($result2))
{
if($_POST[$fetch2['ID']] == $fetch2['oplossingID'])
{
++$i;
}
}
echo "U had ".$i." juiste antwoorden.";
?>
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='" . $_GET [ 'id' ] . "'" ;
$i = 0 ;
{
if ( $_POST [ $fetch2 [ 'ID' ] ] == $fetch2 [ 'oplossingID' ] )
{
++ $i ;
}
}
echo "U had " . $i . " juiste antwoorden." ; ?>
Voldemort - 23/08/2005 14:39
PHP ver gevorderde
Dan krijg ik altijd: U had 1 juiste antwoorden.
Fenrir - 23/08/2005 15:23
PHP expert
Heb je het ergens online staan? Volgens mij zou het zo moeten werken. Kun je ook je tabel (met inhoud) eens posten?
xSc - 23/08/2005 15:26
Onbekend
- Let op het gebruik van quotes!
- Maak je URL bij action anders. (maak gebruik van hidden fields)
- Haal de ` uit je query!
Fenrir - 23/08/2005 15:31
PHP expert
Ja, dat zijn stijlfouten, maar het lost zijn probleem niet op...
Voldemort - 23/08/2005 16:14 (laatste wijziging 23/08/2005 16:21)
PHP ver gevorderde
Ik heb het nergens on staan. En als ik het on moet zetten, dan duurt het tijden eer de tabellen, etc allemaal goed staan.
(Ik test in localhost en via m'n ip gaat niet, want dan kom ik bij de modem settings uit)
En de inhouden van de lessen_meerk_vr en lessen_meerk_keuzes tabellen heb ik screens van gemaakt.
Fenrir - 23/08/2005 17:55
PHP expert
Wat krijg je als je deze code gebruikt?
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
$result2 = mysql_query($query2) or die(mysql_error());
echo ' <pre>';
var_dump($_POST);
$i=0;
while($fetch2 = mysql_fetch_array($result2))
{
var_dump($fetch2);
if($_POST[$fetch2['ID']] == $fetch2['oplossingID'])
{
++$i;
}
}
echo "</pre>U had ".$i." juiste antwoorden.";
?>
<?php
$query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='" . $_GET [ 'id' ] . "'" ;
$i = 0 ;
{
if ( $_POST [ $fetch2 [ 'ID' ] ] == $fetch2 [ 'oplossingID' ] )
{
++ $i ;
}
}
echo "</pre>U had " . $i . " juiste antwoorden." ; ?>
Voldemort - 23/08/2005 19:44 (laatste wijziging 23/08/2005 19:49)
PHP ver gevorderde
Citaat:
array(3) {
[1]=>
string(1) "4"
[2]=>
string(1) "7"
["submit"]=>
string(9) "Verzenden"
}
array(4) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
[1]=>
string(1) "4"
["oplossingid"]=>
string(1) "4"
}
array(4) {
[0]=>
string(1) "2"
["id"]=>
string(1) "2"
[1]=>
string(1) "7"
["oplossingid"]=>
string(1) "7"
}
U had 2 juiste antwoorden.
En die 2 juiste antwoorden kloppen dus niet. Hij geeft altijd 2 juiste antwoorden nu.
Zelf als ik het zo verzend:
Citaat:
array(3) {
[1]=>
string(1) "4"
[2]=>
string(1) "6"
["submit"]=>
string(9) "Verzenden"
}
array(4) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
[1]=>
string(1) "4"
["oplossingid"]=>
string(1) "4"
}
array(4) {
[0]=>
string(1) "2"
["id"]=>
string(1) "2"
[1]=>
string(1) "7"
["oplossingid"]=>
string(1) "7"
}
U had 2 juiste antwoorden.
Krijg ik dat. Dus is het wel degelijk een fout.
Fenrir - 23/08/2005 20:42
PHP expert
O, en heb je error_reporting(E_ALL); bovenaan staan?
Als je dat had gedaan had je de error al gevonden. Dus in de toekomst: altijd error_reporting(E_ALL);
Het zit zo:
if($_POST[$fetch2['ID']] == $fetch2['oplossingID'])
In jouw tabel is het:
if($_POST[$fetch2['id']] == $fetch2['oplossingid'])
(kleine letters: ID => id)
Dus:
$fetch2['ID'] = null;
$fetch2['oplossingID'] = null;
$_POST[$fetch2['id']] = $_POST[null] = null;
$_POST[$fetch2['id']] = $fetch2['ID'] = null;
Daarom rekent hij alle antwoorden goed (null = null). Als je error_reporting(E_ALL) had gedaan kreeg je deze errors:
Notice: undefined index 'ID' in...
Notice: undefined index 'oplossingID' in...
En dat maakt debuggen makkelijker
^^
Gesponsorde links
Dit onderwerp is gesloten .