treziman: Variablen übergeben - Ausgabe unter HTML

Hallo,

jau...ich bins schon wieder...
Hab diesmal wieder ein Problem, dessen Lösung mir als altem BASIC- und Assembler- Programmierer zwar logisch erscheint - aber real leider nicht unter HTML bzw. PHP funktioniert.
Hier mein jetziges Problem:(als Beispiel wieder die Fussballspieler)

Es gibt derzeit zwei Seiten: 1. spieler.html und 2. spielerdaten.php .
Von der hauptseite.html erreicht man die spieler.html mittels "<a href....".

Der Aufbau der spieler.html ist wie folgt: ganz oben = LABEL, ca. in der Mitte befindet sich links ein Eingabefeld, scrollbar, mit vorgegebenen Suchwörtern. Rechts daneben das Ausgabefeld (Tabellenform) für die anzuzeigenden Suchergebnisse.

Die gesamte untere Hälfte des Bildschirmes besteht aus einer scrollbaren Tabelle mit den einzelnen Spielern und deren Eigenschaften.

Mittels "<select name='suchwort'>", "<option>...", und "<input..." wird über "<form action = 'spielerdaten.php'>" gleichnamige Datei aufgerufen, was auch prima funktioniert.

Die Aufgabe der spielerdaten.php ist nun, anhand des vorgegebenen Suchwortes die Namen der passenden Spieler rauszusuchen und in ein Array zu übertragen. So weit bin ich aber noch nicht. Wie dies zu programmieren ist, hab ich aber vor Augen.
Der augenblickliche Stand für einen Testlauf ist der:
<?php
 $name = $_POST[suchwort];
 echo $name
?>
Wenn ich dies laufen lasse, erscheint also der Inhalt der Variablen $name auf weissem Hintergrund. Heisst, der Testlauf endet hier und funktioniert.
Nun möchte ich aber, dass der Inhalt von $name in dem vorgegebenen Ausgabefeld auf der spieler.html erscheint! Was mache ich also - weils mir logisch erscheint - ich springe mit "header ('location: spieler.html');" wieder zurück zu besagter Datei (was übrigens auch klappt; die Variable $name dürfte sich eigentlich nicht verändern, oder?) und an der Ausgabeposition füge ich ein:
<?php
 echo $name;
 echo "test";
?>
Angezeigt wird nichts! Ich habe schon mit vielen Umstellungen experimentiert, z.B.
<?php
 echo "
  <td> ... usw
?>
Nix!
Allerdings erhalte ich auch keine Fehlermeldung (parse error etc.)

Ich würde mich auch nicht scheuen, die Datei spieler.html in spieler.php umzubenennen und komplett in PHP zu schreiben. Trotzdem würde eine andere Datei aufgerufen, was mir nicht gefällt.

Gibt es eine Möglichkeit, mit "<form action = 'spielerdaten.php'>" statt einer Datei eine Funktion aufzurufen? Etwa so: "<form action = 'funktion'>"? Oder funktioniert $_POST auch rückwärts?

Beispiele zur Lösung meines Problems habe ich leider nicht gefunden. Ich hoffe, hier ist jemand, der mir helfen kann.

Hier vielleicht nochmal der wichtigste Code:
spieler.html:

...
<form action="spielerdaten.php" method="POST">
<select name="suchwort"><option>Wählen Sie ein Suchwort</option>
<option>Linksfuss</option><option>Rechtsfuss></option>...usw
...
</select>
<input type="submit" name="Name" value="Suchen"></input>
</form>
<td valign="top"; style="font-size:12; color:white;">Folgende Spieler entsprechen Ihrer Suche:<br>
<font face="arial" size="2" color="yellow">

//Beginn des problematischen Teils

<?php
 echo $name;
 echo "test";
?>

</font>
</td>
...

  1. Lieber treziman,

    $name = $_POST[suchwort];

    Du verwendest hier eine Konstante namens "suchwort". Das willst Du nicht (reines Syntax-Problem).

    weils mir logisch erscheint - ich springe mit "header ('location: spieler.html');" wieder zurück zu besagter Datei

    Mit dem Header veranlasst Du den Browser, die aktuelle Seite zu verlassen, und eine andere Resource (Seite) anzufordern. Diese andere Resource ist ein simples HTML-Dokument, das vom Server nicht als PHP-Script geparst wird.

    und an der Ausgabeposition füge ich ein:
    <?php
    echo $name;
    echo "test";
    ?>
    Angezeigt wird nichts!

    Moderne Browser interpretieren die Zeichenfolge "<?" als den Beginn eines Kommentares (oder sowas ähnliches). Betrachte den Quellcode im FF! Das Zeugs sollte rosa aussehen.

    Ich würde mich auch nicht scheuen, die Datei spieler.html in spieler.php umzubenennen und komplett in PHP zu schreiben.

    Du kommst der Sache schon deutlich näher. Aber ich würde es noch anders machen.

    1.) HTML-Dokument wird normal ausgeliefert und Besucher schickt Formular ab -> erhält als Zielseite "spielerdaten.php". Immer.
    2.) Wenn wer auf "spielerdaten.php" landet, dann nimmt sich das Script die HTML-Datei als Vorlage und füllt an entsprechenden Stellen eventuell vorhandene Werte ein. Hier lohnt sich besonders der Einsatz von IDs im HTML-Code, um später beim Einfügen der Daten (mittels String-Ersetzungs-Funkionen) leichter vorgehen zu können.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. »»  $name = $_POST[suchwort];

      Du verwendest hier eine Konstante namens "suchwort". Das willst Du nicht (reines Syntax-Problem).

      »» weils mir logisch erscheint - ich springe mit "header ('location: spieler.html');" wieder zurück zu besagter Datei

      Mit dem Header veranlasst Du den Browser, die aktuelle Seite zu verlassen, und eine andere Resource (Seite) anzufordern. Diese andere Resource ist ein simples HTML-Dokument, das vom Server nicht als PHP-Script geparst wird.
      Moderne Browser interpretieren die Zeichenfolge "<?" als den Beginn eines Kommentares (oder sowas ähnliches). Betrachte den Quellcode im FF! Das Zeugs sollte rosa aussehen.

      »» Ich würde mich auch nicht scheuen, die Datei spieler.html in spieler.php umzubenennen und komplett in PHP zu schreiben.

      Du kommst der Sache schon deutlich näher. Aber ich würde es noch anders machen.

      1.) HTML-Dokument wird normal ausgeliefert und Besucher schickt Formular ab -> erhält als Zielseite "spielerdaten.php". Immer.
      2.) Wenn wer auf "spielerdaten.php" landet, dann nimmt sich das Script die HTML-Datei als Vorlage und füllt an entsprechenden Stellen eventuell vorhandene Werte ein. Hier lohnt sich besonders der Einsatz von IDs im HTML-Code, um später beim Einfügen der Daten (mittels String-Ersetzungs-Funkionen) leichter vorgehen zu können.

      Liebe Grüße,

      Felix Riesterer.

      Hallo Felix,

      erstmal dankeschön für Deine Antwort.

      "<?php" findet man aber sehr häufig in Beispielen, in denen HTML- sowie PHP- Code "gemischt" Verwendung findet. Die Seite beginnt mit HTML- Code und irgendwann wird etwas in PHP eingefügt. Hab ich selbst auch schon gemacht und es klappt. Naja, so lange bin ich auch noch nicht dabei um Einzelheiten erkennen zu können.

      Das gesamte Problem lässt sich nach "meiner" Logik nicht lösen. Ich habe mal nach Beispielen gesucht und folgendes gefunden:

      <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>";>

      Interessant wäre zu erfahren, wie 'action="<?php echo $_SERVER['PHP_SELF']; ?>" ' interpretiert wird. Offenbar wird hier keine andere Datei aufgerufen, oder? Könnte ich auf EINER Seite bleiben, wäre mir schon weitergeholfen.

      Deinen Tip mit den IDs usw. werde ich mir aber auch mal näher anschauen.

      Beste Grüsse
      Thorsten

      1. hi $name,

        "<?php" findet man aber sehr häufig in Beispielen, in denen HTML- sowie PHP- Code "gemischt" Verwendung findet. Die Seite beginnt mit HTML- Code und irgendwann wird etwas in PHP eingefügt. Hab ich selbst auch schon gemacht und es klappt. Naja, so lange bin ich auch noch nicht dabei um Einzelheiten erkennen zu können.

        er meinte wohl auch <? sogenannte short open tags, die aber problematisch sein können.

        Das gesamte Problem lässt sich nach "meiner" Logik nicht lösen. Ich habe mal nach Beispielen gesucht und folgendes gefunden:

        <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>";>

        Interessant wäre zu erfahren, wie 'action="<?php echo $_SERVER['PHP_SELF']; ?>" ' interpretiert wird. Offenbar wird hier keine andere Datei aufgerufen, oder? Könnte ich auf EINER Seite bleiben, wäre mir schon weitergeholfen.

        $_SERVER['PHP_SELF'] ist der dateiname des ausführenden skriptes. im form action bedeutet das das sich das script wieder selbst aufruft.

        gruss
        shadow

        --
        Vor dem Parser und auf hoher See sind wir allein in Gottes Hand
        1. Liebe Shadowcrow,

          er meinte wohl auch <? sogenannte short open tags

          nein! Siehe Ekkis Einwand.

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      2. Lieber treziman,

        "<?php" findet man aber sehr häufig in Beispielen, in denen HTML- sowie PHP- Code "gemischt" Verwendung findet.

        das war nicht das Problem. Das Problem war, ob das Ganze in einer Datei mit der Endung .html oder .php steht! Denn viele Webserver interpretieren den PHP-Code nur, wenn die Datei auch die Endung .php hat.

        Eine HTML-Datei wird "uninterpretiert" an den Browser ausgeliefert, sodass der PHP-Code mit an den Browser ausgeliefert wird (er wird ja nicht interpretiert!), was dieser wiederum dann als Kommentar interpretiert und daher nicht anzeigt (im FF sieht man dann im Quellcode der Seite PHP-Code in rosa).

        Das gesamte Problem lässt sich nach "meiner" Logik nicht lösen.

        Richtig. Um ein Script ausführen zu lassen, _muss_ eine Datei mit der Endung .php aufgerufen werden, da der Server sonst PHP-Code nicht interpretiert - es sei denn Du kannst Deinen Webserver so einstellen, dass er auch Dateien mit der Endung .html durch den PHP-Interpreter laufen lässt. Im Archiv dieses Forums findest Du sicherlich Anleitungen zuhauf, wie man das macht - vorausgesetzt, Dein Hoster gestattet Dir solche Einstellungen.

        <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>";>

        Das bedeutet, dass das Formular als Zielseite wieder die identische Scriptdatei aufrufen wird. Suche im Archiv nach "Affenformular" - dann verstehst Du, warum man soetwas machen möchte...

        Offenbar wird hier keine andere Datei aufgerufen, oder?

        Aufgerufen wird hier garnix. Es wird lediglich eine Referenz auf eine http-Resource (sprich eine URL) eingetragen.

        Könnte ich auf EINER Seite bleiben, wäre mir schon weitergeholfen.

        Dann wirst Du gleich eine Datei mit der Endung .php anlegen müssen, die dann eben nicht mehr .html heißt. Aber das wolltest Du zu Anfang erst vermeiden...

        Deinen Tip mit den IDs usw. werde ich mir aber auch mal näher anschauen.

        Das ist erst dann wirklich hilfreich (neben dem Gestalten per CSS), wenn Du eine Datei (mit der Endung .html) als "Vorlage" benutzen willst, damit ein PHP-Script (also eine Datei mit der Endung .php) darin diverse Ergänzungen einträgt. Ich neige inzwischen ganz stark zur Trennung von HTML und PHP. Ich benutze HTML-Dateien nur noch als Vorlagen und reichere mit Hilfe von PHP die Inhalte an (oder entferne Teile daraus).

        So wie ich Inhalt von Darstellung trene (HTML vs. CSS), trenne ich auch Inhalt von Programmlogik (HTML vs. PHP oder HTML vs. JavaScript). Du wirst vielleicht einmal auch diesen Weg gehen, nachdem Du in Sachen PHP immer bewandter wirst...

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo Felix,

          »» "<?php" findet man aber sehr häufig in Beispielen, in denen HTML- sowie PHP- Code "gemischt" Verwendung findet.

          das war nicht das Problem. Das Problem war, ob das Ganze in einer Datei mit der Endung .html oder .php steht! Denn viele Webserver interpretieren den PHP-Code nur, wenn die Datei auch die Endung .php hat.

          Das dachte ich mir schon. Sonst wären die Endungen ja egal.

          »» Könnte ich auf EINER Seite bleiben, wäre mir schon weitergeholfen.

          Dann wirst Du gleich eine Datei mit der Endung .php anlegen müssen, die dann eben nicht mehr .html heißt. Aber das wolltest Du zu Anfang erst vermeiden...

          Vermeiden wollte ich eigentlich nur die Verwendung ZWEIER Dateien. Wenns nur eine Datei ist und diese statt "spieler.html" nun "spieler.php" heisst  ist egal. Unter PHP kann ich ja trotzdem HTML-Code ausführen (ECHO "html-code...).
          Mit "<form action='spieler.php' method='POST'>" ruft man ja diese zweite Datei auf.
          Kann man "<form action..." im Zusammenhang mit "<select name='suchwort'>" und "<input type='submit'>" (statt 'submit' kann auch etwas anderes stehen) nicht einfach weglassen? Mit "<form action..." ruft man ja nur eine Seite auf, weiter nichts. Natürlich hiesse die ganze Seite dann "spieler.php".
          Dann wäre das Problem schon gelöst.

          Das ist erst dann wirklich hilfreich (neben dem Gestalten per CSS), wenn Du eine Datei (mit der Endung .html) als "Vorlage" benutzen willst, damit ein PHP-Script (also eine Datei mit der Endung .php) darin diverse Ergänzungen einträgt. Ich neige inzwischen ganz stark zur Trennung von HTML und PHP. Ich benutze HTML-Dateien nur noch als Vorlagen und reichere mit Hilfe von PHP die Inhalte an (oder entferne Teile daraus).

          Falls man zwei Dateien verwenden MUSS, vielleicht kannst Du mir noch einen Tip geben, wie man dies macht, also HTML-Dateien als Vorlage benutzen und Ergänzungen durch PHP-Scripte einfügen.

          Die fertige Geschichte soll am Ende so aussehen:
          HTML- (oder PHP-) Seite wird aufgebaut
          Untere Bildschirmhälfte = scrollbare Tabelle mit allen Spielern und deren Eigenschaften.
          Über dieser Tabelle: links = Suchanfrage eingeben (dropdown; vorgegebene Suchwörter)
          Rechts daneben: Ausgabefeld; Ausgabe der Namen aller Spieler, auf die das Suchwort zutrifft, in Form eines Links.
          Klick auf diesen Link-Namen = Sprung in der Tabelle darunter zu diesem Spieler (ähnlich wie hier bei SELFHTML, wenn man auf einen Buchstaben klickt und die Seite zu diesem Buchstaben "springt").

          Letzteres ist aber nicht zwingend, müsste aber machbar sein.

          Liebe Grüsse
          Thorsten

          1. Vermeiden wollte ich eigentlich nur die Verwendung ZWEIER Dateien. Wenns nur eine Datei ist und diese statt "spieler.html" nun "spieler.php" heisst  ist egal. Unter PHP kann ich ja trotzdem HTML-Code ausführen (ECHO "html-code...).
            Mit "<form action='spieler.php' method='POST'>" ruft man ja diese zweite Datei auf.
            Kann man "<form action..." im Zusammenhang mit "<select name='suchwort'>" und "<input type='submit'>" (statt 'submit' kann auch etwas anderes stehen) nicht einfach weglassen? Mit "<form action..." ruft man ja nur eine Seite auf, weiter nichts. Natürlich hiesse die ganze Seite dann "spieler.php".

            Du solltest dir mal genau anschauen, wie eine Webanwendung funktioniert - was ein Formular macht - wozu PHP und HTML dient. Dir fehlen noch einige Grundlegenden Kenntnise.

            Struppi.

          2. Lieber treziman,

            Kann man "<form action..." im Zusammenhang mit "<select name='suchwort'>" und "<input type='submit'>" (statt 'submit' kann auch etwas anderes stehen) nicht einfach weglassen? Mit "<form action..." ruft man ja nur eine Seite auf, weiter nichts. Natürlich hiesse die ganze Seite dann "spieler.php".

            Du hast nicht wirklich verstanden, was ich Dir geschrieben habe. Vielleicht schaust Du geschwind in <http://de.selfhtml.org/html/formulare/definieren.htm#bereich@title=SELFHTML zu Formularen> nach. Dort steht auch, was es mit dem action-Attribut auf sich hat. Und wenn Du das hast, dann liest Du am besten gleich auch noch über http://de.selfhtml.org/html/formulare/formularbuttons.htm#herkoemmlich@title=Formularbuttons nach.

            Und nein, mit action="irgendwas" ruft man überhaupt nichts auf!

            Falls man zwei Dateien verwenden MUSS, vielleicht kannst Du mir noch einen Tip geben, wie man dies macht, also HTML-Dateien als Vorlage benutzen und Ergänzungen durch PHP-Scripte einfügen.

            Man muss nicht zwei Dateien verwenden. Du kannst in "spieler.php" einen Mix aus HTML und PHP verwenden. Ich habe gelernt, dass mich das bei umfangreicheren Projekten ziemlich in Schwierigkeiten bringt, weil sich Markup und Programmlogik nicht mehr sauber trennen lassen. Daher bin ich inzwischen dazu übergegangen mit Templates (Vorlagen) zu arbeiten. In einem Archiv-Posting habe ich das zum Thema Affenformular näher ausgeführt.

            Untere Bildschirmhälfte = scrollbare Tabelle mit allen Spielern und deren Eigenschaften.

            Warum eine "scrollbare Tabelle"? Warum nicht einfach und simpel eine Tabelle? Es bietet der Browser bei längeren Seiten automatisch Scrollbars an - warum das nicht nutzen?

            Über dieser Tabelle: links = Suchanfrage eingeben (dropdown; vorgegebene Suchwörter)

            Du willst also keine Volltext-Suche ermöglichen, in die man wirklich etwas eintippen könnte?

            Rechts daneben: Ausgabefeld; Ausgabe der Namen aller Spieler, auf die das Suchwort zutrifft, in Form eines Links.

            Das ist nur dann möglich, wenn bereits eine Suchabfrage gestartet wurde. Was machst Du, wenn jemand die Seite frisch aufgerufen hat, ohne eine Abfrage abgesandt zu haben? Ja, das kann man im Script abfangen.

            Klick auf diesen Link-Namen = Sprung in der Tabelle darunter zu diesem Spieler (ähnlich wie hier bei SELFHTML, wenn man auf einen Buchstaben klickt und die Seite zu diesem Buchstaben "springt").

            Du sprichst von Verweisen zu Ankern. Auch das kann man in SELFHTML http://de.selfhtml.org/html/verweise/projektintern.htm#anker@title=nachlesen. Man benutzt heute übrigens besser nicht mehr das name-Attribut, sondern vergibt eine ID. Vorteil: Eine ID muss einmalig sein, ein Name dagegen nicht...

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Hallo Felix,

              Warum eine "scrollbare Tabelle"? Warum nicht einfach und simpel eine Tabelle? Es bietet der Browser bei längeren Seiten automatisch Scrollbars an - warum das nicht nutzen?

              Weil dann die angezeigten Suchergebnisse beim Scrollen mit nach oben verschwinden würden und dann ein Besucher, will er sich den nächsten Spieler ansehen, erst wieder selbst scrollen muss.

              »» Über dieser Tabelle: links = Suchanfrage eingeben (dropdown; vorgegebene Suchwörter)

              Du willst also keine Volltext-Suche ermöglichen, in die man wirklich etwas eintippen könnte?

              Die Eingabe erfolgt ja per Mausklick auf eines der vorgegeben Suchwörter. Manuell soll man nichts eingeben können, um unsinnige Anfragen zu verhindern.

              »» Rechts daneben: Ausgabefeld; Ausgabe der Namen aller Spieler, auf die das Suchwort zutrifft, in Form eines Links.

              Das ist nur dann möglich, wenn bereits eine Suchabfrage gestartet wurde. Was machst Du, wenn jemand die Seite frisch aufgerufen hat, ohne eine Abfrage abgesandt zu haben? Ja, das kann man im Script abfangen.

              »» Klick auf diesen Link-Namen = Sprung in der Tabelle darunter zu diesem Spieler (ähnlich wie hier bei SELFHTML, wenn man auf einen Buchstaben klickt und die Seite zu diesem Buchstaben "springt").

              Du sprichst von Verweisen zu Ankern. Auch das kann man in SELFHTML http://de.selfhtml.org/html/verweise/projektintern.htm#anker@title=nachlesen. Man benutzt heute übrigens besser nicht mehr das name-Attribut, sondern vergibt eine ID. Vorteil: Eine ID muss einmalig sein, ein Name dagegen nicht...

              Die Lösung des gesamten Problems ist aber denkbar einfach! Die Datei "spieler.html" wird in "spieler.php" umbenannt, und an besagter Stelle im Programm ..."<form action='spieler.php'...>" ruft sie sich einfach SELBER auf! Als PHP - Anfänger wusste ich nicht, dass dies überhaupt möglich ist. Den entscheidenden Hinweis habe ich in einem anderen Forum bekommen. Somit beginnt die Seite mit einer Abfrage, ob schon eine Suchanfrage gestellt wurde. Wenn ja --> Anzeige der Ergebnisse wie gewünscht, andernfalls Seitenaufbau ohne Ergebnisanzeige.
              Bleibt nur noch die Frage, wie man eine Variable als Verweise zu Ankern definiert. Wenn das geht, komme ich da aber auch hinter. ;-)

              Liebe Grüsse
              Thorsten

              1. Die Lösung des gesamten Problems ist aber denkbar einfach! Die Datei "spieler.html" wird in "spieler.php" umbenannt, und an besagter Stelle im Programm ..."<form action='spieler.php'...>" ruft sie sich einfach SELBER auf! Als PHP - Anfänger wusste ich nicht, dass dies überhaupt möglich ist. Den entscheidenden Hinweis habe ich in einem anderen Forum bekommen.

                Den hattest du auch hier bekommen, nur offensichtlich ignoriert.

                Bleibt nur noch die Frage, wie man eine Variable als Verweise zu Ankern definiert. Wenn das geht, komme ich da aber auch hinter. ;-)

                Genau wie alle anderen Variabeln

                Struppi.

                1. »» Die Lösung des gesamten Problems ist aber denkbar einfach! Die Datei "spieler.html" wird in "spieler.php" umbenannt, und an besagter Stelle im Programm ..."<form action='spieler.php'...>" ruft sie sich einfach SELBER auf! Als PHP - Anfänger wusste ich nicht, dass dies überhaupt möglich ist. Den entscheidenden Hinweis habe ich in einem anderen Forum bekommen.

                  Den hattest du auch hier bekommen, nur offensichtlich ignoriert.

                  »» Bleibt nur noch die Frage, wie man eine Variable als Verweise zu Ankern definiert. Wenn das geht, komme ich da aber auch hinter. ;-)

                  Genau wie alle anderen Variabeln

                  Struppi.

                  Hallo,

                  nein, ignoriert habe ich den Tip nicht, aber nicht verstanden!

                  <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>";>

                  JETZT verstehe ich was Felix mit 'identisch' meint. Manchmal spielen einem die eigenen Überlegungen einen Streich. Ich habe, als Anfänger, darunter verstanden, es wird eine gleiche Datei aber nicht dieselbe aufgerufen. Irritiert hat mich das zitierte und von mir eingebrachte Beispiel "...echo §_SERVER ['PHP_SELF'];... In dem Beispiel, welches ich woanders gefunden habe, steht einfach als Überschrift: "Datei ruft sich selbst auf" und darunter wird weiter aufgeführt: "...action='Name derselben Datei'"... Das ist für mich, eben als Anfänger, klar verständlich. Dort wurde dann auch erklärt, was sich in der Variablen "...PHP_SELF..." befindet.

                  Liebe Grüsse
                  Thorsten

                  1. Lieber treziman,

                    Deine Formulierungen hören sich so an, als hättest Du's noch immer nicht wirklich verstanden, vielleicht ist es aber auch nur meine Korinthenkackerei.

                    In dem Beispiel, welches ich woanders gefunden habe, steht einfach als Überschrift: "Datei ruft sich selbst auf" und darunter wird weiter aufgeführt: "...action='Name derselben Datei'"... Das ist für mich, eben als Anfänger, klar verständlich. Dort wurde dann auch erklärt, was sich in der Variablen "...PHP_SELF..." befindet.

                    Eine Datei "ruft" sich nicht "selbst auf", sondern sie referenziert als Antwortseite sich selbst. So wie Du das immer formuliert hattest, insbesondere vor dem Hintergrund, dass Deine bisherigen Vorerfahrungen sich speziell mit Assembler befasst haben, klingt das missverständlich, oder gar missverstanden. Man meint, dass Du das so verstündest, als ob im aktuellen Scriptverlauf, der die Seite strukturell zusammenbaut, das Script sich erneut aufriefe. Das würde ja zu einer endlosen Rekursion führen und ist natürlich Unsinn. Aber vielleicht ist es tatsächlich nur noch meine Wortklauberei...

                    Liebe Grüße,

                    Felix Riesterer.

                    --
                    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                    1. Lieber treziman,

                      Deine Formulierungen hören sich so an, als hättest Du's noch immer nicht wirklich verstanden, vielleicht ist es aber auch nur meine Korinthenkackerei.

                      »» In dem Beispiel, welches ich woanders gefunden habe, steht einfach als Überschrift: "Datei ruft sich selbst auf" und darunter wird weiter aufgeführt: "...action='Name derselben Datei'"... Das ist für mich, eben als Anfänger, klar verständlich. Dort wurde dann auch erklärt, was sich in der Variablen "...PHP_SELF..." befindet.

                      Eine Datei "ruft" sich nicht "selbst auf", sondern sie referenziert als Antwortseite sich selbst. So wie Du das immer formuliert hattest, insbesondere vor dem Hintergrund, dass Deine bisherigen Vorerfahrungen sich speziell mit Assembler befasst haben, klingt das missverständlich, oder gar missverstanden. Man meint, dass Du das so verstündest, als ob im aktuellen Scriptverlauf, der die Seite strukturell zusammenbaut, das Script sich erneut aufriefe. Das würde ja zu einer endlosen Rekursion führen und ist natürlich Unsinn. Aber vielleicht ist es tatsächlich nur noch meine Wortklauberei...

                      Liebe Grüße,

                      Felix Riesterer.

                      Hallo Felix,

                      Wortklauberei hin oder her, ich verstehe auch PHP als Programmiersprache und vergleiche sie in der Struktur mit BASIC oder Assembler, die ich beide kenne. Dieser Vergleich hilft mir auf jeden Fall, Zusammenhänge zu verstehen. Um bei meinem Beispiel zu bleiben: wenn ich mich auf der Seite "spieler.html" befinde und mittels "<form action='spielerdaten.php'>" und "<input..." zu einer anderen Datei wechsele, verstehe ich darunter einen Aufruf. In anderen Beispielen im Net wird dies übrigens auch so bezeichnet.
                      Wenn mich jemand fragt "Autofahren kann ich ja aber wie steuere ich ein Flugzeug?", dann habe ich zwei Möglichkeiten ihm dies zu erklären. 1. "Durch Nutzung der Steuereinrichtung welche sich vorne befindet. Mit der rechten Hand...usw.". Oder 2. "Indem du den Steuerknüppel benutzt!"

                      Aber egal. Durch Deine Hilfe bin ich jetzt schon sehr weit fortgeschritten! Es gibt nur noch EINE Datei namens "spieler.php". Darin befindet sich nun alles. Ursprünglich hätte die unten liegende scrollbare Tabelle aus 60 Zellen bestanden in der Form

                      SPIELER                     EIGENSCHAFTEN

                      also 2 Zellen liegen nebeneinander, 30 untereinander. Jetzt habe ich unter Zuhilfenahme von PHP das Ganze mit einer While - Schleife realisiert, und - es klappt! Die Angaben für die Tabelle musste ich nur einmal machen (unter reinem html 30 mal). Somit ist die ganze Datei auch erheblich kürzer. Auch das Einbinden eines Spielerfotos mit
                      ...
                      $foto = $spieler [$x] [0] . ".jpg"; // $spieler [][] enthält den Namen
                      echo "<tr><td><img src="$foto" align = "left">";
                      ...
                      hat auf Anhieb geklappt. Ob das vorschriftsmässig programmiert ist, kann ich nicht sagen aber es klappt eben.

                      Nun nehme ich die Sache mit den Ankern in Angriff. Ich habe zwar schon mit "<a href..." gearbeitet, habe damit aber immer eine andere Seite angesprochen. Mit einem Sprung auf derselben Seite und auch noch in einer Tabelle habe ich keine Erfahrung. Spontan würde ich sagen, ich nehme die jeweiligen Fotos als 'Zieladresse'. Mal schauen wie es geht...

                      Liebe Grüsse
                      Thorsten

                      1. Lieber treziman,

                        bitte zitiere sinnvoll. Mein originales Posting am Anfang stört, wenn Du darauf nicht explizit Bezug nimmst. An anderen Stellen konntest Du auch relevante Ausschnitte zitieren - wozu also komplett-Zitate? In Emails mag das sinnvoll sein, weil man dort den bisherigen Verlauf nicht sieht, aber hier im Forum kann man das - insbesondere dann, wenn man die "nested"-Ansicht verwendet.

                        Durch Deine Hilfe bin ich jetzt schon sehr weit fortgeschritten!

                        Prima! Das liest man gerne.

                        ...
                        $foto = $spieler [$x] [0] . ".jpg"; // $spieler [][] enthält den Namen
                        echo "<tr><td><img src="$foto" align = "left">";
                        ...

                        Sowas habe ich auch einmal gehabt. Dann hat man mir hier im Forum gezeigt, dass "sprechende Indices" auf Dauer einfach geschickter sind.

                        $spieler[7][0] = "Franzl Beckenschwinger";  
                        $spieler[7][1] = "Stürmer";  
                        $spieler[7][2] = "23"; // Jahre alt
                        

                        Ein Array, das so aufgebaut ist, mag später (schau das Script in einem Jahr wieder an!) kaum mehr übersichtlich sein. Besser so:

                        $spieler[7]['name'] = "Franzl Beckenschwinger";  
                        $spieler[7]['funktion'] = "Stürmer";  
                        $spieler[7]['alter'] = "23";
                        

                        Ob das vorschriftsmässig programmiert ist, kann ich nicht sagen aber es klappt eben.

                        Nach welcher "Vorschrift"? Es gibt nur eine einzige echte "Vorschrift", und das ist die Syntax einer Sprache, bei deren Verletzung der Parser streikt. Alles andere ist Erfahrung, Verbesserung und Bequemlichkeit.

                        Nun nehme ich die Sache mit den Ankern in Angriff.

                        Vergiss nicht, dass man heute eher mit IDs arbeitet, als mit <a name="...">, da ein Name mehrfach verwendet werden darf, eine ID aber einmalig sein muss. Außerdem kann jedes Element eine ID tragen, was die Verwendung von "Ankern" inzwischen fast schon fraglich macht, denn Wozu in ein Element noch einen Anker hineinsetzen, wenn es doch schon genügt, dem Element selbst eine ID zu geben.

                        Spontan würde ich sagen, ich nehme die jeweiligen Fotos als 'Zieladresse'. Mal schauen wie es geht...

                        Du kannst auch das jeweilige <tr>-Element dazu mit einer ID versehen. Im Grunde ist das völlig egal.

                        Liebe Grüße,

                        Felix Riesterer.

                        --
                        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                        1. Hallo Felix,

                          bitte zitiere sinnvoll. [...] In Emails mag das sinnvoll sein, weil man dort den bisherigen Verlauf nicht sieht

                          aber auch in Emails ist ein sinnvoller Zitierstil Gold wert. Über Vollzitate, die einfach gedankenlos ans Ende der neuen Nachricht angehängt werden, ärgere ich mich auch oft genug, weil das doppelt blödsinnig ist. Erstens transportiert es viel irrelevanten Ballast, zweitens ergibt es einen konfusen Lesefluss: Von hinten nach vorn über die Reihenfolge der Einzelbeiträge, aber dann wieder von vorn nach hinten *innerhalb* eines Einzelbeitrags.

                          Daher halte ich es auch in diesem Fall für sinnvoll, nur die Passagen zu zitieren, auf die man sich bezieht, und dann jeweils direkt darauf zu antworten. Um ehrlich zu sein, ich habe mir das sogar zunächst bei Emails angewöhnt, und dann hier im Forum ganz selbstverständlich angewendet.

                          So long,
                           Martin

                          --
                          Die letzten Worte des Neandertalers:
                          Möchte doch zu gern wissen, was in der Höhle ist ...
                        2. Lieber Felix,

                          bitte zitiere sinnvoll. Mein originales Posting am Anfang stört, wenn Du darauf nicht explizit Bezug nimmst. An anderen Stellen konntest Du auch relevante Ausschnitte zitieren - wozu also komplett-Zitate? In Emails mag das sinnvoll sein, weil man dort den bisherigen Verlauf nicht sieht, aber hier im Forum kann man das - insbesondere dann, wenn man die "nested"-Ansicht verwendet.

                          ich werde mich künftig daran halten! :-)

                          »» Nun nehme ich die Sache mit den Ankern in Angriff.

                          Vergiss nicht, dass man heute eher mit IDs arbeitet, als mit <a name="...">, da ein Name mehrfach verwendet werden darf, eine ID aber einmalig sein muss. Außerdem kann jedes Element eine ID tragen, was die Verwendung von "Ankern" inzwischen fast schon fraglich macht, denn Wozu in ein Element noch einen Anker hineinsetzen, wenn es doch schon genügt, dem Element selbst eine ID zu geben.

                          »» Spontan würde ich sagen, ich nehme die jeweiligen Fotos als 'Zieladresse'. Mal schauen wie es geht...

                          Du kannst auch das jeweilige <tr>-Element dazu mit einer ID versehen. Im Grunde ist das völlig egal.

                          Mit den Ankern habe ich aber wieder Probleme. Und immer an den Schnittstellen zwischen HTML und PHP.
                          Um zu einem Anker zu springen brauche ich zwei Angaben: 1. Start (a href...) und 2. Ziel (ID). Leider finde ich genau zu diesem Punkt, nämlich wie man PHP - Variablen in <a href...> packt keine konkreten Beispiele und auf die Weise, wie ich es bisher gemacht habe funktioniert es nicht.
                          Hier mal die Zeilen mit den entsprechenden Codes:

                          <?php  //Bereich: ID vergeben
                          ...
                          while ($spieler [$x][0] != "ende") { //$spieler [x][0] enthält jeweils den Namen

                          $foto = $spieler [$x][0].".jpg";  //Bezeichnung des Fotos = Name + .jpg
                          echo "<tr><td ID = $spieler [$x][0]><img src = "$foto" align = "left" >"; // Der ID - Teil ist falsch, das weiss ich!

                          for ($z = 0; $z.... // weiter mit funktionierendem Code

                          <?php   // Bereich: Verweis angeben
                           ...
                          while ($ausgabe [$z] != "") {  //$ausgabe [] enthält die Suchergebnisse als Namen

                          echo "<a href = $spieler [$z][0]>"; // Ist auch falsch!

                          ...  //weiter im Programm

                          Bei den beiden als falsch beschriebenen Zeilen weiss ich einfach nicht, wie ich die PHP Variablen korrekt einbinden muss. Ich habe schon mit vielen Möglichkeiten experimentiert und versucht, nach den gefundenen Beispielen vorzugehen. Es klappt nicht. Vielleicht könntest Du, oder auch jemand anderes, ausnahmsweise mal mit einer korrekten Schreibweise behilflich sein? Alles andere habe ich ja durch Anregungen und probieren herausgefunden, aber hier weiss ich echt nicht weiter.

                          Das ist übrigens der letzte Teil des Projekts. Wenn ich das habe, bin ich, bis auf ein paar kleine Schönheitsfehler, fertig!

                          Schonmal vielen Dank!
                          Liebe Grüsse
                          Thorsten

                          1. Lieber treziman,

                            echo "<tr><td ID = $spieler [$x][0]><img src = "$foto" align = "left" >"; // Der ID - Teil ist falsch, das weiss ich!

                            wenn Du weißt, dass er falsch ist, warum machst Du ihn dann nicht richtig?

                            der HTML-Code muss später so aussehen:
                            <tr><td id="abc_def_123"><img src="...." alt="Das ist der Franzl" />...

                            Du wirst Deinen PHP-Code entsprechend schreiben müssen. Übrigens kann man mittels des "Punkt-Operators" Zeichenketten zusammenfügen:

                            $text1 = "ABC - ";  
                            $text2 = "die Katze lief im Schnee.";  
                            $gesamttext = $text1.$text2;  
                              
                            echo $gesamttext; // ergibt "ABC - die Katze lief im Schnee."  
                            echo $text1, $text2; // ergibt auch "ABC - die Katze lief im Schnee."
                            

                            Du kannst also Teile des HTML-Codes ausgeben, um dann in einer neuen echo-Anweisung etwas anderes auszugeben (Spielernamen etc.), um in einer wiederum anderen echo-Anweisung wieder weiteren HTML-Code auszugeben. Und um nicht -zig echo-Anweisungen notieren zu müssen, und um auch keine Endlos-Strings zu fabrizieren, kannst Du einfach mit Komma voneinander getrennte Sachen mit echo an den Browser schicken.

                            In einigen Fällen solltest Du aber unbedingt beachten, dass manche Zeichen in HTML kodiert werden müssen. In diesem Fällen lässt Du dann bitte htmlspecialchars() drüberlaufen:

                            echo htmlspecialchars($gesamttext);

                            Das hiesige Beispiel ergäbe eine identische Ausgabe, da keine HTML-kritischen Zeichen benutzt wurden.

                            $text1 = "Hansi spielte besser -> mehr Tore.";  
                            echo htmlspecialchars($text1); // "Hansi spielte besser -&gt; mehr Tore."[/cod€]  
                              
                            
                            > echo "<a href = $spieler [$z][0]>"; // Ist auch falsch!  
                              
                            Du solltest höllisch mit Deinen Leerzeichen aufpassen!! In HTML spielen die in einer Dir offensichtlich noch unklaren Weise eine sehr wichtige Rolle!  
                              
                            [code lang=html]<a href=Wert, der nix bedeutet title = Mist!>
                            

                            Du kannst schon am Farbschema erkennen, dass ein Leerzeichen ein Attribut vom nächsten trennt. Deshalb vergibt man ja auch Anführungszeichen!!

                            Neuer Versuch (besser, aber noch immer falsch):
                            <a href="Wert, der nix bedeutet" title = Mist!>

                            Siehst Du es jetzt genauer? Schreibe Deinen PHP-Code ensprechend genauer! Und finde heraus, wie der HTML-Code aussehen muss, damit ein projektinterner Verweis auch sein Ziel findet! Und erst wenn Du das verstanden hast, dann kehre zu PHP zurück und passe den Code dementsprechend an!

                            Liebe Grüße,

                            Felix Riesterer.

                            --
                            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                            1. Hallo Felix,

                              alles was Du in Deinem letzten Posting geschrieben hast, weiss ich schon! UND...alles was ich bis jetzt - nicht zuletzt auch Dank Dir - programmiert habe, FUNKTIONIERT einwandfrei!
                              Nur die Sache mit der PHP - Variablen in der ID und dem <a href...> klappt nicht. Zu Testzwecken habe ich diese Variablen weggelassen und reinen HTML - Code benutzt. Bei ID habe ich eingetragen ... ID = "ziel" und im A - Tag dasselbe, und da klappte der Sprung!

                              Aber wie muss die PHP - Variable "$spieler [$x][$y]" in die Anweisung geschrieben werden? DAS ist das Problem.

                              Es muss also irgendwie so aussehen:

                              ...
                              <a href = <?php "#$spieler [$x][$y]" ?> >

                              Bei ID auch: ID = "$spieler [$x][$y]"

                              Oder meinetwegen auch: ECHO "<a href = #$spieler [$x][$y]>";

                              Also wie müssen das A - TAG und der Eintrag bei ID = "???????" MIT der PHP - Variablen aussehen?

                              Liebe Grüsse
                              Thorsten

                              1. Lieber treziman,

                                alles was Du in Deinem letzten Posting geschrieben hast, weiss ich schon!

                                es ist aber dann sehr verwirrend, wenn Du überall Abstände schreibst, wo keine sein dürften - selbst wenn Du "Pseudocode" notierst.

                                Aber wie muss die PHP - Variable "$spieler [$x][$y]" in die Anweisung geschrieben werden? DAS ist das Problem.
                                ...
                                <a href = <?php "#$spieler [$x][$y]" ?> >
                                Oder meinetwegen auch: ECHO "<a href = #$spieler [$x][$y]>";

                                Und genau hier zeigt sich, dass Du doch noch nicht _alles_ weißt, was ich Dir geschrieben habe. Die Antwort auf diese Deine letzten zwei Fragen ist in meinem vorherigen Antwortposting enthalten.

                                Das musst Du nun wirklich selbst herausknobeln!

                                Liebe Grüße,

                                Felix Riesterer.

                                --
                                ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
          3. Mahlzeit treziman,

            Unter PHP kann ich ja trotzdem HTML-Code ausführen (ECHO "html-code...).

            Nein, kannst Du nicht. Du kannst in PHP Ausgaben tätigen, die dann so vom Webserver an den Browser geschickt werden. Ob es sich dabei um HTML, CSS, Javascript oder irgendwas anderes handelt, spielt keine Rolle.

            Mit "<form action='spieler.php' method='POST'>" ruft man ja diese zweite Datei auf.

            Nein, ruft man nicht. Damit definiert man in HTML den Beginn eines http://de.selfhtml.org/html/formulare/definieren.htm#bereich@title=Formulars. Typischerweise enthält ein solches mindestens ein Formularelement und sinnvollerweise mindestens einen Button zum Abschicken des Formulars. Und es sollte natürlich geschlossen werden.

            Kann man "<form action..." im Zusammenhang mit "<select name='suchwort'>" und "<input type='submit'>" (statt 'submit' kann auch etwas anderes stehen) nicht einfach weglassen?

            Nein, kann man nicht. Zumindest nicht, wenn man irgendeine brauchbare Funktionalität erwartet. Ein Formularelement (wie eine http://de.selfhtml.org/html/formulare/auswahl.htm#listen@title=Auswahlliste) kann nur innerhalb eines Formulars "funktionieren".

            Mit "<form action..." ruft man ja nur eine Seite auf, weiter nichts.

            Nein, s.o.

            Falls man zwei Dateien verwenden MUSS, vielleicht kannst Du mir noch einen Tip geben, wie man dies macht, also HTML-Dateien als Vorlage benutzen und Ergänzungen durch PHP-Scripte einfügen.

            Fang lieber mit der Pflicht an, bevor Du Dich gleich zu Anfang auf die Kür stürzt.

            Die fertige Geschichte soll am Ende so aussehen:

            Wie die "Geschichte" aussehen soll, ist für das technische Funktionieren (in PHP) irrelevant, da die Struktur der Seite in HTML aufgebaut und anschließend das Aussehen mittels CSS festgelegt bzw. verschönert wird.

            Wie Struppi bereits schrieb, fehlt es Dir offenbar an grundlegendem Verständnis dafür, wie HTML-Dateien aufgebaut sind, wie Formulare funktionieren, was genau PHP ist, wo PHP-Code ausgeführt wird, was der Webserver an den Browser schickt und umgekehrt. Sorge also dafür, dass dieser Mangel an Wissen behoben wird.

            Bei konkreten Fragen (z.B. auch zu den Dir bereits genannten Stichworten wie "Affenformular") kannst Du diese gerne - garniert mit einer aussagekräftigen und hilfreichen Problembeschreibung - hier im Forum stellen. :-)

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Hallo,

              erstmal ein dickes Dankeschön an alle für die Kritik und die Hinweise!

              Auch wenn ich schon einige kleinere Projekte in reinem HTML realisiert habe, ist es unschwer zu erraten, dass ich gerade mit PHP erst anfange. Darum freue ich mich über jede Antwort auf meine Fragen, weil sie irgend etwas bewirkt oder mich "auf die Spur" bringt. Fertige Lösungen interessieren mich wenig, weil ich so nichts lerne! Beispiele dagegen brauche ich schon eher, um die Zusammenhänge der Codes zu verstehen.

              Nun, ich mache jetzt einfach mal weiter bis ich zum nächsten Problem komme, was ich selbst nicht lösen kann...

              Dann melde ich mich wieder.

              Bis dahin, nochmals dankeschön und viele Grüsse
              Thorsten

    2. hi $name,

      | und an der Ausgabeposition füge ich ein:
      | <?php
      |  echo $name;
      |  echo "test";
      | ?>
      | Angezeigt wird nichts!

      Moderne Browser interpretieren die Zeichenfolge "<?" als den Beginn eines Kommentares (oder sowas ähnliches). Betrachte den Quellcode im FF! Das Zeugs sollte rosa aussehen.

      öh, wo steht denn da "<?" ? ich sehe nur ein korrektes <?php.

      brille? fielmann!  *SCNR*

      gruss
      shadow

      --
      Vor dem Parser und auf hoher See sind wir allein in Gottes Hand
      1. Mahlzeit Shadowcrow,

        »» | <?php
        »»
        »» Moderne Browser interpretieren die Zeichenfolge "<?" als den Beginn eines Kommentares (oder sowas ähnliches). Betrachte den Quellcode im FF! Das Zeugs sollte rosa aussehen.

        öh, wo steht denn da "<?" ? ich sehe nur ein korrektes <?php.

        Das mag sein - aber auch ein <?php besteht aus einem <? ... und wenn dieser Code an einen Browser geschickt wird (was passiert, wenn er z.B. in einer .html-Datei enthalten ist, die nicht vom Webserver als PHP verarbeitet, sondern direkt ausgegeben wird), dann interpretiert der Browser diese Zeichenfolge als Kommentar.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. hi $name,

          | »» | <?php
          | »»
          | »» Moderne Browser interpretieren die Zeichenfolge "<?" als den Beginn eines Kommentares (oder sowas ähnliches). Betrachte den Quellcode im FF! Das Zeugs sollte rosa aussehen.
          |
          | öh, wo steht denn da "<?" ? ich sehe nur ein korrektes <?php.

          Das mag sein - aber auch ein <?php besteht aus einem <? ... und wenn dieser Code an einen Browser geschickt wird (was passiert, wenn er z.B. in einer .html-Datei enthalten ist, die nicht vom Webserver als PHP verarbeitet, sondern direkt ausgegeben wird), dann interpretiert der Browser diese Zeichenfolge als Kommentar.

          ok, ja das stimmt natürlich, in einer .html datei die nicht durch den PHP-parser gejagt wird jat das nicht zu suchen...

          gruss
          shadow

          --
          Vor dem Parser und auf hoher See sind wir allein in Gottes Hand