50 Zeilen Code, Fehler in Zeile 77?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
break
code
dank
datei
falsch code
fehler
formular
frage
http
landschaft
post
rand
standard
stein
switch
url
vokabel
zeile
zettel
zufall
-
Guten abend,
Ich habe folgenden PHP Code der so eigentlich erstmal nur zum testen des Grundgerüsts ist:
<?php $zufall = rand(1,5); switch("$zufall") { case (1): $german="Hallo"; $english="hello"; break; case (2): $german="gehen"; $english="go"; break; case (3): $german="Warum?"; $english="why?"; break; case (4): $german="Landschaft"; $english="landscape"; break; case (5): $german="Stein"; $english="stone"; break; } ?> <html> <form action="Vokabeln.php" method="post"></form> <p><?php"$german"?><input type="text" name="Englischübersetzung" size="50" ><input type="submit" name="Button" value="Absenden"><br></p> </form> </html> <?php if($POST_Englischübersetzung=$english) { echo "Das war richtig!"; } else { echo "Da war was falsch!"; } ?>
Wenn ich das ganze aber nun unter http://zettel.lima-city.de/Vokabeln.php aufrufen will erhalte ich die Fehlermeldung:
Parse error: syntax error, unexpected '"' in /home/webpages/lima-city/zettel/html/Vokabeln.php on line 77
Obwohl das Script nur 50 Zeilen lang ist...
Kann mir jemand verraten wo mein Fehler liegt?
Danke
grüße
Zettel
Beitrag zuletzt geändert: 24.10.2010 21:42:24 von zettel -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Keine Ahnung woher die Falsche Ausgabe kommt, aber in wirklichkeit liegt der Fehler in Zeile 37
<?php"$german"?>
Was das machen soll weiß ich nicht, eventuell versuchst du es mal so
mfg<?=$german?>
Beitrag zuletzt geändert: 24.10.2010 21:46:50 von syberpsace -
if($POST_Englischübersetzung=$english)
Wahrscheinlich noch ein Fehler..
Richtig wäre es wahrscheinlich
if($_POST["Englischübersetzung"] == $english)
Beitrag zuletzt geändert: 25.10.2010 21:04:24 von win32b -
Stimmt, bei Fehler 1 hatte ich irgendwie etwas übersehen, da musste noch ein "echo" vor, danke
Punkt 2 dachte ich das meine Variante richtig wäre, habe jetzt aber mal deins übernommen und dazu noch ausgelagert, meien 2 Dateien sehen also so aus:
Vokabeln.php
<?php $zufall = rand(1,5); switch($zufall) { case (1): $german="Hallo"; $english="hello"; break; case (2): $german="gehen"; $english="go"; break; case (3): $german="Warum?"; $english="why?"; break; case (4): $german="Landschaft"; $english="landscape"; break; case (5): $german="Stein"; $english="stone"; break; } ?> <html> <form action="formular.php" method="post"></form> <p><?php echo "$german"; ?><input type="text" name="Englisch" size="50" ><input type="submit" name="Button" value="Absenden"><br></p> </form> </html>
formular.php
<?php if($_POST["Englisch"] == $english) { echo "Das war richtig!"; } else { echo "Da war was falsch!"; } ?>
Inzwischen kann ich das ganzee nun normal aufrufen, jedoch passiert nun beim Absenden des Formulars genau garnichts, nachzulesen unter http://zettel.lima-city.de/Vokabeln.php.
habt ihr dazu eventuell auchnoch eine lösung? :-)
danke
grüße
Beitrag zuletzt geändert: 25.10.2010 16:30:04 von zettel -
win32b schrieb:
Noch einen Fehler mehr, bitte? Jung, junge, junge... Wie soll denn das funktionieren? Wenn wir in den eckigen Klammern Anführungszeichen machen, dann müssen wir die auch irgendwo wieder zu machen. Und die Variable heißt $_POST und nicht $POST.
Wahrscheinlich noch ein Fehler..
Richtig wäre es wahrscheinlich
if($POST["Englischübersetzung] == $english)
-
drafed-map schrieb:
win32b schrieb:
Noch einen Fehler mehr, bitte? Jung, junge, junge... Wie soll denn das funktionieren? Wenn wir in den eckigen Klammern Anführungszeichen machen, dann müssen wir die auch irgendwo wieder zu machen. Und die Variable heißt $_POST und nicht $POST.
Wahrscheinlich noch ein Fehler..
Richtig wäre es wahrscheinlich
if($POST["Englischübersetzung] == $english)
sehr gut, danke, die Anführungszeichen hab ich schon wieder zu gemacht aber ich hatte statt $_POST in meiner ersten Lösung $POST_, danke
Das ist eingefügt, funktioniert aber leider immer noch nicht, bzw. bei mir passiert weiterhin garnix...
grüße -
Schonmal prinzipiell: Du erwartest also, dass immer genau zweimal hintereinander genau der selbe Zufallswert ausgewürfelt wird? Überdenke das doch noch einmal.
-
Nein, das will ich nicht.
Ich will einen Zufallswert abfragen, daraus dann die Variablen "$german" und "$english" bilden, dann soll dazu das jeweils gegenüber per Eingabe in das Formularfeld eingegeben werden und danach will ich überprüfen ob die Eingabe, mit dem richtigen Wert überinstimmt.
grüße
Zettel -
Ich würde mal ein PHP-Tutorial lesen, switch-Anweisungen sehen auch ganz anders aus als bei dir...
Einfach mal auf php.net die Funktionsbeschreibungen durchschauen und ein PHP-Tutorial lesen ;)
Uuh, dein HTML-Code ist ja auch hübsch. Warte, da fehlt doch der Body?
php-einfach.de
http://tut.php-quake.net/de/
php.net
http://de.selfhtml.org/ -
Also nach einem der Tutorials die ich gelesen habe :http://www.schattenbaum.net/php/switch.php ist meine switch-Anweisung nicht falsch aber wenn du mir sagen kannst wo mein Fehler sein sollte dann her damit. Mir ist ebenfalls bewusst wie eine html-Datei aufgebaut ist, da dies aber nur ein kleiner Einschub war dachte ich gehts auch ohne, was ich auch schon einige male gesehen habe...
grüße
Zettel -
telelo schrieb:
php.net/switch
dann lies dir das doch bitte selbst mal durch und SAG mir was ich falsch gemacht hab und schreib mir keinen Link, nach meiner Ansicht sieht das bei mir genauso aus wie da...
grüße -
ich würde es folgendermaßen machen:
<?php $zufall = rand(1,5); switch($zufall) { case 1: $german = 'Hallo'; $english = 'hello'; break; case 2: $german = 'gehen'; $english = 'go'; break; case 3: $german = 'Warum?'; $english = 'why?'; break; case 4: $german = 'Landschaft'; $english = 'landscape'; break; case 5: $german = 'Stein'; $english = 'stone'; break; } ?> <html> <form action="formular.php" method="post"> <p> <?php echo "$german"; ?> <input type="text" name="englisch" size="50" > <input type="submit" name="Button" value="Absenden"> <input type="hidden" name="loesung" value="<?php echo $english; ?>"> <br> </p> </form> </html>
und formular.php:
<?php if($_POST['englisch'] == $_POST['loesung']) { echo 'Das war richtig!'; } else { echo 'Da war was falsch!'; } ?>
Anmerkungen:
-> $english wird in einem versteckten input-Feld (loesung) übertragen
-> bei case (1) usw. sind die Klammern überflüssig, aber könnten dir später Probleme bereiten
-> ich denke mal, telelo bezog sich auf deinen Ausgangstext, wo du noch switch("$zufall") stehen hattest
-> gewöhne dich bitte daran, bei php ' zu benutzen, und bei html ", das kann dir später einige Fehler verhindern und ist soweit ich weiß gängiger, außerdem tut das meinem Auge nicht so weh
-> was sollte eig. das </form> direkt hinter der Formular-Öffnung?
-> um deinen eigenen Code besser überschauen zu können, solltest du whitespaces (Leerzeichen, Zeilenumbrüche in diesem Fall) sinnvoll einsetzen, also im Prinzip bei php: zwischen {} werden alle Zeilen um zwei/vier Leerzeichen am Anfang ergänzt, nach einem Befehl kommt ein Zeilenumbruch.
Bei html: zwischen <tag> und </tag> (sofern </tag> vorhanden) werden alle Zeilen um zwei/vier Leerzeichen am Anfang ergänzt, nach allem, das Zusammenhängt (ein Text, ein tag) kommt ein Zeilenumbruch.
Javascript in etwa so, wie php.
Kleine Anmerkung noch: wenn ein Element bei html zu viele oder zu lange Eigenschaften bekommt, würde ich auch diese untereinander schreiben, also:
<ELEMENT type="text" name="inhalt" value="DER INHALT" onclick="if(this.value == '') this.value = 'DER INHALT; else this.value = '';"> ... </ELEMENT>
Wenn du in deinem Code nur eine solche Frage hast, dann würde ich persönlich in diesem Fall eine Javascript-Methode zur Ausgabe vorziehen, also in etwa so (nur html-Bereich):
<html> <form name="englischdeutsch"> <p> <?php echo "$german"; ?> <input type="text" name="englisch" size="50" > <input type="button" name="Button" value="Absenden" onclick="if(englischdeutsch.loesung.value == englischdeutsch.englisch.value) // Richtige Lösung { alert('Die Lösung ist richtig!'); document.reload(); } else { alert('Die Lösung ist falsch, bitte Versuchen Sie es noch einmal!'); }"> <input type="hidden" name="loesung" value="<?php echo $english; ?>"> <br> </p> </form> </html>
Das hätte auch noch den Vorteil, dass man jemanden zwingen kann, die Lösung so oft zu probieren, bis er es schafft, ohne die Vokabel immer zu ändern.
Falls die Vokabel immer gewechselt werden soll, einfach hinter alert('Die Lösung ist falsch, bitte Versuchen Sie es noch einmal!'); noch ein document.reload(); setzen.
Ich bin mir nicht ganz sicher, ob document.reload(); funktioniert, sonst einfach:
<html> <form name="englischdeutsch" action="VERWEIST AUF SICH SELBST" method="POST"> <p> <?php echo "$german"; ?> <input type="text" name="englisch" size="50" > <input type="button" name="Button" value="Absenden" onclick="if(englischdeutsch.loesung.value == englischdeutsch.englisch.value) // Richtige Lösung { alert('Die Lösung ist richtig!'); englischdeutsch.submit(); } else { alert('Die Lösung ist falsch, bitte Versuchen Sie es noch einmal!'); }"> <input type="hidden" name="loesung" value="<?php echo $english; ?>"> <br> </p> </form> </html>
ich hoffe, du wirst dir meine Anmerkungen merken, und es hat dir weitergeholfen.
PS: bei javascript solltest du auch wie bei php einfache Anführungszeichen benutzen!
Beitrag zuletzt geändert: 27.10.2010 0:20:47 von ole-reglitzki -
yo mey!
und ohne irgendein schnick-schnack (javascript [mag ja nicht ein jeder], &c.) und doch in nur eine datei (weil für sowas minimales 2 einfach nicht nötig sind) und schließlich ohne wildes-hin-und-her-schalten zwischen php und html (ist einfach unübersichtlich):
das tut genau und einfach nur das, was du beschrieben hast.<?php error_reporting (E_ALL); $zufall = rand(1,5); switch("$zufall") { case (1): $german="Hallo"; $english="hello"; break; case (2): $german="gehen"; $english="go"; break; case (3): $german="Warum?"; $english="why?"; break; case (4): $german="Landschaft"; $english="landscape"; break; case (5): $german="Stein"; $english="stone"; break; } echo <<< EOT <html> <!-- <form action="Vokabeln.php" method="post"> --> <form action="{$_SERVER['PHP_SELF']}" method="post"> <p>$german <input type="text" name="english" size="50" /><br /> <input type="hidden" name="random" value="$english" /> <input type="submit" name="action" value="send" /> </p> </form> </html> EOT; if ( isset ($_POST['action']) ) { if ( $_POST['english'] === $_POST['random'] ) { echo "Das war richtig!"; } else { echo "Da war was falsch!"; } } ?>
lg
joseph -
czibere schrieb: yo mey!
und ohne irgendein schnick-schnack (javascript [mag ja nicht ein jeder], &c.) und doch in nur eine datei (weil für sowas minimales 2 einfach nicht nötig sind) und schließlich ohne wildes-hin-und-her-schalten zwischen php und html (ist einfach unübersichtlich):
das tut genau und einfach nur das, was du beschrieben hast.<?php error_reporting (E_ALL); $zufall = rand(1,5); switch("$zufall") { case (1): $german="Hallo"; $english="hello"; break; case (2): $german="gehen"; $english="go"; break; case (3): $german="Warum?"; $english="why?"; break; case (4): $german="Landschaft"; $english="landscape"; break; case (5): $german="Stein"; $english="stone"; break; } echo <<< EOT <html> <!-- <form action="Vokabeln.php" method="post"> --> <form action="{$_SERVER['PHP_SELF']}" method="post"> <p>$german <input type="text" name="english" size="50" /><br /> <input type="hidden" name="random" value="$english" /> <input type="submit" name="action" value="send" /> </p> </form> </html> EOT; if ( isset ($_POST['action']) ) { if ( $_POST['english'] === $_POST['random'] ) { echo "Das war richtig!"; } else { echo "Da war was falsch!"; } } ?>
lg
joseph
hier ist aber wieder die falsche Schreibweise mit switch reingeflossen...
Und wozu war der Error-Report gut?
Dein Code müsste "richtig" heißen:
<?php $zufall = rand(1,5); switch($zufall) { case 1: $german = 'Hallo'; $english = 'hello'; break; case 2: $german = 'gehen'; $english = 'go'; break; case 3: $german = 'Warum?'; $english = 'why?'; break; case 4: $german = 'Landschaft'; $english = 'landscape'; break; case 5: $german = 'Stein'; $english = 'stone'; break; } echo <<< EOT <html> <!-- FORMULAR_MIT_VERWEIS_AUF_SICH_SELBST --> <form action="{$_SERVER['PHP_SELF']}" method="post"> <p>$german <input type="text" name="english" size="50" /><br /> <input type="hidden" name="random" value="$english" /> <input type="submit" name="action" value="send" /> </p> </form> </html> EOT; if ( isset ($_POST['action']) ) { if ( $_POST['english'] === $_POST['random'] ) { echo "Das war richtig!"; } else { echo "Da war was falsch!"; } } ?>
-
Ich bedanke mich für diese super Antworten und werde heute abend, sobald ich etwas mehr zeit habe dazu auch noch ein bisschen mehr schreiben :-)
grüße
Zettel -
@ole-reglitzki
...hier ist aber wieder die falsche Schreibweise mit ... Dein Code müsste "richtig" heißen
hast du den ausprobiert? er funzt! ein richtiger code tut das ;o)
Und wozu war der Error-Report gut?
diese frage ist nicht dein ernst!? ist doch, dann nerve hir die leute nicht, die php programmieren, sondern fange an mit basic unter cp/m.
lg
joseph
-
@czibere:
...hier ist aber wieder die falsche Schreibweise mit ... Dein Code müsste "richtig" heißen
hast du den ausprobiert? er funzt! ein richtiger code tut das ;o)
hab ihn nicht ausprobiert, aber s. unten...
Da er ja anscheinend funktioniert, wenn ich dir mal glauben darf, waren lediglich die ausdrücke 'falsch' und 'richtig' ein wenig zu stark, dann sollten sie durch 'relativ unsauber' und 'etwas gesäubert' ersetzt werden. sorry dafür!
Und wozu war der Error-Report gut?
diese frage ist nicht dein ernst!? ist doch, dann nerve hir die leute nicht, die php programmieren, sondern fange an mit basic unter cp/m.
Die Frage war anders gemeint: Weshalb sollte er ihn einbauen (wollen)?
Und sonst noch: warum so beibringen, dass es seine Arbeit (später) erleichtern kann (siehe meine Anmerkungen in vorletztem Post), wenn es auch anders geht (siehe dein Code, bitte bei php ' nutzen, erhöht die Lebenszeit von Php-Scriptern, die bei solchen Scripts immer ihren Frust durch eine Zigarette abbauen müssen )? -
Wenn ihr schon an der Code-Formatierung feilt, dann aber bitte richtig:
[...] if (isset ($_POST['action'])) { if ($_POST['english'] == $_POST['random']) { echo 'Das war richtig!'; } else { echo 'Da war was falsch!'; } }
- Keine Lücken in den Klammern der Sprachkonstrukte
- === nur, wenn explizit benötigt
- " nur, wenn explizit benötigt.
- ?> nie, außer mit HTML interpoliert
Zudem sollte die Switch-Anweisung eher ein Array sein und die Ausgabe eher ein Template. -
@nikic
Wenn ihr schon an der Code-Formatierung feilt, ...
yo mey! google: 'php "coding standards" '. ja da kommen natürlich ein paar seiten zurück (207.000), mit so vielen unterschidlichen standards wie seiten (zend-, drupal-, ... &c. standards und weißt der kukuck ...)
ich bin dafür:
1. man sollte in der lage sein sich an ein team anzupassen
2. man sollte einen eigenen klaren stil haben
3. man sollte sich an php.net orientieren
lg
joseph -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage