Úlrike: Formularübergabe an ein php script

Hi Forum,

Mein php Problem:
Ich habe eine Online Umfrage in einem HTML Formular erstellt.
Die Angaben möchte ich nun an ein php Script geschickt bekommen das aber für den Benutzer nicht sichtbar sein soll.
<form action="form.php" method="post">

Dazu habe ich ein php script angelegt, dass die jeweiligen namen der <inputs> als Variable identifizieren soll und den ausgewählten wert anzeigen soll:

Hier ein Auszug aus form.php

<HEAD><TITLE>Publizieren im Web - Formulare in HTML</TITLE></HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF00FF" ALINK="#FF0000">
<H2>Information über den Browser</H2>
<?
  Echo "User-Agent: " . GetEnv('HTTP_USER_AGENT') . "<br>\n";
  Echo "Referer: " . GetEnv('HTTP_REFERER') . "<br>\n";
  Echo "REMOTE_ADDR: " . GetEnv('REMOTE_ADDR') . "<br>\n";
  Echo "REMOTE_HOST: " . GetEnv('REMOTE_HOST') . "<br>\n";

if (GetEnv('REQUEST_METHOD') == 'GET')
  {
?>
<H2>Rohinformation aus GET-Formular</H2>
<?
    Echo "QUERY_STRING: " . GetEnv('QUERY_STRING') . "<br>\n";
  }
?>
<H2>Information aus den Formulareingaben</H2>
<?
...
 Echo "Frage16 = $Frage16<br>\n";
  Echo "Frage18 = $Frage18<br>\n";
  for ($i = 0; $i < count($Frage19AufZehenspitzen); $i++)
  { Echo "Frage19AufZehenspitzen[$i] = $Frage19AufZehenspitzen[$i]<br>\n";
  }
  for ($i = 0; $i < count($Frage19Tapsen); $i++)
  { Echo "Frage19Tapsen[$i] = $Frage19Tapsen[$i]<br>\n";
  }
  for ($i = 0; $i < count($Frage19FestemSchritt); $i++)
  { Echo "Frage19FestemSchritt[$i] = $Frage19FestemSchritt[$i]<br>\n";
  }
  Echo "Frage20 = $Frage20<br>\n";
  Echo "Geschlecht = $Geschlecht<br>\n";
  Echo "Alter = $Alter<br>\n";
  Echo "Beruf = $Beruf<br>\n";
  Echo "Frage24 = $Frage24<br>\n";
?>
Die Anzeige im HTML Editor gibt mir keine Daten aus sondern das roh php Script.
beim versuch im Netz gibt dieser ein Fehler im Script an.

Ich arbeite mich gerade in php ein- komme hier aber nicht weiter.
Was mache ich falsch? Wo liegt mein Denkfehler?

Hoffe ich habe euch nicht erschlagen mit der Anfrage.

MFG
Ulrike

  1. Hallo Ulrike,

    Die Angaben möchte ich nun an ein php Script geschickt bekommen das aber für den Benutzer nicht sichtbar sein soll.
    <form action="form.php" method="post">

    soweit okay.

    <BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF00FF" ALINK="#FF0000">

    Es wäre eine gute Idee, wenn du dich bei Gelegenheit auch mit CSS befassen würdest, um damit den Inhalt von der Optik sauber trennen zu können. Aber das nur nebenbei.

    Echo "User-Agent: " . GetEnv('HTTP_USER_AGENT') . "<br>\n";
      Echo "Referer: " . GetEnv('HTTP_REFERER') . "<br>\n";
      Echo "REMOTE_ADDR: " . GetEnv('REMOTE_ADDR') . "<br>\n";
      Echo "REMOTE_HOST: " . GetEnv('REMOTE_HOST') . "<br>\n";

    Nur so als guter Rat: Schreib mal das "echo" klein, das sieht sonst sehr seltsam aus (auch wenn es kein Fehler ist). Viel Interessanter aber ist die Frage, warum du hier die Daten mit getenv() abfragst, anstatt die globalen Arrays (hier $_SERVER[]) zu bemühen.

    Echo "Frage16 = $Frage16<br>\n";

    Alarm! Wo kommt die Variable $Frage16 her?
    Das sieht mir ganz stark danach aus, als ob du dich auf register_globals=on verlässt. Ist das bei deinem Hoster wirklich so? Falls nein: Erster grober Fehler. Falls ja: Erster grober Fehler. Verwende stattdessen das globale Array $_POST[], in dem die Daten zur Verfügung stehen. Die Einstellung register_golbals=on, mit der die im Request übergebenen Parameter automatisch in Variablen abgebildet werden, ist nämlich bei immer mehr Webhostern deaktiviert. Und das ist gut so.

    Die Anzeige im HTML Editor gibt mir keine Daten aus sondern das roh php Script.

    Logisch.

    beim versuch im Netz gibt dieser ein Fehler im Script an.

    Welcher Fehler? Das wäre jetzt interessant für eine sinnvolle Hilfestellung.

    Hoffe ich habe euch nicht erschlagen mit der Anfrage.

    Naja, es war ein Haufen Code auf einmal, aber viel Gleichartiges, so gesehen... ;-)

    Schönen Abend noch,
     Martin

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.
    1. Hallo Martin,

      Alarm! Wo kommt die Variable $Frage16 her?
      [...] Verwende stattdessen das globale Array $_POST[],

      Meine Glaskugel meinte eher $_GET[], zumindestens war das ihre Interpretation von

      if (GetEnv('REQUEST_METHOD') == 'GET')

      Freundliche Grüße

      Vinzenz

      1. Hallo Vinzenz,

        [...] Verwende stattdessen das globale Array $_POST[],

        Meine Glaskugel meinte eher $_GET[], zumindestens war das ihre Interpretation von

        if (GetEnv('REQUEST_METHOD') == 'GET')

        ja, da ist ein Widerspruch, der mir nicht aufgefallen ist. Ich hab mich an der Zeile

        <form action="form.php" method="post">

        orientiert. Dann wäre die GET-Abfrage natürlich Unsinn. Dafür hast du noch den scharfen Blick gehabt, der die short_open_tags kritisiert hat; ansonsten sind wir uns anscheinend ziemlich einig. ;-)

        Schönen Abend noch,
         Martin

        --
        Es sagte...
        ein korpulenter Lehrer zu einem Schüler, der ihn ein Fass genannt hatte: "Nein. Ein Fass ist von Reifen umgeben, ich dagegen von Unreifen."
        1. Hallo Martin,

          <form action="form.php" method="post">

          das ist meiner Glaskugel entgangen :-( Ich denke, Deine Angabe mit $_POST[] ist eher korrekt.

          [...] ansonsten sind wir uns anscheinend ziemlich einig. ;-)

          Außer in unseren Ansichten über Fußball ;-)

          Freundliche Grüße

          Vinzenz

  2. Hallo Ulrike,

    ich fange mal weit hinten an:

    Ich arbeite mich gerade in php ein- komme hier aber nicht weiter.
    Was mache ich falsch? Wo liegt mein Denkfehler?

    Du solltest Dir dringend aktuellere Unterlagen zum Erlernen von PHP besorgen: Sei es ein besseres Buch, sei es ein aktuelleres Tutorial.

    <?

    Verwende lieber [code lang=php]<?php [...] ?> zum Kennzeichnen Deiner PHP-Blöcke, siehe dazu Abschnitt <http://www.php.net/manual/de/language.basic-syntax.php@Grundlagen der Syntax> des PHP-Handbuchs. Du verläßt Dich darauf, dass short_open_tag aktiviert ist.

    if (GetEnv('REQUEST_METHOD') == 'GET')

    Sorry, aber Du hast Dein Formular erstellt. Du kennst die Übertragungsmethode. Ich persönlich halte diese Abfrage für überflüssig, es sei denn, Du möchtest Fremdformulare, die eine andere Übertragungsmethode verwenden, ausschalten.

    Desweiteren könntest Du statt der Funktion GetEnv() das superglobale Array $_SERVER verwenden.

    Echo "User-Agent: " . GetEnv('HTTP_USER_AGENT') . "<br>\n";
      Echo "Referer: " . GetEnv('HTTP_REFERER') . "<br>\n";

    Hinweis: Es ist trotz allem der Referrer :-)

    Echo "Frage16 = $Frage16<br>\n";

    Du verläßt Dich hier auf die Einstellung register_globals = On.
    Empfohlen und fast nur noch anzutreffen ist register_globals =  Off. Wenn Du - wie ich vermute - GET verwendest, solltest Du mit $_GET['Frage16'] auf den Inhalt eines Formularelementes mit dem Namen "Frage16" zugreifen.

    ?>
    Die Anzeige im HTML Editor gibt mir keine Daten aus sondern das roh php Script.

    HTML-Editoren sind meist keine Webserver.

    beim versuch im Netz gibt dieser ein Fehler im Script an.

    Welchen? Solche Informationen sind stets nützlich.

    Hoffe ich habe euch nicht erschlagen mit der Anfrage.

    Nein, keine Angst. Wir sind hart im Nehmen (und teilen gelegentlich auch kräftig aus).

    Freundliche Grüße

    Vinzenz

  3. Vielen Dank für eure schnellen Antworten!

    Mein php script funktioniert jetzt!!!

    Nun habe ich eine Verständnisfrage:
    Mein HTML Formular gibt nun die einträge an mein php Formular.
    Nun möchte ich aber das die Einträge auf der mysql Datenbank "Ergebnisse" bei meinem Webserver gespeichert werden.

    Meine Frage: Schreibe ich nun ein komplett neues mysql Script und verbinde dies mit dem php Script?
    oder kann ich die mysql befehle in das php Script schreiben.

    und muss ich vorher einen Tabellen Kopf der Datenbank entwerfen worunter dann die Ergebnisse stehen; oder läuft das dann automatisch in der reihenfolge wie die Variablen ausgelesen werden?

    Ich glaube mir ist die logische Abfolge, die die Einträge aus dem Formular durchlaufen müssen, nicht ganz klar:|

    Ich hoffe das war nicht zu verwirrend.

    Grüße
    Ulrike

    1. Hallo Ulrike,

      Vielen Dank für eure schnellen Antworten!
      Mein php script funktioniert jetzt!!!

      das ist doch sehr erfreulich. Weiter so!

      Nun habe ich eine Verständnisfrage:
      Mein HTML Formular gibt nun die einträge an mein php Formular.
      Nun möchte ich aber das die Einträge auf der mysql Datenbank "Ergebnisse" bei meinem Webserver gespeichert werden.

      Meine Frage: Schreibe ich nun ein komplett neues mysql Script und verbinde dies mit dem php Script?

      Du ergänzt Dein Skript um diese entsprechende Funktionalität, z.B. durch ein paar Funktionen, die für das Speichern in der Datenbank zuständig sind. Diese bindest Du an geeigneter Stelle ein.

      oder kann ich die mysql befehle in das php Script schreiben.

      Du wirst einiges über Datenbanken im Allgemeinen, MySQL im speziellen und über SQL, die Sprache relationaler Datenbanken lernen müssen. Keine Angst, das ist nicht so schwierig.

      und muss ich vorher einen Tabellen Kopf der Datenbank entwerfen worunter dann die Ergebnisse stehen; oder läuft das dann automatisch in der reihenfolge wie die Variablen ausgelesen werden?

      Du wirst (in einem anderen Skript oder auf anderem Weg) die benötigte(n) Tabelle(n) anlegen müssen. Auch hierzu musst Du ein gewisses Grundverständnis für solche Tabellen erwerben müssen. Eine Spalte ist nicht nur durch ihren Namen gekennzeichnet, sondern einer Spalte wird genau ein Datentyp zugewiesen und in vielen Fällen auch noch das "Fassungsvermögen" der Spalte, d.h. wieviel in die Spalte passt.

      Ich glaube mir ist die logische Abfolge, die die Einträge aus dem Formular durchlaufen müssen, nicht ganz klar:|

      grundsätzlich ist die Abfolge ganz klar und logisch:

      Sie folgt dem EVA-Prinzip, d.h. Eingabe, Verarbeitung, Ausgabe.
      Am Anfang steht die _E_ingabe, d.h. dein Skript liest die übertragenen Daten ein. Danach werden diese Daten _v_erarbeitet, z.B. auf Richtigkeit überprüft, abgeleitete Werte werden ermittelt, die Daten werden mit bereits vorhandenen verglichen ... Am Schluss steht die _A_usgabe, die z.B. aus einer Speicherung in einer Datenbank und/oder aus einer weiteren neu generierten Webseite bestehen kann.

      Von Alex hast Du ja bereits einen Hinweis auf schattenbaum.net bekommen, ich ergänze den Abschnitt Datenbanken der hervorragenden PHP-FAQ.

      Freundliche Grüße

      Vinzenz