Bedeutung von <<<FORM

Alles, was PHP betrifft, kann hier besprochen werden.

Bedeutung von <<<FORM

Postby KleinEchse » 03. June 2009 07:52

Hallo ich mal wieder :D
Bin mal wieder an einer Übung in einen Buch zum stolpern gekommen. Problem konnte ich bereits lösen aber es blieben doch einige Fragen offen auf die ich bissher nirgendwo eine Antwort gefunden habe.
Also Folgendes Problem bestand:

Code: Select all
<html>
<head>
    <title>RegexTest</title>
</head>
<?php
$expression = isset($_POST['expression']) ? $_POST['expression']:'';
$pattern = isset($_POST['pattern']) ? $_POST['pattern'] : '';
      echo <<<FORM
         <form action="{$_SERVER['PHP_SELF']}" method="post">
           <table>
               <tr>
                   <td>Ausdruck</td>
                   <td><input type="text" name="expression"
                                    value="$expression"/></td>
               </tr><tr>
                   <td>Muster</td>
                   <td><input type="text" name="pattern"
                                    value="$pattern"/></td>
               </tr><tr>
                   <td></td>
                   <td><input type="submit" value="Test"/></td>
               </tr>
           </table>
       </form>
   FORM;
   if (!empty($expression))
    {
        if (preg_match_all("~$pattern~", $expression, $result))
        {
            echo "Das Muster ist im Ausdruck gefunden worden.<p/>";
            if (count($result) > 0)
            {
                echo "Folgende Teilmuster gefunden:<br/>";
                foreach ($result as $key => $val)
                {
                    echo "<br/>Gruppe $key :<br/>";
                    if (is_array($val))
                    {
                        foreach ($val as $subkey => $subval)
                        {
                            echo "&nbsp;&nbsp;&nbsp;Teilgruppe
                            $subkey => $subval";
                        }
                    } else {
                        echo "$val<br/>";
                    }
                }
            }
        } else {
            echo "Keine Übereinstimmung gefunden";
        }
    } else {
        echo "Kein Muster angegeben.";
    }
?>
</body>
</html>


Nun bestand das Problem das mir mein Xampp und mein Webspace die ganze Zeit folgendes Problem angezeigt haben

Parse error: syntax error, unexpected $end in /users/exo/www/RegexTest.php on line 60

So wie ich das verstanden hatte fehlte da wohl eine Klammer oder ein Anführungszeichen. Im Editor war der PHP Teil nach der Tabelle auch nicht weiter farbig hervor gehoben. Nach Stundenlangen Recherchieren stieß ich dann auf einen ähnlichen Fall und habe ihn auf meinen Fall angewendet.

Ich habe folgendes am Quellcode geändert:

Code: Select all
echo <<<FORM
    <form action="{$_SERVER['PHP_SELF']}" method="post">

//abgeändert zu:

   echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">

//und zum Schluß der Tabelle habe ich folgendes geändert:

       </form>
   FORM;

//abgeändert zu:

      </form>';


Ich erspare mir an dieser Stelle einmal den gesammten Quellcode zu posten. Bei bedarf hole ich es gerne nach.

Nun aber zu meiner Frage:
Die Übung, so wie sie im Buch beschrieben war, hat nicht Funktioniert. Stammt das aus einer älteren Version von PHP (Lernbuch in PHP5) oder hab ich da was durcheinander gebracht bzw. habe ich dort im ersten Quellcode irgendeinen Fehler übersehen gehabt? Hatte ja wie gesagt stundenlang den Code durchforstet ob ich eine Klammer falsch gesetzt habe oder nicht geschlossen oder ob ich ein Anführungszeichen vergessen hatte.

Vielen Dank für eure Aufmerksamkeit und bis bald
Echse
Last edited by KleinEchse on 03. June 2009 10:55, edited 2 times in total.
KleinEchse
 
Posts: 10
Joined: 31. May 2009 22:59

Re: Bedeutung von <<<FORM

Postby Hanspeter Thöni » 03. June 2009 09:48

das mit dem <<<FORM
FORM;
hat nichts mit dem HTML-Form tag zu tun.

Dies ist eine Möglichkeit, in PHP einen mehrzeiligen String zu notieren. (Heredoc-Syntax)

siehe dazu die Dokumentationhttp://www.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc
Beispiel:
Code: Select all
echo <<<FROM
blablabla
gugus
haha hihi
FORM;


Hier wird also alles zwischen <<<FORM und FORM; mittels Echo ausgegeben. In deinem Beispiel also eine HTML-Ausgabe ausgeben. Der Ende-Tag FORM; muss am Anfang der Zeile stehen.
Du kannst den bezeichner frei wählen, kannst also auch
Code: Select all
echo <<<BLABLA
xxxx ....
BLABLA;

notieren. Es muss nur sichergestellt sein, dass innerhalb des Strings kein unerwünschter Ende-Tag am Anfang einer Zeile steht.
Last edited by Hanspeter Thöni on 03. June 2009 17:51, edited 1 time in total.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Re: Bedeutung von <<<FORM

Postby KleinEchse » 03. June 2009 10:38

Hab grad gesehen das ich den ersten Quellcode nicht 1 zu 1 übertragen habe. Im ersten hatte die Anweisung:

Code: Select all
echo <<<Form
   <form action="{$_SERVER['PHP_SELF']}" method="post">


gefehlt. Habs nachgetragen. ausserdem hab ich es nun alles so eingerückt wie es bei mir im Edito im Quelltext steht.
Trotzdem bleibt mir weiterhin schleierhaft warum es nicht mit echo <<<FORM klappen will??
Wie gesagt ich hab Klammer durchgezählt, hab sie interpretiert wo welche geöffnet wurde und wo sie wieder geschlossen wurde und habe halt geschaut ob ich nirgendwo was vergessen hab. Es bleibt immer beim selben Ergebnis.

Parse error: syntax error, unexpected $end in /users/exo/www/RegexTest.php on line 60

Ich könnte mich zwar damit zufrieden geben das der andere Lösungsweg den ich gefunden habe auch klappt aber irgendwie will es ja schon verstehen. Zumal mich das Gefühl beschleicht das ich doch einen groben Schnitzer im Quelltext hab :(

LG Echse

P.s. @Hanspeter Thöni
Wieso eigentlich <<<FROM? dachte das <<<FORM ist für das Formular gedacht? Nu bin ich verwirrt :?
KleinEchse
 
Posts: 10
Joined: 31. May 2009 22:59

Re: Bedeutung von <<<FORM

Postby Hanspeter Thöni » 03. June 2009 10:53

Das <<<FORM hat der Schreiber deines Beispieles gewählt. Bei der heredoc-Syntax musst du irgendeinen Bezeichner verwenden. Anstelle von FORM hätte man genausogut auch HALLO oder SONSTWAS nehmen können. Das Ende muss einfach gleich heissen wie der Anfang. Im Prinzip sind die <<<FORM und FORM; nichts anderes als Anführungs und Schlusszeichen eines Strings.

Die Ende-Tags werden nur am Anfang der Zeile erkannt, also darf nicht eingerückt sein.

In deinem Beispiel ist das FORM; eingerückt! Damit wird es vom Parser nicht erkannt, und der Rest des Scriptes wird als String betrachtet. Die Folge ist dann die von dir genannte Fehlermeldung. Sorge also dafür, dass das FORM; ganz linksbündig steht.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Re: Bedeutung von <<<FORM

Postby KleinEchse » 03. June 2009 11:05

OMG :shock: Bin ich doof
Wie gesagt ich hab die letzten Stunden das komplette Script so oft durchforstet, auf der suche nach einer nicht geschlossenden Befehlszeile, dass ich das garnicht mitgekriegt hab :shock:
Das stand auch im Buch ein Kapitel weiter vorne das der abschließende TAG ganz linksbündig stehen muss....

Oh Gott ich könnt mich selbst hauen ^^ Naja Dann bedanke ich mich mal ganz artig :roll: (DANKE) und werd euch dann in ein paar Tagen mit dem nächsten Problem nerven. (Ich hoffe es zwar net aber wer weiß ^^)

LG Echse

P.s. daran lags habs grad eingerückt und die obere Befehlszeile zurück geändert und ausprobiert.
KleinEchse
 
Posts: 10
Joined: 31. May 2009 22:59


Return to PHP

Who is online

Users browsing this forum: No registered users and 17 guests