Griever: Apache-Fehlermeldung? Was bedeutet das?

Hi:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in H:\Server\xampp\htdocs\K1\__database__.php on line 20

Diese Fehlermeldung bekam ich bei folgendem Ablauf gegen den Kopf geworfen. Die Zeile, in der dieser Fehler auftritt, ist markiert.

(Einige stellen sind via XXX versteckt ... eigentlich klar ...)

  
<?  
if(@mysql_connect("XXXXXXXXX","XXXXXXXXX","XXXXXXXXX"))  
{  
  echo "Anwählen der MySql-Datenbank erfolgreich.<br>";  
  if(@mysql_select_db("eventcal"))  
  {  
    echo "Datenbank auswählen erfolgreich.<br>";  
    $sql = 'CREATE TABLE `userlogs` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  `username` VARCHAR(255) NOT NULL,  `userpass` VARCHAR(25) NOT NULL DEFAULT \'XXXXXXXXX\' ) ENGINE = myisam;';  
    if(!mysql_query($sql))  
    {  
      echo "Tabelle userlogs erstellen fehlgeschlagen.<br>";  
      echo "Vorgang abgebrochen!<br>";  
    }  
    else  
    {  
      echo "Tabelle userlogs erstellen erfolgreich.<br>";  
      $names = array("Brand","Stein","Ciechoradzki","Scharf","Krähe","Kinsky","Kraul","Siebenbrodt","Rummel","Kleemeier","Geißenhöner","Hentschel","Lange","Lehmann","Schilm","Lubitz");  
      for($o=0;$o<sizeof($names);$o++)  
      {  
        $echo "Versuch, " . $names[$o] . " einzugragen.<br>"; // Hier trat der Fehler auf  
        $sql = "INSERT INTO 'userlogs' ('userid', 'nam', 'pas') VALUES (NULL, '" . $names[$o] . "', 'XXXXXXXXX');";if(@mysql_query($sql))echo "Eintragen von $nm[$o] erfolgreich.<br>";  
      }  
    }  
  }  
  else  
  {  
    echo "Zugriff auf Datenbank fehlgeschlagen.<br>Vorgang abgebrochen!<br>";  
  }  
  mysql_close();  
}  
else  
{  
  echo "Zugriff auf Datenbank fehlgeschlagen!<br>Vorgang abgebrochen!<br>";  
}  
?>  

Nun möchte ich 2 Fragen stellen:

1. Was bedeutet diese Fehlermeldung?

2. Warum macht er mir die Einträge nicht rein, nachdem er die Datenbank erstellt hat? (es sollen die $names eingetragen werden.)

Freue mich über jede Hilfe.

MFG
Griever

  1. Hallo Griever,

    $echo "Versuch, " . $names[$o] . " einzugragen.<br>"; // Hier trat der Fehler auf

    dollar-echo statt echo

    Gruß,

    Dieter

  2. hi,

    was soll denn "Apache Fehlermeldung" im Threadtitel heißen?

    Es handelt sich um einen simplen Parse Error - und es ist schon ziemlich traurig, dass der "Programmierer" diesen mal wieder nicht sleber zu finden in der Lage ist.

    $echo "Versuch, " . $names[$o] . " einzugragen.<br>"; // Hier trat der Fehler auf

    DOLLARecho ...?
    Nicht mal mit dem Syntaxhighlighting hier fällt dir ein Unterschied zu den echos in vorherigen Zeilen auf ...?

    1. Was bedeutet diese Fehlermeldung?

    Nach dem Variablennamen $echo erfolgte kein Zuweisungsoperator o.ä. sondern der String "Versuch, " - daran kann PHP wenig Sinn erkennen.

    1. Warum macht er mir die Einträge nicht rein, nachdem er die Datenbank erstellt hat? (es sollen die $names eingetragen werden.)

    Möchtest du diese Frage bei einem Script, welches wegen Parse Errors noch gar nicht ausgeführt werden konnte, ernsthaft stellen?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. echo $begrüßung;

      1. Warum macht er mir die Einträge nicht rein, nachdem er die Datenbank erstellt hat? (es sollen die $names eingetragen werden.)

      Möchtest du diese Frage bei einem Script, welches wegen Parse Errors noch gar nicht ausgeführt werden konnte, ernsthaft stellen?

      Ich kann darin den Ernst erkennen. Diese Zeile ist vermutlich ein missglückter Versuch gewesen, eine Kontrollausgabe einzufügen, eben weil das zweite Problem aufgetreten ist.

      echo "$verabschiedung $name";

      1. hi,

        Ich kann darin den Ernst erkennen. Diese Zeile ist vermutlich ein missglückter Versuch gewesen, eine Kontrollausgabe einzufügen, eben weil das zweite Problem aufgetreten ist.

        Hmkay, das leuchtet ein.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. echo $begrüßung;

    1. Warum macht er mir die Einträge nicht rein, nachdem er die Datenbank erstellt hat? (es sollen die $names eingetragen werden.)

    Wenn eine MySQL-Funktion einen Fehler feststellt ist das Rückgabeergebnis meist false. Dies prüfst du ja schon. Was du aber nicht machst, ist dir die zugehörige Fehlermeldung anzeigen zu lassen. Frage diese mit mysql_error() ab, und du wirst einen Syntaxfehler im INSERT-Statement angezeigt bekommen, weil du einen Bezeichner als String notiert hast.

    echo "$verabschiedung $name";

    1. Hi,

      echo $begrüßung;

      in diesem Fall sollte es lauten:

      $echo begrüßung;

      Cheatah, SCNR

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi.

        Naja. Diesen Fehler habe ich echt nicht mehr gesehen. Gestern war ich schon ganze 11 stunden damit beschäftigt und heute saß ich gleich um 7 Uhr wieder dran.

        Aber das will man mal außen vor lassen, wie lange ich geschuftet habe.
        Erwähnen will ich hierbei noch, dass ich das erste mal so intensiv mit MySql arbeite (Dieser Snipet ist dazu gedacht, die neu erstellten Tabellen und Spalten in der Zieldatenbank nachzutragen.).

        Nun habe ich gleich noch eine Frage:

        Ich habe eine Tabelle in MySql:

        id     | username (char(250)) | userpass (char(25)) | haschanged (bool)
        _______|______________________|_____________________|_______________________
               |                      |                     |
        1      | Bernd                | advstart            | 0
        2      | Udo                  | meinpass            | 0
        3      | Heinrich             | dasistmeinpasswort  | 0
        usw ...

        Nun möchte ich, via SQL-Befehl, einfach eine Abfrage starten. Z. B. wird via Formular ein Benutzername eingegeben und ein Passwort eingegeben.
        Die Funktion soll mir anhand des Benutzernamens sagen, ob dieser existiert oder nicht. Wenn er existiert, soll er auch gleich als einzigstes den "userpass"-wert zurückgeben.

        Ich habe es schon mit mehreren dingen Probiert. Erfolglos:

        in $_POST['LOG_USER'] steht z. B. Bernd

          
        $sql = 'SELECT `userpass`, `haschanged` FROM `userlogs` WHERE `username` = CONVERT(_utf8 \'' . $_POST['LOG_USER'] . '\' USING latin1) COLLATE latin1_general_ci';  
          $sqlres = mysql_query($sql);  
          if(trim($sqlres) != "")  
          {  
            $sqlres = mysql_fetch_row($sqlres);  
            echo $sqlres[0]."<br>";  
          }  
          else  
          {  
            echo "Kein Benutzer mit diesem Namen in der Datenbank!<br>";  
          }  
        
        

        Doch bei diesem Code bekomme ich keine Antwort. Selbst wenn er was gefunden hätte.

        Vielleicht könnt ihr mir ja helfen.

        MFG
        Griever

        (soll doch mal einer sagen, dass ich keinen Quellcode poste. XD)

        1. hi,

          $sqlres = mysql_query($sql);

          Nutze anschließend mysql_error(), um zu erfahren, ob und was der DB an deinem Statement nicht passte.

          Mache dies bitte _ab jetzt_ _jedes mal_, wenn du eine Query an die DB absetzt.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. yo,

          Nun möchte ich, via SQL-Befehl, einfach eine Abfrage starten. Z. B. wird via Formular ein Benutzername eingegeben und ein Passwort eingegeben.
          Die Funktion soll mir anhand des Benutzernamens sagen, ob dieser existiert oder nicht. Wenn er existiert, soll er auch gleich als einzigstes den "userpass"-wert zurückgeben.

          nicht so elegant die lösung, weil du mit einer abfrage klären kannst, ob user und zugehöriges passort stimmen, indem du in der WHERE klausel noch mit dem passwort vergleicht und beides mit dem logischen AND verbindest. wenn dann genau ein datensatz zurück kommt mysql_num_rows(), dann war der benutzername und zugehöriges passwort richtig.

          Ilja