poison: Fehler bei PHP T_STRING

Hallo Zusammen,

habe mich jetzt (halbwegs) erfolgreich durch PHP gekämpft und wollte nun ein eigenes Script für meine Seite verfassen.

Ich bastle an einem Online-Adventure, bei dem meine Besucher an Abenteuern teilnehmen und Rätsel lösen können. Für Rätsel gibt es Punkte oder Galleonen.
(Ja, es geht um Harry Potter.)

Bis jetzt sieht das Konzept so aus, dass man bei der Teilnahme an einem Rätsel usw. immer per Kontaktformular die Lösung an mich senden muss und ich trage dann die Punkte oder Galleonen in eine Liste (Online) ein. Mit PHP und SQL oder einer Datei wäre das natürlich einfacher.

Folgendes habe ich mir mal zusammengeschrieben. Da ich absoluter Anfänger bin und nicht gleich alles falsch mache, habe ich mich an Beispiele von der Seite einfach-php orientiert, auf der ich mich über PHP schlau gemacht habe. Hier mal das Script:

  
<?php  
$benutzername=$_POST["benutzername"];  
$passwort=$_POST["passwort"];  
  
if($passwort=="Harry Potter")  
{  
$verbindung=mysql_connect("localhost","Vesta","vesta")  
or die("Keine Verbindung möglich. Benutzername oder Passwort falsch");  
  
mysql_select_db("homepage")  
or die ("Die Datenbank existiert nicht");  
  
$abfrage="SELECT bilderraetsel FROM rustleoaks WHERE username LIKE 'Vesta';  
$ergebnis=mysql_query($abfrage);  
while ($row=mysql_fetch_object($ergebnis))  
  
   if($row->bilderraetsel!=1)  
   {  
   $aendern="UPDATE rustleoaks Set bilderraetsel='1' WHERE username LIKE 'Vesta'";  
   $update=mysql_query($aendern);  
  
   $aendern="UPDATE rustleoaks Set galleonen='wert+3' WHERE username LIKE 'Vesta'";  
   $update=mysql_query($aendern);  
   mysql_close($verbindung);  
  
   echo "Das ist korrekt.";  
   echo "Du erhälst 3 Galleonen.";  
   }  
   else  
   {  
   echo "Du hast das Rätsel bereits gelöst";  
   }  
}  
else  
{  
echo "Tut mir leid";  
echo "Die Lösung ist nicht korrekt";  
}  
?>  

Natürlich funktioniert es nicht bzw. ich stecke schon bei der Zeile 19 fest, da folgenden Fehler angezeigt bekomme:

Parse error: syntax error, unexpected T_STRING on line 19

Im Forum von einfach-php habe ich meine Frage bereits gestellt und mir wurde gesagt, php könnte mit der Eingabe "bilderrätsel='1'" nichts anfangen. Außerdem wäre die Eingabe "galleonen='wert+3' falsch und die while-Schleife fehl am Platz.
Leider wurde mir nicht gesagt, wie ich das Script umschreiben müsste, damit es funzt.

Wie könnte ich es denn zum laufen bringen?

Für Anregungen, Tipps und Hilfestellungen wäre ich echt dankbar.
Vielleicht geht das, was ich vorhabe ja auch gar nicht.

Liebe Grüße
Poison

  1. Moin,

    habe mich jetzt (halbwegs) erfolgreich durch PHP gekämpft ...

    So!?

    Im Forum von einfach-php habe ich meine Frage bereits gestellt und mir wurde gesagt, php könnte mit der Eingabe "bilderrätsel='1'" nichts anfangen. Außerdem wäre die Eingabe "galleonen='wert+3' falsch und die while-Schleife fehl am Platz.
    Leider wurde mir nicht gesagt, wie ich das Script umschreiben müsste, damit es funzt.

    Wie könnte ich es denn zum laufen bringen?

    Weiterhin erfolgreich, nicht halbwegs durch PHP kämpfen. Stichwort: Kontrollstrukturen.

    Viele Grüße,
    schönen Sonntag,
    Horst Hacke

  2. Hi!

    $benutzername=$_POST["benutzername"];
    $passwort=$_POST["passwort"];

    Egal, wie häufig man dieses Umkopieren sieht, es ist und bleibt Unfug. Es erhöht nur die Komplexität des Script durch neue Variablen und verschleiert deren Herkunft.

    $verbindung=mysql_connect("localhost","Vesta","vesta")
    or die("Keine Verbindung möglich. Benutzername oder Passwort falsch");

    or die() ist auch keine angemessene Fehlermeldung. Schau mal mit den Augen eines deiner Besucher, was passiert, wenn die Datenbankverbindung nicht zustande kommt. Er bekommt die Meldung "Benutzername oder Passwort falsch" - als Antwort auf ein Formular, in das er einen Benutzernamen und ein Passwort eintragen soll. Außer dieser Verwirrung ist es keine Art, ein Script einfach sterben zu lassen, wenn ein Fehler auftritt. Besser ist es, Scripte so zu strukturieren, dass sie auch bei Fehlern ordentlich bis zu ihrem Ende durchlaufen und eine vollständige HTML-Seite als Ergebnis liefern. Abhängigkeiten (von Fehlern und anderen Bedingungen) löst man mit Kontrollstrukturen (if-else).

    Parse error: syntax error, unexpected T_STRING on line 19

    Du öffnest einen String und schließt ihn nicht. In Zeile 19 folgt ein weiteres ", das aus deiner Sicht einen Stringanfang darstellt, das jedoch PHP als das Ende des nicht geschlossenen Strings ansieht. Der aus deiner Sicht Stringinhalt ergibt aus PHP-Sicht ungültigen Code.

    Lo!

  3. Hallo,

    nach viel Knobelei ist es endlich geschafft.
    Mein Script funktioniert:

      
    <?php  
    $benutzername=$_POST['benutzername'];  
    $passwort=$_POST['passwort'];  
      
      
    if($passwort=="Harry Potter")  
    {  
      
    $verbindung = mysql_connect('localhost', 'Vesta', 'vesta');  
    mysql_select_db("homepage");  
      
    $abfrage = "SELECT bilderraetsel, galleonen FROM rustleoaks WHERE benutzername LIKE '$benutzername'";  
    $ergebnis = mysql_query($abfrage);  
    while($row = mysql_fetch_object($ergebnis))  
      
    if($row->bilderraetsel == 0)  
    {  
      
    $aendern = "UPDATE rustleoaks Set  
    bilderraetsel=1 WHERE benutzername LIKE '$benutzername'";  
    $update = mysql_query($aendern);  
      
    $aendern = "UPDATE rustleoaks Set  
    galleonen=galleonen+3 WHERE benutzername LIKE '$benutzername'";  
    $update = mysql_query($aendern);  
      
    echo "Das ist korrekt";  
    }  
    else  
    {  
    echo "Du hast das Rätsel schon gemacht!";  
    }  
    }  
    else  
    {  
    echo "Das ist nicht korrekt!";  
    }  
    ?>  
    
    

    Das ist mal nur die Rohform. Schönheitskorrekturen was die Ausgabe (echo) betrifft sowie die Sache mit der Verschlüsselung des Passwortes oder besser Lösungswortes (das Script ist ja für ein Rätsel) müssen noch gemacht werden.

    Jetzt habe ich aber weitere Fragen dazu bzw. zu den Login-Scripten, die man im Netz findet.

    1. Um die Datenbank zu öffnen, muss man ja immer den Servernamen, das Passwort und den Benutzernamen angeben. Auf meinem lokalen Server zum üben und in den vielen Beispielen, sind diese Daten für jeden ersichtlich. Wenn ich das ganze in meiner Homepage nun Online stelle, muss ich solche Eingaben ja aber verschlüsseln.

    Wie genau mache ich das? Mit MD5?
    Ich habe zu diesem Thema schon knapp zwei Stunden "gegoogelt" und habe nichts brauchbares gefunden. Vielleicht habe ich auch die falschen Suchkriterien eingegeben.

    2. Wenn meine Besucher das Formular zum Lösen des Rätsels verwenden, sollen sie nicht noch einmal ihren Benutzernamen eingeben müssen. Das Script sollte mit dem Benutzernamen der Session arbeiten, d.h. die Abfrage der Variablen $benutzername sollte entfallen.

    Muss ich dazu einfach $benutzername durch $_SESSION['benutzername'] ersetzen?

    Wäre echt dankbar für eine weitere Erleuchtung.

    Liebe Grüße
    Poison

    1. Hi!

      Wäre echt dankbar für eine weitere Erleuchtung.

      Bitte verteile dein Problem nicht auf mehrere Threads. Das schadet am Ende nur dir selbst, wenn du die Kraft der Antwortenden verteilst statt bündelst. Siehe http://forum.de.selfhtml.org/hilfe/charta.htm#keine-doppelpostings. Also mach lieber bei deinem anderen Posting weiter, wo du das Thema der Verschlüsslung schon zu besprechen angefangen hast.

      Lo!