Seite 1 von 1

brauche kleine hilfe für ein latein-script

Verfasst: 03.12.2006 15:01
von langeweile
ich bin gerade dabei eine seite für meinen lateinkurs zu schreiben, bei dem einem das lateinische wort anzeiget wird und man muss darunter nun die bedeutung in ein feld schreiben (zitirformen und so kommen später erst). die lateinischen wörter stehen in einer datenbank, mit folgenden spalten: (die tabelle heißt vokabeln)
- id
- latein
- deutsch

was in den tabellen ist, kann man sich ja wohl anhand der namen denken.
aber hier ist jetzt erstmal der code, ich will nur erstmal fragen, ob das so alles gehen würde, oder ob da n fehler drin ist

Code: Alles auswählen

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=post> 
Latein:
<?php
include ("dbconnect.php");
$id = rand(1,100); //die 100 muss durch die anzahl der lateinvokabeln ersetzt werden
SELECT latein FROM Vokabeln WHERE id='$id';
echo "$latein";
SELECT deutsch FROM Vokabeln WHERE latein='$latein';
?>
<br>
Deutsch:
<input type="text" size="50" maxlength="80" name="user_deutsch"> //user_deutsch ist die eingabe des nutzers
</FORM>
<?php
$deutsch = $_POST ['deutsch'];
if($user­_deutsch == $row['deutsch']) 
{
//den code hier erstelle ich erst, wenn ich sicher bin, dass es bis hier hin schon mal richtig ist
}
else
{
//auch hier kommt erstmal noch kein code hin
}
?>

Verfasst: 03.12.2006 15:56
von deathcakeman
also ich komm mit dem (um es mal gut "auszudrücken") mit diesem codeähnlichen dings überhaupt nicht zurecht...

da kann ja überhaupt nix funktionieren

Verfasst: 03.12.2006 15:57
von gn#36
Sowas kann man eigentlich einfach ausprobieren, wenn man das auf seinem PC zuhause tut. Da wird man schon merken wenn's nicht funktioniert. Wenn dann noch ein Editor mit Syntax Highlighter dazukommt ist alles perfekt.
Ansonsten würde ich mir glaube ich diese Stelle noch mal ansehen:

Code: Alles auswählen

$deutsch = $_POST ['deutsch'];
if($user­_deutsch == $row['deutsch']) 
Die Variable $user_deutsch gibt es bis dahin noch nicht.
Außerdem geht dein Skript davon aus, dass es immer gleich von Anfang an eine Eingabe bekommt.
Du hast außerdem einen kleinen Denkfehler darin:
Du sendest immer zunächst eine vollständige Seite zum User. Dort kann dieser dann seine Eingaben machen und sendet seine Eingaben per POST dann an das Skript. Dieses läuft aber nicht etwa so wie du es angenommen hast an der Stelle weiter, die nach dem Formular kommt sondern wird komplett neu gestartet.
--> Der Teil des Skripts nach dem Formular wird abgearbeitet selbst wenn überhaupt noch keine Eingabe erfolgte.
--> Jede Eingabe wird mit einer zufälligen Vokabel aus der Datenbank verglichen, im allgemeinen ist die Eingabe also falsch.

Um diese Fehler zu beheben müsstest du
1. den Zweiten Teil des Skripts nur ausführen wenn auch tatsächlich Daten geschickt wurden
2. Informationen über die zu prüfende Vokabel mitschicken (z.B. die ID in einem hidden field), so dass die Eingabe auch mit der tatsächlichen Vokabel verglichen werden kann.

Ach so hätte ich beinahe vergessen: Die SQL Abfragen werden so nicht funktionieren! du musst diese Abfragen an die entsprechenden SQL Funktionen übergeben (wenn du mysql benutzt z.B. mysql_query()), du musst auch die passenden Funktionen zur Ergebnisabfrage verwenden.

Verfasst: 03.12.2006 16:03
von langeweile
stimmt danke, ich überarbeite das "codeähnliche ding" nochmal und sende es euch dann erneut

Verfasst: 03.12.2006 16:40
von langeweile
vielen dank gn#36, ich habe mal versucht das zu machen, was du gesagt hast und habe 2 dateien erstellt, einmal latein.php (diese datei ist die startdatei) und latein2.php (dort wird dann geprüft, ob die vokabel richtig abgefragt wurde)
das script ist natürlich noch extrem vereinfacht aber das ist ja nur das grundgerüst und wenn das dann klappt mache ich weiter
sry schon mal im vorraus wegen der vielen fehler, aber durch fehler lernt man, somit würde ich diese wahrscheinlich nicht nochmal machen, aber hier erstmal der code

code von latein.php

Code: Alles auswählen

<?php
include ("dbconnect.php");
$id = rand(1,1); //die 100 muss durch die anzahl der lateinvokabeln ersetzt werden
$sql_update = "SELECT latein FROM Vokabeln WHERE id='$id'";
$sql_update_now = mysql_query($sql_update);
$latein = $row['latein'];
echo "Latein: $latein";
$sql_update2 = "SELECT deutsch FROM Vokabeln WHERE latein='$latein'";
$sql_update_now2 = mysql_query($sql_update2);
$deutsch = $row['deutsch'];
?>
<br>
Deutsch:
<form action="latein2.php" method=post>
<input type="text" size="50" maxlength="80" name="user_deutsch">
<input type="hidden" size="50" maxlength="90" name="latein" value="$latein">
<input type="hidden" size="50" maxlength="90" name="deutsch" value="$deutsch">
<input type="submit" value="Absenden">
</form>

code von latein2.php

Code: Alles auswählen

<?php
include ("dbconnect.php");
$latein = $_POST['latein'];
$deutsch = $_POST['deutsch'];
$user_deutsch = $_POST ['user_deutsch'];
if($user­_deutsch == $row['deutsch'])
{
echo "richtig";
}
else
{
echo "falsch";
}
?>


das script funktioniert noch nicht richtig, erstens wird keine lateinvokabel angezeigt und wenn man auf absenden klickt, kommt die fehlermeldung

Code: Alles auswählen

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/web12/html/latein/latein2.php on line 2

Parse error: parse error, unexpected T_STRING in /var/www/web12/html/latein/latein2.php on line 2

ich habe das script mal auf eine domain geladen, die ich nicht mehr brauche, damit ihr euch das mal angucken könnt
Link

Verfasst: 03.12.2006 17:56
von gn#36
Schon mal nicht schlecht. Allerdings hätte ich doch ein paar Anmerkungen:

- Es ist eventuell ungünstig, wenn du die richtige Lösung mit in den Quellcode schreibst. Auch wenn man sich damit hier in diesem Fall selbst schadet wenn man es nachschaut wäre es denke ich besser wenn du stattdessen die ID mitschickst und dann anhand dieser das Ergebnis überprüfst.

- Nach diesen Zeilen fehlt noch die Anweisung, in $row das Ergebnis der abfrage einzutragen, also $row = mysql_fetch_assoc($sql_update_now);:

Code: Alles auswählen

$sql_update = "SELECT latein FROM Vokabeln WHERE id='$id'";
$sql_update_now = mysql_query($sql_update); 
Daher kann er gar nichts anzeigen, denn es steht in der Variable noch nicht drin. Wichtig ist auch dass du bei den Feldnamen auf groß und kleinschreibung achtest, die Feldnamen sind case-sensitive. (Ob das richtig oder falsch so ist wie es ist hängt von der Tabelle ab die du in deiner db hast)

- Die Daten in $latein und $deutsch werden nicht in das Formular eingetragen, da da keine echo Anweisung ist, d.h. da wird als String $latein und $deutsch stehen.

- Die Fehlermeldung weiß ich auch nicht wo die herkommen soll, könnte aber evtl. ein Fehler in der Datenbankverbindungsdatei sein, korrigier erst mal den rest, vielleicht erledigt sich das dann von allein.

Verfasst: 03.12.2006 18:31
von langeweile
ich habe den code jetzt mal son umgeschrieben, jetzt wird auch alles anzeigt, aber die fehlermeldung kommt immer noch:

Fehlermeldung:

Code: Alles auswählen

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/web12/html/lateinisch/latein2.php on line 2

Parse error: parse error, unexpected T_STRING in /var/www/web12/html/lateinisch/latein2.php on line 2

Code von latein.php

Code: Alles auswählen

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=post>
</form>
<?php
include ("dbconnect.php");
$id = rand(1,1); //die 100 muss durch die anzahl der lateinvokabeln ersetzt werden
$sql_update = "SELECT latein FROM Vokabeln WHERE id='$id'";
$sql_update_now = mysql_query($sql_update);
$row = mysql_fetch_assoc($sql_update_now);
$latein = $row['latein'];
echo "Latein: $latein";
$sql_update2 = "SELECT deutsch FROM Vokabeln WHERE latein='$latein'";
$sql_update_now2 = mysql_query($sql_update2);
$row = mysql_fetch_assoc($sql_update_now2);
$deutsch = $row['deutsch'];
?>
<br>
Deutsch:
<form action="latein2.php" method=post>
<input type="text" size="50" maxlength="90" name="<?php echo "user_deutsch" ?>">
<input type="hidden" size="50" maxlength="90" name="latein" value="<?php echo "$latein" ?>">
<input type="hidden" size="50" maxlength="90" name="deutsch" value="<?php echo "$deutsch" ?>">
<input type="submit" value="Absenden">
</form>


den datenbankzugang und die daten dbconnect.php hab ich dir per pn geschickt, wenn du dir das mal angucken willst

Verfasst: 03.12.2006 19:17
von langeweile
ich habs, aus mir unbekannten gründen hat mein ftp programm die datei nicht richtig hochgeladen