Problem bei der abfrage

Das ist der gesamte Code:



HTML:
<?php
include('config.php')
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>

<head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Examen I</title>
</head>
<body>
<?php
srand((double)microtime()*1000000);
$sql = rand(1,50);
$sql = "SELECT Deutsch FROM Vokabeln WHERE ID = '$sql' ";

$sql=mysql_query($sql) OR die(mysql_error());
$sql=mysql_fetch_array($sql);

$deutsch=$sql[0];
unset($sql);
$points = 0 ;
?>
<form method="post" action="">
   <table>
    <tr><td>Vorgabe:</td><td><?php echo " $deutsch" ?></td></tr>
	<td>&Uuml;bersetzung:</td><td><input type="text" name="con" /></td></tr>
	<tr><td>&nbsp;</td></tr>
	<tr><td><input type="submit" value="Kontrollieren" /></td>
	<td><label>Score:</label></td><td>&nbsp;</td><td><?php echo " $points "?></td></tr>
	
	</table>
</form>
<br /><br />

<?php

$con = $_POST['con'] ;
$sqll = "SELECT Englisch FROM Vokabeln WHERE Deutsch LIKE '%$con%'";
    $result = mysql_query($sqll) or die("Fehler: ".mysql_error());
    $row = mysql_fetch_assoc($result);



if (mysql_num_rows($result)) {
            echo "Stimmt!Du bekommst einen weiteren Punkt." ;
               	  }
           else{
                echo "Hm,musst dich mehr anstrengen,wenn du Punkte haben willst.";
         } 

?>
</body>
</html>

Der soll überprüfen ob $con dem $deutsch entspricht...

Was macht er?
Wenn ich das richtige eingebe gibt er false zurück&wenn ich was falsches oder nix eingebe kommt true raus...is wohl ma grad falsch herum...
 
Naja, es hängt noch so ein bisschen an der Gesamt-Logik

1) Du vergleichst ja nirgendwo, ob das eingegebene Wort gleich dem Englischen ist, sondern guckst nur, ob das eingegebene Wort in der Datenbank steht. Das heisst der Schüler schreibt einfach ein Wort rein, was in der DB steht und bekommt Punkte. Das ist ja nicht der Sinn eines Tests.

2) Du vergleichst immer noch mit LIKE. Wenn dann sollte der Schüler die Vokabeln doch schon genau eingeben und nicht nur ungefähr (also einen Teil davon). Soll der Schüler also "tutorial" eingeben, gibt aber nur "tor" ein wird das trotzdem als richtig gezählt. Das ist ja auch nicht so das Wahre.

3) Die Prüfung ob die Vokabel richtig ist, passiert momentan noch unterhalb (also nach) dem Formular. Die Punkte sollen ja aber richtig angezeigt werden. Deshalb sollte die Auswertung besser überhalb des Formulars stehen.

4) Die Punkte werden momentan ja auch noch nicht gezählt.

Ich würds also mal so machen:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Examen I</title>
</head>

<body>
<?php

include('config.php');

if (isset($_POST['submit'])) {

	$punkte = $_POST['punkte'];
	$con = $_POST['con'];

	$sql = "SELECT Deutsch FROM Vokabeln WHERE Englisch = '$con'";
	$result = mysql_query($sql) or die("Fehler: ".mysql_error());
	$row = mysql_fetch_assoc($result);

	if (mysql_num_rows($result) && $row['Deutsch']==$_POST['deutsch']) {
		echo "Stimmt! Du bekommst einen weiteren Punkt.";
		$punkte++;
    } else{
		echo "Hm, musst dich mehr anstrengen, wenn du Punkte haben willst.";
    } 

} else {
	$punkte = 0;
}


srand((double)microtime()*1000000);
$zahl = rand(1,50);

$sql = "SELECT Deutsch FROM Vokabeln WHERE ID = '$zahl'";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($result);

$deutsch=$row[0]; //und nicht $sql[0], sorry.
unset($sql);

?>

<form method="post">
   <table>
	    <tr><td>Vorgabe:</td><td><?php echo $deutsch; ?><input type="hidden" name="deutsch" value="<?php echo $deutsch; ?>" /></td></tr>
		<td>&Uuml;bersetzung:</td><td><input type="text" name="con" /></td></tr>
		<tr><td>&nbsp;</td></tr>
		<tr><td><input type="submit" name="submit" value="Kontrollieren" /></td>
		<td><label>Score:</label></td><td>&nbsp;</td><td><?php echo $punkte; ?><input type="hidden" name="punkte" value="<?php echo $punkte; ?>" /></td></tr>
	</table>
</form>

</body>
</html>

Ich hab jetzt keine Datenbank, um das zu testen, also verzeih mir wenns noch nicht 100%ig läuft ;)

Die beiden hidden-Felder sind da, um nach dem Seitenaufruf noch auf das deutsche Wort, bzw. den alten Punktestand zuzugreifen.

Gruß
 
Zuletzt bearbeitet:
Ya,jetzt funktioniert es ziemlich gut!

Eine Frage noch,wie kann ich die Variable $points nach dem verändern in einer Datenbank speichern,die dann auch noch aktualisiert werden soll,also der User von diesem gespeicherten Wert aus weiter punkten kann&wieder speichern...
 
Hui, naja, das ist ein bisschen komplizierter. Zum alleinigen Speichern kannst du genauso, wie du die Selects machst ja auch nen Insert machen. Brauchst dann halt nur ne seperate Tabelle für die Punkte. Zu dem Punkten must du dann irgendwas speichern, das den Schüler identifiziert. Ne ID, Name, vielleicht reicht auch schon nen Passwort an der Stelle.
Und wenn der Schüler was übersetzen will muss er sich natürlich irgendwie ausweisen gegenüber dem System. Also seine ID eingeben, seinen Namen oder sein Passwort.
 
Ich möchte das so machen:

Tabelle:

ID | Nick(Name) | Score(random) | Score(quiz) | Gesamtscore (also die beiden scores davor zusammen gerechnet)
 
Bei random erfolgt die Abfrage für Punkte zufällig aber bei Quiz kann der Besucher es sich geordnet abfragen lassen....beide haben seperat Punkte zum sammeln die gespeichert werden sollen.
 
Hmm.. OK.... dann bräuchte die Tabelle ja auch noch eine Spalte, in der festgehalten wird, welches das letzte Wort beim Quiz war, damit beim nächsten Mal an der Stelle weitergemacht werden kann.

Die Gesamtspalte würde ich weglassen, da man die besser on-the-fly berechnen kann.

Wie soll der Schüler sich einloggen? Nekommt er Benutzername und Passwort (dann bräuchstes du noch eine Passwort-Spalte in der Tabelle) oder meldet er sich nur mit dem Namen an (dann könnte sich auch Hans als Jürgen anmelden)?

Gibts für falsche Vokabeln auch Minuspunkte?

Todo:
  • Ein Formular, in dem sich der Schüler anmelden kann. Wenn mit Passwort, dann noch eine Überprüfung, ob das Passwort stimmt und erst dann Weiterleitung zur eigentlichen Vokabelseite.
  • Eine Seite wo der Schüler wählt ob er Random oder Quiz machen will (vielleicht auch direkt im Anmeldeformular auswählbar ->Radiobutton).
  • Neben der Überprüfung, ob die Vokabel richtig ist auch einen UPDATE-Befehl, damit die Punkte erhöht (oder auch verringert?) werden.
  • Eine Unterscheidung beim Vokabeln Auswählen aus der Datenbank. Bisher wird ja nur Random rausgenommen. Bei Quiz-Mode müsstest du das anders auswählen.

Viel Spaß beim Basteln ;)
 
Zurück