Antwoord op som

Status
Niet open voor verdere reacties.

pro pizza

Gebruiker
Lid geworden
24 dec 2007
Berichten
454
Hallo, ik heb het volgende script:

PHP:
<?php
$a = "1x2";
$b = "3-2";
$c = "5x200";
$d = "99^2";
$array_a = array("$a", "$b", "$c", "$d");
$array = array_rand($array_a, 2);
?>

<htmL>
<head>
<title>Reken</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table border="0">
<tr>
<td>De Som:</td><td><input type="name" name="som" "value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td>
</tr>
<tr>
<td>Antwoord:</td>
<td><input type="text" name="ant" /></td>
</tr>
<tr>
<td><td><input type="submit" name="post" value="Bereken!" /> </td></td>
</tr>
</table>
</form>
</body>
</html>
<?php
If (isset($_POST['post'])) {
 If ($_POST['ant'] ==

Hij is nog niet af, omdat ik niet weet hoe ik nu verder moet:

Er wordt uit de array een som gelezen, maar hoe kan ik van de random som nu het antwoord controleren?

Mvg, Ruben
 
Tweede array maken met de antwoorden op de sommen, en vervolgens je array_rand() return opslaan, en dan kun je het antwoord matchen tegen de array met antwoorden:

PHP:
$vragen = array ( "2+2", "3-1", "10x2" );
$antwoorden = array( 4, 2, 20 );

$vraag = array_rand ( $vragen );

echo 'Wat is ' . $vragen[ $vraag ] . '? <br />';
echo 'Antwoord: ' . $antwoorden[ $vraag ] . '!';

Succes :)
 
Is dit niet handiger?

PHP:
$vragen = array ( "2+2", "3-1", "10*2" );

$vraag = array_rand ( $vragen ); 

echo 'Wat is ' . $vragen[ $vraag ] . '? <br />'; 
echo 'Antwoord: ' . eval($vragen[$vraag]) . '!';

Scheelt zelf uitrekenen lijkt mij
 
Zolang je het houdt bij +, - en x vervangt door * kan het wel.

Maar ^ gaat het niet doen, en / is ook twijfelachtig, tenzij je een heel getal als uitkomst neemt..

Daarnaast doet
PHP:
 eval($vragen[$vraag])
opzich niks volgensmij, omdat er geen echo in staat... dan zou je er
PHP:
eval ( 'echo ' . $vragen[ $vraag ] . ';' )
oid van moeten maken :)
 
Zolang je het houdt bij +, - en x vervangt door * kan het wel.

Maar ^ gaat het niet doen, en / is ook twijfelachtig, tenzij je een heel getal als uitkomst neemt..

Daarnaast doet
PHP:
 eval($vragen[$vraag])
opzich niks volgensmij, omdat er geen echo in staat... dan zou je er
PHP:
eval ( 'echo ' . $vragen[ $vraag ] . ';' )
oid van moeten maken :)

Het is toch puur een koppeling van strings. Hij gebruikt de return waarde dan toch van de eval? Net als bij de meeste andere functie die met een return werken.
 
Volgensmij heeft eval() standaard geen return value, tenzij je er ook echt een in de eval zet:

PHP:
eval ( 'return 1' );

Anders krijg je volgensmij NULL terug.
 
Haha, het eerste antwoord van Frats heb ik geprobeerd en dat werkt en is goed genoeg;)
Bedankt allemaal:D
Mvg, Ruben
 
PHP:
<?php
$a = "1x2";
$b = "3-2";
$c = "5x200";
$d = "99^2";
$ab = "2";
$bc = "1";
$cd = "1000";
$dc = "9801";

$array_a = array("$a", "$b", "$c", "$d");
$array = array_rand($array_a, 2);
$antw = array("$ab", "$bc", "$cd", "$dc");  
?>

<htmL>
<head>
<title>Reken</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table border="0">
<tr>
<td>De Som:</td><td><input type="name" name="som" value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td>
</tr>
<tr>
<td>Antwoord:</td>
<td><input type="text" value="<?php echo $antw[$array[0]]; ?>" name="ant" /></td>
</tr>
<tr>
<td><td><input type="submit" name="sub" value="Check antwoord!" /> </td></td>
</tr>
</table>
</form>
</body>
</html>
<?php
If (isset($_POST['sub'])){ 
    If ($_POST['ant'] == $antw[$array[0]]) {
        Print "Een juist antwoord";
}   Else{ Print "Een fout antwoord";
}
}
?>

Het antwoord staat ern u al in als value, maar als ik op bereken druk geeft hij niet: "Juist antwoord" of "fout antwoord". Hoe kan het dat hij dit niet weergeeft, maar gewoon een volgende som geeft?
Mvg, Ruben
 
Je hebt de verzend methode van je formulier niet ingesteld...

Je moet aangeven dat het een post is:
HTML:
<form method="POST" action="pagina.php">
 
Waarom is het antwoord soms wel goed, en soms niet? wat gaat er fout:

PHP:
<?php
$a = "1x2";
$b = "3-2";
$c = "5x200";
$d = "99^2";
$ab = "2";
$bc = "1";
$cd = "1000";
$dc = "9801";
$array_a = array("$a", "$b", "$c", "$d");
$antw = array("$ab", "$bc", "$cd", "$dc");
$array = array_rand($array_a,2);  
If (!isset($_POST['sub'])){
?>
<htmL>
<head>
<title>Reken</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr>
<td>De Som:</td><td><input type="name" name="som" value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td>
</tr>
<tr>
<td>Antwoord:</td>
<td><input type="text" name="ant" /></td>
</tr>
<tr>
<td><td><input type="submit" name="sub" value="Controleer" /> </td></td>
</tr>
</table>
</form>
</body>
</html>
<?php 
}
Else{

    If ($_POST['ant'] == $antw[$array[0]]) {
        Print "Een juist antwoord";
        Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
               
}   Else{ Print "Een fout antwoord";
          Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
}
}
?>

Mvg, Ruben
 
Ik denk dat het probleem is dat je een willekeurige som kiest bovenaan de pagina... de gebruiker stuurt vervolgens een antwoord in, waardoor de pagina weer opnieuw ingeladen wordt, en er een nieuwe som wordt gekozen...

Vervolgens wordt het ingezonden antwoord vergeleken met de níeuw gekozen som ipv de oude som.

Je moet de oude som dus bewaren (bijv. in de Sessie) om het antwoord correct te vergelijken.
 
Oké ik ga het meteen proberen, je hoort zo van me of het gelukt is;)

Mvg, Ruben
 
Zou je mij even op weg kunnen helpen?
Want als ik het doe zo als ik het nu heb, dan wordt de sessie ook veranderd als er op controle wordt geklikt.

De code:
PHP:
<?php
session_start();
$a = "1x2";
$b = "3-2";
$c = "5x200";
$d = "99^2";
$ab = "2";
$bc = "1";
$cd = "1000";
$dc = "9801";
$array_a = array("$a", "$b", "$c", "$d");
$antw = array("$ab", "$bc", "$cd", "$dc");
$array = array_rand($array_a,2);  
$contr = $antw[$array[0]];
$_SESSION['contr'];
If (!isset($_POST['sub'])){
?>
<htmL>
<head>
<title>Reken</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr>
<td>De Som:</td><td><input type="name" name="som" value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td>
</tr>
<tr>
<td>Antwoord:</td>
<td><input type="text" name="ant" /></td>
</tr>
<tr>
<td><td><input type="submit" name="sub" value="Controleer" /> </td></td>
</tr>
</table>
</form>
</body>
</html>
<?php 
}
Else{

    If ($_POST['ant'] == $_SESSION['contr']) {
        Print "Een juist antwoord";
        Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
               
}   Else{ Print "Een fout antwoord";
          Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
}
}
?>

Mvg, Ruben
 
Ik zie dat je nooit een waarde aan $_SESSION['contr'] meegeeft.
Dus hij controleert $_POST['antw'] met een null.

Tja dat is altijd false.
 
:thumb:
PHP:
<?php
session_start();
$a = "1x2";
$b = "3-2";
$c = "5x200";
$d = "99^2";
$ab = "2";
$bc = "1";
$cd = "1000";
$dc = "9801";
$array_a = array("$a", "$b", "$c", "$d");
$antw = array("$ab", "$bc", "$cd", "$dc");
$array = array_rand($array_a,2);  
$contr = $antw[$array[0]];
$_SESSION['contr'] = $contr;
If (!isset($_POST['sub'])){
?>
<htmL>
<head>
<title>Reken</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr>
<td>De Som:</td><td><input type="name" name="som" value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td>
</tr>
<tr>
<td>Antwoord:</td>
<td><input type="text" name="ant" /></td>
</tr>
<tr>
<td><td><input type="submit" name="sub" value="Controleer" /> </td></td>
</tr>
</table>
</form>
</body>
</html>
<?php 
}
Else{

    If ($_POST['ant'] == $_SESSION['contr']) {
        Print "Een juist antwoord";
        Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
               
}   Else{ Print "Een fout antwoord";
          Print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
}
}
?>

voorbeeld

Hij werkt niet.. ik heb het antwoord nu in een sessie staan, maar waarom controleert hij het antwoord niet gewoon?

Mvg, Ruben
 
Je IF-ELSE klopt niet.

Je hebt een (foute )controle op het verzenden, maar je hebt het zo dat wanneer er niet wordt verzonden er gecontroleerd moet worden naar het antwoord.

Probeer dit eens:
PHP:
<?php 
session_start(); 
$a = "1x2"; 
$b = "3-2"; 
$c = "5x200"; 
$d = "99^2"; 
$ab = "2"; 
$bc = "1"; 
$cd = "1000"; 
$dc = "9801"; 
$array_a = array("$a", "$b", "$c", "$d"); 
$antw = array("$ab", "$bc", "$cd", "$dc"); 

if($_SERVER['REQUEST_METHOD'] == "POST") {
  //Formulier wordt verzonden -> Controleren
  if($_POST['ant'] == $_SESSION['contr']) {
    print "Een juist antwoord"; 
    print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
  } else {
    print "Een fout antwoord";
    print "<meta http-equiv='refresh' content='1;URL=pagina.php' />";
  }
} else {
  //Een som formuleren.
  $array = array_rand($array_a,2);   
  $contr = $antw[$array[0]]; 
  // Antwoord in sessie opslaan
  $_SESSION['contr'] = $contr;
  //Formulier weergeven
  ?>
<htmL> 
<head> 
<title>Reken</title> 
</head> 
<body> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border="0"> 
<tr> 
<td>De Som:</td><td><input type="name" name="som" value="<?php echo $array_a[$array[0]]; ?>" DISABLED /></td> 
</tr> 
<tr> 
<td>Antwoord:</td> 
<td><input type="text" name="ant" /></td> 
</tr> 
<tr> 
<td><td><input type="submit" name="sub" value="Controleer" /> </td></td> 
</tr> 
</table> 
</form> 
</body> 
</html> 
<?
} 
?>

Waarschijnlijk werkt het zo beter :)
Nu wordt alleen de sessie aangemaakt wanneer het formulier wordt weergegeven.

Daarnaast wil ik je graag bijbrengen om alle PHP-commando's zonder hoofdletters te doen. Dus geen Print maar print en geen If maar if
 
Nu gaat het antwoord wel goed:D
Bedankt daarvoor
Nu veranderd de som alleen niet na de refresh.. :S
Mvg, Ruben

Voorbeeld
 
Bij mij wel hoor.

Maar het kan zijn doordat er maar zo'n 4 sommen in zitten, dat je 2 of meer keer dezelfde na elkaar krijgt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan