Hora: Ausgabe anzeigen lassen

Hallo zusammen,

ich versuche gerade mir etwas PHP beizubringen. Ich habe einen einfachen Code aus einem PHP Buch abgeschrieben. Also z.B wo man in ein Formular etwas eingibt und dann als Antwort irgendwas zurück bekommt.

Ich habe eine .htm Datei die durch action auf die PHP Datei verweist. Beide Dateien habe ich unter .../htdocs gespeichert. Habe mir noch den XAMPP Server installiert.

Wenn ich jetzt meine .htm Datei öffne und in mein Formularfeld etwas eingebe und es abschicke, kommt nur eine weiße Seite ohne eine Antwort. Was mache ich bloß falsch?

Danke

MfG

Hora

  1. Was mache ich bloß falsch?

    Wahrscheinlich nichts.
    Du musst halt eine Ausgabe auf der php-Seite erzeugen. Z.B. so:
    http://php.net/manual/de/function.echo.php.

    Im Allgemeinen ist es auch immer von Vorteil hier im Forum etwas Quelltext mit zuschicken (vielleicht auch gekürzt auf die wichtigen Stellen).

    Paul

    1. Moin!

      Was mache ich bloß falsch?
      Wahrscheinlich nichts.

      Wahrscheinlich doch etwas. Wird nur nicht angezeigt.

      Hora: Setze

      <?php  
      error_reporting (E_ALL);
      

      an den Anfang Deines Skriptes oder überprüfe das Error-Log des Webservers. Ansonsten liefert Dir auch die Webseite von PHP auch weiter führende Informationen zur Fehlerbehandlung.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      1. Hi,

        danke für eure Antworten. Ich habe es immer noch nicht hinbekommen.

        Das mit :
        error_reporting (E_ALL);
        hat nicht funktioniert.

        Hier meine php-Datei als bearbeitung.php:

        <?php
        error_reporting (E_ALL);
        $teilnehmer = $_POST["vorname"];
        if ($teilnehmer){
        echo ("Sie wurden als Teilnehmer $teilnehmer registriert.");
        } else {
          echo ("Sie haben keinen Vornamen angegeben.");
        }
        ?>

        Und das ist meine htm-Datei als jodel.htm:

        <form name="anmeldung" action="bearbeitung.php" method="POST">
          Name: <input type="text" name="vorname" / > <br />
          <input type="submit" value="Abschicken">
        </form>

        Den Code habe ich aus einem Übungsbuch. Vielleicht ist die Bedingung bei der php-Datei falsch oder ich habe irgendwas mit dem Server falsch gemacht.

        MfG

        Hora

        1. @@Hora:

          nuqneH

          $teilnehmer = $_POST["vorname"];
          if ($teilnehmer){
          echo ("Sie wurden als Teilnehmer $teilnehmer registriert.");

          NEIN!! Du darfst NIEMALS irgendwelche Werte, deren Herkunft außerhalb deiner Kontrolle liegt, unbearbeitet ausgeben. Sicherheitslöcher noch und nöcher.

          Du musst bei der Ausgabe [link:http://www.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($teilnehmer) verwenden.

          Den Code habe ich aus einem Übungsbuch.

          Schmeiß das Buch weg! Es taugt nichts.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi,

            ich habe das mit dem htmlspecialchars nicht so ganz verstanden. Dieser wandelt Sonderzeichen in HTML-Codes um, also " wird zu ENT_QUOTES.

            Das mit den Sicherheitslöchern ist mir eigentlich momentan egal. Ich wollte nur testen, wie man überhaupt ne Ausgabe von einem Formularfeld bekommt. Momentan krieg ich nur ne weiße Seite zu sehen.

            MfG

            Hora

            1. @@Hora:

              nuqneH

              ich habe das mit dem htmlspecialchars nicht so ganz verstanden. Dieser wandelt Sonderzeichen in HTML-Codes um, also " wird zu ENT_QUOTES.

              Vor allem wird '<' zu '&lt;'.

              Das ist wichtig, denn wenn $_POST["vorname"] den Wert '<script>[code lang=javascript]alert(42);</script>[/code]' hat, würde
              echo ("Sie wurden als Teilnehmer $teilnehmer registriert.");
              in den HTML-Quelltext schreiben:

              Sie wurden als Teilnehmer <script>[code lang=javascript]alert(42);</script> registriert.[/code]

              und der JavaScript-Code ausgeführt werden. Dieser kann weitaus bösere Sachen tun als die Antwort auf die Frage nach dem Sinn des Lebens auszugeben.

              echo ("Sie wurden als Teilnehmer" . htmlspecialchars($teilnehmer) . "registriert.");
              schreibt in dem Fall in den HTML-Quelltext:

              Sie wurden als Teilnehmer &lt;script&gt;alert(42);&lt;/script&gt; registriert.

              Keine <script>-Tags, keine Gefahr.

              Das mit den Sicherheitslöchern ist mir eigentlich momentan egal.

              Falsche Einstellung! Es darf dir nicht egal sein! Das ist das Erste, was man bei PHP lernen muss. Ansonsten sollte man die Finger von PHP lassen, weil man mehr Schaden als Nutzen anrichtet.

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
              1. @@Gunnar Bittersmann:

                nuqneH

                echo ("Sie wurden als Teilnehmer" . htmlspecialchars($teilnehmer) . "registriert.");

                PS: So sollte man das nicht tun, sondern:

                printf("Sie wurden als Teilnehmer %1$s registriert.", htmlspecialchars($teilnehmer));

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. @@Gunnar Bittersmann:

                  nuqneH

                  PS: So sollte man das nicht tun, sondern:

                  printf("Sie wurden als Teilnehmer %1$s registriert.", htmlspecialchars($teilnehmer));

                  PPS: Argl, da sind entweder zwei Striche zu viel oder einer zu wenig.

                  Jetzt aber:

                  printf('Sie wurden als Teilnehmer %1$s registriert.', htmlspecialchars($teilnehmer));

                  oder

                  printf("Sie wurden als Teilnehmer %1\$s registriert.", htmlspecialchars($teilnehmer));

                  wobei ersteres vorzuziehen ist.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                2. Hi,

                  irgendwie hast du mich komplett verwirrt. Ich werde mir einfach ein neues Buch ausleihen und dann von vorne beginnen....

                  MfG

                  1. Hi!

                    irgendwie hast du mich komplett verwirrt. Ich werde mir einfach ein neues Buch ausleihen und dann von vorne beginnen....

                    Das Problem wird sein, dass viele Anfängerbücher ebenfalls keinen Wert auf Sicherheit von Anfang an legen. Das Problem besteht nicht nur bei HTML-Ausgaben, sondern generell. Das muss also nicht nur ein "HTML-Ausgabe => htmlspecialchars()"-Wissen werden sondern eine generell verinnerlichte Strategie. Ich hab da mal was vorbereitet, das ich immer wieder verlinken muss, weil das Thema nicht beachtet wird. Du musst von dem Artikel nicht alles lesen, aber du solltest das Grundprinzip verstehen, und dir zumindest mal anschauen, welche Fälle zu beachten sind.

                    Noch zwei Anmerkungen zu deinem Code:

                    $teilnehmer = $_POST["vorname"];

                    Die nächste Unsitte, die immer wieder auftaucht und gelehrt wird, ist das Umkopieren von $_GET/$_POST-Einträgen in andere Variablen. Das ist nicht notwendig und bringt (manchmal) nur einen kleinen Tippvorteil, dafür aber den stärker wiegenden Nachteil der Komplexitätserhöhung (mehr Variablen, Verschleierung der Herkunft des Wertes).

                    if ($teilnehmer){

                    $teilnehmer ist kein boolescher Wert. Der Code setzt hier auf die automatische Typumwandlung von PHP. Die Intention hinter dem Code bringt jedoch ein

                    if (!empty($_POST["vorname"]))

                    deutlich besser rüber. Zudem hat er den Vorteil, dass er bei Nichtvorhandensein von $_POST["vorname"] keine Meldung erzeugt (wenn das error_reporting auf E_ALL gestellt ist).

                    Lo!

              2. Hallo,

                Das mit den Sicherheitslöchern ist mir eigentlich momentan egal.

                Falsche Einstellung! Es darf dir nicht egal sein! Das ist das Erste, was man bei PHP lernen muss. Ansonsten sollte man die Finger von PHP lassen, weil man mehr Schaden als Nutzen anrichtet.

                ... und das gilt analog für andere Programmiersprachen.

                Freundliche Grüße

                Vinzenz

                1. Hi,

                  ich wollte nach dem Buch gehen und die Übungen machen. Ich bin grad mal bei Seite 50 und selbst bei einfachen Sachen funktioniert nix. Frustrierend.

                  MfG

        2. @@Hora:

          nuqneH

          Vielleicht ist die Bedingung bei der php-Datei falsch

          Nö.

          oder ich habe irgendwas mit dem Server falsch gemacht.

          Vermutlich. Wird denn bei dir überhaupt PHP ausgeführt?

          Bei mir funktioniert der Code. Von dem Sicherheitsloch abgesehen.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
  2. Hi there,

    einmal abgesehen von aus meiner Sicht in diesem Stadium völlig nutzlosen Überlegungen zu Sicherheitsfragen, läuft XAMPP überhaupt richtig?
    Was passiert, wenn Du Dir in Deiner PHP-Datei einfach ein

      
      
    echo 'Kurti ist doof';  
      
    
    

    ausgeben lässt?

    1. @@Klawischnigg:

      nuqneH

      einmal abgesehen von aus meiner Sicht in diesem Stadium völlig nutzlosen Überlegungen zu Sicherheitsfragen

      Deine Sichtweise kann ich überhaupt nicht nachvollziehen.

      Wenn man es nicht gleich richtig macht (lernt), macht (lernt) man es womöglich nie – mit fatalen Folgen.

      Außerdem macht es doppelte Arbeit, erst etwas zusammenzubasteln, um es später nochmal korrigieren zu müssen.

      läuft XAMPP überhaupt richtig?

      Danach hatte ich auch schon gefragt.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hi there,

        Wenn man es nicht gleich richtig macht (lernt), macht (lernt) man es womöglich nie – mit fatalen Folgen.

        Ja und nein. Um es richtig lernen zu können, braucht man einmal ein System, in dem das überhaupt möglich ist. Auch wenn nicht alles, was hinkt, ein Vergleich ist, aber mir kommt das irgendwie so vor, als würdest Du jemandem, der mit Motorschaden, Reifenpanne und zersplitterter Windschutzscheibe am Wegesrand liegen bleibt empfehlen, doch die Sicherheitsgurte anzulegen.

        läuft XAMPP überhaupt richtig?

        Danach hatte ich auch schon gefragt.

        Sry, offenbar überlesen, es drängt sich aber auch auf...

        1. @@Klawischnigg:

          nuqneH

          […] aber mir kommt das irgendwie so vor, als würdest Du jemandem, der mit Motorschaden, Reifenpanne und zersplitterter Windschutzscheibe am Wegesrand liegen bleibt empfehlen, doch die Sicherheitsgurte anzulegen.

          Ich halte es für wichtig, solche Hinweise SOFORT zu geben. Wenn ein Fragesteller sein Problem gelöst bekommen hat, schaut er womöglich gar nicht mehr ins Forum rein und bekommt die wichtigen Hinweise gar nicht mehr mit.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Also, wenn ich auf der htm.Datei bin und dann ins Formularfeld etwas eingebe, dann kommt nur ne weiße Seite.

            Wenn ich ins Adressfeld oben:

            http://localhost/bearbeitung.php

            eingebe, dann kommt "Kurti ist doof".

  3. Hi,

    Wenn ich jetzt meine .htm Datei öffne und in mein Formularfeld etwas eingebe und es abschicke, kommt nur eine weiße Seite ohne eine Antwort. Was mache ich bloß falsch?

    Hast Du mal in den Quelltext der "leeren" Seite geguckt?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.