fritz: unexpected T_VARIABLE

Hallo Zusammen,

ich bin totaler PHP Neuling und möchte eine Eingabe in PHP übergeben:
nach etwas googeln habe ich folgendes Beispiel gefunden:

  
<form action="form2.php" method="POST">  
<input type="text" size="17" name="Inhalt">  
<input type="submit" value="OK">  
</form>  

und dann in form2:

  
<?php  
echo $_POST["Inhalt"];  
?>  

bekomme aber dann die Fehlermeldung:
Parse error: syntax error, unexpected T_VARIABLE in /home/www/form2.php on line 1

was mach ich da falsch?

Danke für Euere Hilfe

Fritz

  1. Tach!

    Parse error: syntax error, unexpected T_VARIABLE in /home/www/form2.php on line 1
    was mach ich da falsch?

    Du hast einen Syntaxfehler in deinem Code. In dem von dir hier gezeigten ist allerdings keiner.

    dedlfix.

    1. Tach!

      Parse error: syntax error, unexpected T_VARIABLE in /home/www/form2.php on line 1
      was mach ich da falsch?

      Du hast einen Syntaxfehler in deinem Code. In dem von dir hier gezeigten ist allerdings keiner.

      dedlfix.

      Danke für die schnelle Antwort,

      steht aber genauso drin??

      Gruß

      Fritz

      1. Tach!

        Du hast einen Syntaxfehler in deinem Code. In dem von dir hier gezeigten ist allerdings keiner.
        steht aber genauso drin??

        Diese Frage kann ich dir nicht beantworten. Hast du denn die Datei auch genauso auf dem Server?

        dedlfix.

        1. Tach!

          Du hast einen Syntaxfehler in deinem Code. In dem von dir hier gezeigten ist allerdings keiner.
          steht aber genauso drin??

          Diese Frage kann ich dir nicht beantworten. Hast du denn die Datei auch genauso auf dem Server?

          dedlfix.

          Ja!!

          1. Tach!

            Hast du denn die Datei auch genauso auf dem Server?
            Ja!!

            Nun, dann lügt die Meldung. Normalerweise hat der Computer aber immer Recht.

            Der Code ist ja überschaubar klein. Lösch mal die Datei vom Server. Das muss dann beim Aufrufen einen 404er Fehler geben, als Zeichen dafür, dass sie wirklich weg ist. Und dann erstell sie neu und leg sie nochmal auf dem Server ab.

            dedlfix.

            1. Tach!

              Hast du denn die Datei auch genauso auf dem Server?
              Ja!!

              Nun, dann lügt die Meldung. Normalerweise hat der Computer aber immer Recht.

              Der Code ist ja überschaubar klein. Lösch mal die Datei vom Server. Das muss dann beim Aufrufen einen 404er Fehler geben, als Zeichen dafür, dass sie wirklich weg ist. Und dann erstell sie neu und leg sie nochmal auf dem Server ab.

              dedlfix.

              hallo dedlfix,

              danke für den tipp,
              hab ich so gemacht, Datei gelöscht, lokal nochmal geöffnet und überprüft, dann wieder auf den Server.

              Selber Fehler.

              Kann den sein, dass ich gar nicht posten darf?

              Gruß

              Fritz

              1. Om nah hoo pez nyeetz, fritz!

                Wenn du mal deine Beiträge mit den Antworten vergleichst, stellst du fest, das niemand das komplette Posting vorher zitiert hat. Bitte vermeide Vollzitate. Sie stören nur den Lesefluss. Danke.

                Matthias

                --
                Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Pi und Pionier.

              2. Tach!

                Der Code ist ja überschaubar klein. Lösch mal die Datei vom Server. Das muss dann beim Aufrufen einen 404er Fehler geben, als Zeichen dafür, dass sie wirklich weg ist. Und dann erstell sie neu und leg sie nochmal auf dem Server ab.
                hab ich so gemacht, Datei gelöscht, lokal nochmal geöffnet und überprüft, dann wieder auf den Server.
                Selber Fehler.

                Hast du auch den 404er gesehen, nachdem du die Datei gelöscht hast? Wenn der nämlich nicht kommt, hast du nicht die richtige Datei erwischt. Ich habe momentan keine andere Idee als dass du eine Datei an eine Stelle hochlädst, aber eine von einer anderen Stelle ausgeliefert wird.

                Kann den sein, dass ich gar nicht posten darf?

                Das ergäbe eine HTTP-Fehlermeldung und keinen Syntaxfehler in PHP.

                dedlfix.

  2. Hallo Zusammen,

    Parse error: syntax error, unexpected T_VARIABLE in /home/www/form2.php on line 1

    Guck Dir Zeile 1 an. Steht da eine BOM vielleicht?

    MfG

    1. Hallo Zusammen,

      Parse error: syntax error, unexpected T_VARIABLE in /home/www/form2.php on line 1

      Guck Dir Zeile 1 an. Steht da eine BOM vielleicht?

      MfG

      Hallo hotti,

      was ist eine BOM?

      der ganze Code ist

        
      <?php  
      echo $_POST["Inhalt"];  
      ?>  
      
      

      Gruß

      Fritz

      1. Hallo Zusammen,
        Hallo hotti,

        was ist eine BOM?

        Die Byte Order Mark und die wird von modernen Editoren gewöhnlich ausgeblendet. Editoren bieten jedoch die Möglichkeit, beim Speichern einer Textdatei mit UTF-8-Kodierung, anzugeben, ob die Datei mit oder ohne BOM gespeichert werden soll. Guck Dir das mal an, ansonsten könntest Du über derartige Probleme öfter stolpern. In Fakt: UTF-8 ist ok, aber ohne BOM speichern.

        Schöne Grüße.

        1. Tach!

          Die Byte Order Mark und die wird von modernen Editoren gewöhnlich ausgeblendet. Editoren bieten jedoch die Möglichkeit, beim Speichern einer Textdatei mit UTF-8-Kodierung, anzugeben, ob die Datei mit oder ohne BOM gespeichert werden soll. Guck Dir das mal an, ansonsten könntest Du über derartige Probleme öfter stolpern. In Fakt: UTF-8 ist ok, aber ohne BOM speichern.

          Wenn die UTF-8-BOM korrekt platziert ist, dann steht sie als die ersten drei Bytes im Dokument und damit steht sie vor dem <?php. Sie kann so nicht für den Syntaxfehler im PHP-Teil verantwortlich sein. Das vorliegende Problem kann sein, dass andere Whitespace-Zeichen an Stellen gestanden haben, an denen Leerzeichen hätten stehen sollen. Das hätte auch eine falsch platzierte BOM sein können. Die Frage ist aber, ob Editoren solche nicht am Anfang stehenden BOMs entfernen oder nicht, wenn für den eigentlichen Zweck nur die am Anfang relevant ist.

          Der Tipp, ohne BOM zu speichern, hilft für andere Fälle. Ausgaben inklusive BOMs, die vor einem <?php stehen, verhindern das Senden von HTTP-Headern. Die Fehlermeldung dazu ist aber eine andere als ein PHP-Syntax-Fehler.

          dedlfix.

          1. Hallo,

            Wenn die UTF-8-BOM korrekt platziert ist, dann steht sie als die ersten drei Bytes im Dokument und damit steht sie vor dem <?php. Sie kann so nicht für den Syntaxfehler im PHP-Teil verantwortlich sein.

            korrekt.

            Das vorliegende Problem kann sein, dass andere Whitespace-Zeichen an Stellen gestanden haben, an denen Leerzeichen hätten stehen sollen. Das hätte auch eine falsch platzierte BOM sein können.

            How so? Die Meldung "Unexpected T_VARIABLE" besagt, dass der PHP-Interpreter ein $-Zeichen gefolgt von einem gültigen Bezeichner für eine Variable gefunden hat, das aber an einer Stelle, wo dieses Token nicht hätte vorkommen dürfen. Es wäre also IMO immer noch spannend zu wissen, was die vermeintliche PHP-Datei von fritz wirklich enthielt. Aber das werden wir wohl nicht mehr herausfinden.

            Er schrieb ja, dass er das aus einem HTML-Dokument im Browser herauskopiert habe. Klar, da kommen alle möglichen Formen von Whitespace in Frage, aber die würden für PHP nicht wie eine Variable aussehen.

            Der Tipp, ohne BOM zu speichern, hilft für andere Fälle. Ausgaben inklusive BOMs, die vor einem <?php stehen, verhindern das Senden von HTTP-Headern. Die Fehlermeldung dazu ist aber eine andere als ein PHP-Syntax-Fehler.

            Ja, stimmt.

            Ciao,
             Martin

            --
            Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
            Heißes Wasser kann man immer gebrauchen.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Tach!

              Das vorliegende Problem kann sein, dass andere Whitespace-Zeichen an Stellen gestanden haben, an denen Leerzeichen hätten stehen sollen. Das hätte auch eine falsch platzierte BOM sein können.
              How so? Die Meldung "Unexpected T_VARIABLE" besagt, dass der PHP-Interpreter ein $-Zeichen gefolgt von einem gültigen Bezeichner für eine Variable gefunden hat, das aber an einer Stelle, wo dieses Token nicht hätte vorkommen dürfen. Es wäre also IMO immer noch spannend zu wissen, was die vermeintliche PHP-Datei von fritz wirklich enthielt. Aber das werden wir wohl nicht mehr herausfinden.

              Das schien mir bisher die plausibelste Vermutung zu sein. Weil du daran gezweifelt hast, hab ich das mal probiert. Ein NBSP zwischen <?php und echo führt dazu, dass PHP das <?php nicht mehr erkennt und den ganzen Code zur Ausgabe bringt (siehe Quelltextansicht des Browsers, denn der denkt sich am < begänne ein Tag, das man nicht ausgeben sondern interpretieren soll).

              Ein NBSP zwischen echo und $variable bringt die vorliegende Fehlermeldung.

              Er schrieb ja, dass er das aus einem HTML-Dokument im Browser herauskopiert habe. Klar, da kommen alle möglichen Formen von Whitespace in Frage, aber die würden für PHP nicht wie eine Variable aussehen.

              Richtig. Das NBSP verlängert sozusagen das echo, so dass es kein Schlüsselwort mehr ist, sondern wie beispielsweise ein Funktionsname oder eine Konstante aussieht. Dann kommt da die Variable und es sieht am Ende wie bezeichner$variable aus, und das ist ab dem $ keine gültige Syntax mehr. An der Stelle darf keine Variable vorkommen, da hat das PHP Recht.

              Der Regex für Funktionsnamen und Konstanten ist [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* und das NBSP ist \xA0 oder \xC2\xA0, passt also in den Bereich \x7F bis \xFF und wird somit zum Bestandteil des Namens.

              dedlfix.

              1. Hi,

                Er schrieb ja, dass er das aus einem HTML-Dokument im Browser herauskopiert habe. Klar, da kommen alle möglichen Formen von Whitespace in Frage, aber die würden für PHP nicht wie eine Variable aussehen.
                Richtig. Das NBSP verlängert sozusagen das echo, so dass es kein Schlüsselwort mehr ist, sondern wie beispielsweise ein Funktionsname oder eine Konstante aussieht. Dann kommt da die Variable und es sieht am Ende wie bezeichner$variable aus, und das ist ab dem $ keine gültige Syntax mehr. An der Stelle darf keine Variable vorkommen, da hat das PHP Recht.

                _das_ wäre eine Möglichkeit, ja. Gut konstruiert.

                Ciao,
                 Martin

                --
                Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Lieber fritz,

    und dann in form2:

    <?php

    echo $_POST["Inhalt"];
    ?>

    
    > Parse error: syntax error, unexpected T\_VARIABLE in /home/www/form2.php on line 1  
      
    der Fehler soll also in Zeile 1 stehen. Da steht "<?php" und ein Zeilenumbruch. Keine Variable egal welcher Art. Warum nicht? Ist Dein Beispiel anders als der Code in der Datei auf dem Server? Kann man das einmal live und in Farbe anschauen (URL bitte)?  
      
    Eine andere Frage: Wie sind bei Dir Zeilenenden [technisch umgesetzt](https://de.wikipedia.org/wiki/Wagenr%C3%BCcklauf#Zeichencodierung_und_Eingabe)? Ist da ASCII-Code 13 oder ASCII-Code 10 oder beides (\0xd\0xa) und PHP versteht die Zeilenenden einfach nicht (weshalb die Zeilenzählung scheitert)?  
      
    Verwendest Du als Zeichenkodierung UTF? Vielleicht mit BOM ([Byte Order Mark](https://de.wikipedia.org/wiki/Byte_Order_Mark))? In welchem Texteditor bearbeitest Du Deine Code-Dateien, damit man Dir sagen kann, wo Du BOM (Du solltest schon UTF-8 nutzen, aber besser ohne BOM!) und Zeilenenden einstellen kannst?  
      
    Liebe Grüße,  
      
    Felix Riesterer.
    
    -- 
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    
    1. Hallo Felix,

      Ich hab da so ein Freeware-Programm "Website Builder 4" mit dem ich das geschrieben habe.

      Die URL = www.optik-raab.de/form1.php bzw. form2.php

      ich habe jetzt aus dem 3 Zeiler einen Einzeiler gemacht und jetzt geht's

        
      <?php echo $_POST["Inhalt"]; ?>  
      
      

      Vielleicht kommt es daher, weil ich den Code einfach aus einer Webseite rauskopiert habe?

      Gruß

      Fritz

      1. Lieber fritz,

        Ich hab da so ein Freeware-Programm "Website Builder 4" mit dem ich das geschrieben habe.

        aha. Und konntest Du dort eine Einstellung zur verwendeten Zeichenkodierung finden? Wahrscheinlich im Menü "Format"...

        Die URL = www.optik-raab.de/form1.php bzw. form2.php

        OK. Das Script form2.php liefert ein leeres Dokument an den Browser zurück, was nicht weiter verwundert. Verwundern tut mich der HTTP-Statuscode (200 OK), der bei einer PHP-Fehlermeldung wie der von Dir beschriebenen zu einem "500 Internal Server Error" führen sollte. Sehr verdächtig das.

        Stellt sich mir die nächste Frage: Wie hast Du die Script-Datei auf den Server übertragen? Innerhalb Websitebuilder oder mit einem FTP-Programm? Wenn mit letzterem, im ASCII-Modus oder im Binärmodus?

        ich habe jetzt aus dem 3 Zeiler einen Einzeiler gemacht und jetzt geht's

        <?php echo $_POST["Inhalt"]; ?>

        Das _darf_ _nicht_ die "Lösung" sein!

        Vielleicht kommt es daher, weil ich den Code einfach aus einer Webseite rauskopiert habe?

        Auch das _darf_ _nicht_ der Grund sein. Es muss auch mit dem ursprünglichen Code von Dir funktionieren! Aber nun wundert mich der HTTP-Statuscode (200 OK) nicht mehr so sehr. Nun führt der direkte Aufruf von form2.php nur noch zu einem PHP-Warning (weil ich ja keinen POST-Parameter "Inhalt" übertragen habe) und nicht mehr zu einem internen Serverfehler, wie es Syntaxfehler in aller Regel tun.

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
        1. Danke an alle,

          es lag scheinbar doch am reinkopieren aus der Webseite.

          ich habe jetzt aus dem Einzeiler wieder mit Enter einen 3-Zeiler gemacht und es geht immer noch.

          Vielen Dank nochmal

          Grüße

          Fritz