login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Juiste antwoord

Offline Voldemort - 18/08/2005 15:55 (laatste wijziging 18/08/2005 15:56)
Avatar van VoldemortPHP ver gevorderde Ik wil controleren of men het juiste antwoord op een vraag heeft. Ik doe dit zo:

  1. <?php
  2. echo "<form method='post' action='verbeter.php?soort=meerk&id=".$_GET['id']."'>";
  3.  
  4. while($fetch3 = mysql_fetch_array($result3))
  5. {
  6. echo "<b>".$fetch3['vraag']."</b><br /><br />
  7.  
  8. <input type='radio' name='".$fetch3['vraagid']."' value='1' /> ".$fetch3['keuze1']."<br />
  9. <input type='radio' name='".$fetch3['vraagid']."' value='2' /> ".$fetch3['keuze2']."<br />
  10. <input type='radio' name='".$fetch3['vraagid']."' value='3' /> ".$fetch3['keuze3']."<br />
  11. <input type='radio' name='".$fetch3['vraagid']."' value='4' /> ".$fetch3['keuze4']."<br /><br />";
  12. }
  13.  
  14. echo "<input type='submit' name='submit' value='Verzenden' />
  15. </form>";


En dan wil ik controleren:

  1. <?php
  2. $query2 = "SELECT `oplossing` FROM `lessen_meerk_vr` WHERE `lesid`='".$_GET['id']."'";
  3. $result2 = mysql_query($query2) or die(mysql_error());
  4. while($fetch2 = mysql_fetch_array($result2))
  5. {
  6. if($fetch2['oplossing'] == $_POST['vraagid'])
  7. {
  8. $i++;
  9. }
  10. }
  11. echo "U had ".$i." juiste antwoorden.";
  12. ?>


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
Offline Thomas - 18/08/2005 16:01
Avatar van Thomas 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.
Offline Voldemort - 18/08/2005 16:07 (laatste wijziging 18/08/2005 16:56)
Avatar van Voldemort PHP ver gevorderde Tabel structuur voor tabel 'lessen_meerk'

  1. <?php
  2. CREATE TABLE `lessen_meerk` (
  3. `id` int(11) NOT NULL auto_increment,
  4. `catid` tinyint(3) NOT NULL default '0',
  5. `lesnaam` varchar(50) NOT NULL default '',
  6. `les` text NOT NULL,
  7. `leraar` varchar(100) NOT NULL default '',
  8. `datum` varchar(10) NOT NULL default '',
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  11. ?>



Tabel structuur voor tabel 'lessen_meerk_vr'

  1. <?php
  2. CREATE TABLE `lessen_meerk_vr` (
  3. `lesid` int(11) NOT NULL default '0',
  4. `vraag` varchar(100) NOT NULL default '',
  5. `vraagid` tinyint(2) NOT NULL default '0',
  6. `keuze1` varchar(50) NOT NULL default '',
  7. `keuze2` varchar(50) NOT NULL default '',
  8. `keuze3` varchar(50) NOT NULL default '',
  9. `keuze4` varchar(50) NOT NULL default '',
  10. `oplossing` varchar(100) NOT NULL default ''
  11. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  12. ?>
Offline Fenrir - 18/08/2005 20:18 (laatste wijziging 18/08/2005 20:18)
Avatar van Fenrir 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
Offline Voldemort - 19/08/2005 11:09 (laatste wijziging 19/08/2005 11:10)
Avatar van Voldemort PHP ver gevorderde Hoe wordt mijn controleercode dan?

Citaat:
lessen_meerk_keuzes
ID
vraagID
keuze (Hier zal ik moeten exploden voor de verschillende keuzes???)
Offline Rens - 19/08/2005 11:27
Avatar van Rens Gouden medaille

Crew algemeen
oplossingID (uit: lessen_meerk_vr) = ID (uit: lessen_meerk_keuzes).

Je query voor keuzes:

"SELECT ID, keuze FROM lessen_meerk_keuzes WHERE vraagID=".$id_van_de_vraag." ORDER BY keuze ASC";
Offline Voldemort - 19/08/2005 11:39 (laatste wijziging 23/08/2005 14:22)
Avatar van Voldemort PHP ver gevorderde Dit heb ik nu:

  1. <?php
  2. $query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
  3. $result2 = mysql_query($query2) or die(mysql_error());
  4.  
  5. $i=0;
  6.  
  7. while($fetch2 = mysql_fetch_array($result2))
  8. {
  9. $query3 = "SELECT `id`, `vraagid` FROM `lessen_meerk_keuzes` WHERE `vraagid`='".$fetch2['id']."'";
  10. $result3 = mysql_query($query3) or die(mysql_error());
  11. while($fetch3 = mysql_fetch_array($result3))
  12. {
  13. if(($fetch2['oplossingid'] == $_POST[$fetch3['id']]) && ($_POST['vraagid'] == $fetch3['vraagid']))
  14. {
  15. $i++;
  16. }
  17. }
  18. }
  19. echo "U had ".$i." juiste antwoorden.";
  20. ?>


En mijn form is:

  1. <?php
  2. echo "<form method='post' action='verbeter.php?soort=meerk&id=".$_GET['id']."'>";
  3.  
  4. while($fetch3 = mysql_fetch_array($result3))
  5. {
  6. echo "<br /><b>".$fetch3['vraag']."</b><br /><br />";
  7.  
  8. //De meerkeuze KEUZE'S uit de DB halen
  9. $query4 = "SELECT `id`, `keuze` FROM `lessen_meerk_keuzes` WHERE `vraagid`='".$fetch3['id']."'";
  10. $result4 = mysql_query($query4) or die(mysql_error());
  11.  
  12. while($fetch4 = mysql_fetch_array($result4))
  13. {
  14. echo "<input type='radio' name='".$fetch3['id']."' value='".$fetch4['id']."' /> ".$fetch4['keuze']."<br />";
  15. }
  16. }
  17.  
  18. echo "<br /><input type='submit' name='submit' value='Verzenden' />
  19. </form>";
  20. ?>


En mijn query:

  1. <?php
  2. //De meerkeuze LES uit de DB halen
  3. $query2 = "SELECT `leraar`, `datum`, `les` FROM `lessen_meerk` WHERE `id`='".$_GET['id']."'";
  4. $result2 = mysql_query($query2) or die(mysql_error());
  5. $fetch2 = mysql_fetch_array($result2);
  6. $num_rows2 = mysql_num_rows($result2);
  7.  
  8. //De meerkeuze LESVRAGEN uit de DB halen
  9. $query3 = "SELECT `id`, `vraag` FROM `lessen_meerk_vr` WHERE `lesid`='".$_GET['id']."'";
  10. $result3 = mysql_query($query3) or die(mysql_error());
  11. ?>



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?
Offline Fenrir - 23/08/2005 14:22 (laatste wijziging 23/08/2005 14:22)
Avatar van Fenrir 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:

  1. ID vraagID keuze
  2. ------------------------------------
  3. 1 1 Keuze1 bij vraag 1
  4. 2 1 Keuze2 bij vraag 1
  5. 3 2 Keuze1 bij vraag 2
  6. etc....


Zo kun je een keuze er makkelijk uithalen.
Offline Voldemort - 23/08/2005 14:24
Avatar van Voldemort PHP ver gevorderde Dat had ik gisteren ook plots door, en mijn laatste bericht (dat voor dit (wat een zin )) is dat toch verbeterd?
Offline Fenrir - 23/08/2005 14:31 (laatste wijziging 23/08/2005 14:32)
Avatar van Fenrir PHP expert O, ik had de code nog niet goed gelezen 

  1. <?php
  2. $query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
  3. $result2 = mysql_query($query2) or die(mysql_error());
  4.  
  5. $i=0;
  6.  
  7. while($fetch2 = mysql_fetch_array($result2))
  8. {
  9. if($_POST[$fetch2['ID']] == $fetch2['oplossingID'])
  10. {
  11. ++$i;
  12. }
  13. }
  14. echo "U had ".$i." juiste antwoorden.";
  15. ?>
Offline Voldemort - 23/08/2005 14:39
Avatar van Voldemort PHP ver gevorderde Dan krijg ik altijd: U had 1 juiste antwoorden.
Offline Fenrir - 23/08/2005 15:23
Avatar van Fenrir PHP expert Heb je het ergens online staan? Volgens mij zou het zo moeten werken. Kun je ook je tabel (met inhoud) eens posten?
Offline xSc - 23/08/2005 15:26
Avatar van xSc Onbekend - Let op het gebruik van quotes!
- Maak je URL bij action anders. (maak gebruik van hidden fields)
- Haal de ` uit je query!
Offline Fenrir - 23/08/2005 15:31
Avatar van Fenrir PHP expert Ja, dat zijn stijlfouten, maar het lost zijn probleem niet op...
Offline Voldemort - 23/08/2005 16:14 (laatste wijziging 23/08/2005 16:21)
Avatar van Voldemort 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.
Offline Fenrir - 23/08/2005 17:55
Avatar van Fenrir PHP expert Wat krijg je als je deze code gebruikt?
  1. <?php
  2. $query2 = "SELECT `id`, `oplossingid` FROM `lessen_meerk_vr` WHERE lesid='".$_GET['id']."'";
  3. $result2 = mysql_query($query2) or die(mysql_error());
  4. echo ' <pre>';
  5. var_dump($_POST);
  6. $i=0;
  7.  
  8. while($fetch2 = mysql_fetch_array($result2))
  9. {
  10. var_dump($fetch2);
  11. if($_POST[$fetch2['ID']] == $fetch2['oplossingID'])
  12. {
  13. ++$i;
  14. }
  15. }
  16. echo "</pre>U had ".$i." juiste antwoorden.";
  17. ?>

Offline Voldemort - 23/08/2005 19:44 (laatste wijziging 23/08/2005 19:49)
Avatar van Voldemort 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.
Offline Fenrir - 23/08/2005 20:42
Avatar van Fenrir 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
^^
Offline Voldemort - 23/08/2005 20:54 (laatste wijziging 23/08/2005 20:57)
Avatar van Voldemort PHP ver gevorderde Nu werkt het (eindelijk ). En ik heb nu ook nog enkele notice eruit kunnen halen dankzij jouw code.

Van bv. $_COOKIE['layer'] == "huffelpuf"
heb ik
isset($_COOKIE['layer']) && $_COOKIE['layer'] == "huffelpuf"
moeten maken .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.394s