Johann: php affenformular

Hallo,

hab ne Frage zum "Affenformular". Ich hab das so verstanden:

meine PHP-Datei:

<html>
Bereich fuer meine Navigation (in html)

<?php
 if(!isset $_POST['Feldname']) {
    echo <<<LEERESFORMULAR
    <form action="diese HTML-Datei" method="post">
    <input type="text" name="Feldname">
    HTML-Code...
    </form>
LEERESFORMULAR;

}else {
 if (Fehlerpruefung==true) {
    echo <<<FEHLERFORMULAR
    HTML-Code
FEHLERFORMULAR;

}else {
    echo <<<DATENSPEICHERUNG
    HTML-Code
DATENSPEICHERUNG;
}
?>

Bereich fuer footer (in html)
</html>

Wo liegt der/die Fehler. Bisher hat die Pruefung von !isset($_POST['Feldname']) nicht funktioniert. Kann es sein, dass dies nicht erkannt wird, wenn die php-Datei das erste mal aufgerufen wird?

Ist der Ansatz so richtig oder was kann ich anders/besser machen?

Dank und Gruß

Johann

  1. Wo liegt der/die Fehler. Bisher hat die Pruefung von !isset($_POST['Feldname']) nicht funktioniert.

    definiere "fehler" und "nicht funktioniert" etwas näher

    Kann es sein, dass dies nicht erkannt wird, wenn die php-Datei das erste mal aufgerufen wird?

    !isset($_POST['Feldname']) wird true liefern, wenn das formular geladen wird und das $_POST-array leer ist - sollte ansich funktionieren

    ggf solltest du ein paar debugausgaben einbauen ;)

    Ist der Ansatz so richtig oder was kann ich anders/besser machen?

    prinzipiell ist der ansatz in ordnung

    1. Hi,

      definiere "fehler" und "nicht funktioniert" etwas näher

      Es erscheint nur eine weiße Seite. Hab etwas rumprobiert und denke der Fehler muesste an folgendem Code liegen, denn wenn ich den aus der Datei entferne wird restliche Inhalt wieder angezeigt.

      <?php
         if(!isset($_POST['name'])){
          echo <<<LEERESFORMULAR

      <div class="div_wrappers" id="div_anzeige" onMouseOver="wait_menue()">
           <span id="span_1"><b>Pflichtangaben:</b></span>
           <form action="add.php" method="post">
             <table id="table_add_lunch">
               <tr>
                <td onClick="infoClicked(1)" onMouseOut="itemLostFocus()" width=170>Name:</td><td style="padding-left:5px"><input name="name" type="text" size="19" maxlength="30" value="<?php if (isset($_POST['name'])) echo htmlspecialchars($_POST['name']); ?>"></td>
               <tr>

      </table>
           <div class="formularButtons">
             <div style="position: relative; float: left; ">
              <input class="button_start" type="reset" value="zurücksetzen">
              <input class="button_start" type="submit" value="speichern">
             </div>
           </div>
           </form>
          </div>
      LEERESFORMULAR;
         }
        ?>

      Hoffe der Codeausschnitt wird einigermaßen formatiert dargestellt und ist nicht zu lange.

      1. Hi,

        definiere "fehler" und "nicht funktioniert" etwas näher
        Es erscheint nur eine weiße Seite.

        Du siehst zu selten ins Error-Log des Servers.

        echo <<<LEERESFORMULAR

        [...]

        <td onClick="infoClicked(1)" onMouseOut="itemLostFocus()" width=170>Name:</td><td style="padding-left:5px"><input name="name" type="text" size="19" maxlength="30" value="<?php if (isset($_POST['name'])) echo htmlspecialchars($_POST['name']); ?>"></td>

        Dir ist aber schon klar, was die "<<<delimiter"-Schreibweise bedeutet?

        Hoffe der Codeausschnitt wird einigermaßen formatiert dargestellt und ist nicht zu lange.

        Ja, das passte schon (wenngleich Du mit der Anzahl der Leerzeichen etwas konsistenter umgehen könntest). Weitere Verbesserungsvorschläge findest Du in der Forums-Hilfe.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hi,

        if(!isset($_POST['name'])){
            echo <<<LEERESFORMULAR

        mal was grundsätzliches: mit dieser Heredoc-Syntax verquirrlst Du aufs heftigste Php-Code und html-output. Imho wird das schnell unübersichtlich, Du solltest sowas sauber trennen: im Php-Teil validierst Du nur die User-Eingaben, später gibst Du abhängig vom Ergebnis das html aus.
        Beispiel, schematisch:

        <?php
        $error =  "";
        function validate (&$error) {

        if (!isset($_POST['name'])) {
               $error .= "Name vergessen!";
           }
        }

        validate ($error);
        ?>

        <?php if ($error): ?>
            <p><?=$error?></p>
        <?php else:?>
        <div>
            alles ist gut.
        </div>
        <?php endif?>

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. Hi,

          vielen Dank fuer eure Hilfe. Werd jetzt erstmal den Hinweisen nachgehen.

          Das Problem lag wohl an der Kombination von Heredoc und dem darin enthaltenen <?php?>.

          Du siehst zu selten ins Error-Log des Servers.

          Davon wusste ich bislang noch nichts - werd da gleich noch reinschaun.

          Johann

          1. Du siehst zu selten ins Error-Log des Servers.
            Davon wusste ich bislang noch nichts - werd da gleich noch reinschaun.

            du kannst die ausgabe von fehlermeldungen innerhalb des an den browser übermittelten quelltext auch einschalten, das ist vor allem während der entwicklungsphase ratsam, das errorlog sollte parallel dazu deaktiviert werden   damit es nicht unötig zumüllt - auf einem produktivsystem dann umgekehrt

      3. Lieber Johann,

        <div class="div_wrappers" id="div_anzeige" onMouseOver="wait_menue()">
             <span id="span_1"><b>Pflichtangaben:</b></span>
             <form action="add.php" method="post">
               <table id="table_add_lunch">
                 <tr>
                  <td onClick="infoClicked(1)"

        bei Deinem Quältext wird mir ja ganz anders...! Ich hatte hier einmal einen Vorschlag für ein Affenformular gemacht. Vielleicht hilft Dir dieser Vorschlag?

        Liebe Grüße,

        Felix Riesterer.

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

    if(!isset $_POST['Feldname']) {

    [...]

    Wo liegt der/die Fehler. Bisher hat die Pruefung von !isset($_POST['Feldname'])

    eine solche Prüfung existiert in Deinem Code nicht.

    nicht funktioniert.

    Es gibt nach wie vor nur eine Sache, die nicht funktioniert, und das ist die Formulierung "funktioniert nicht". Wie lautet die Fehlerbeschreibung?

    Ist der Ansatz so richtig oder was kann ich anders/besser machen?

    Man kann den Code ohne eine Duplizierung des Formular-Codes verfassen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. Hallöchen,

    mir fallen 2 Syntaxfehler auf:

    if(!isset $_POST['Feldname']) {

    Hier fehlen zwei Klammern (die Variable, die mit isset geprüft werden soll, muss in Klammern stehen):
    if(!isset ($_POST['Feldname'])) {

    }else {
    if (Fehlerpruefung==true) {

    Entweder diese zwei Zeilen zu einem elseif zusammenfassen...

    } elseif (Fehlerpruefung==true) {

    echo <<<FEHLERFORMULAR
        HTML-Code
    FEHLERFORMULAR;

    }else {
        echo <<<DATENSPEICHERUNG
        HTML-Code
    DATENSPEICHERUNG;
    }

    ...oder es fehlt hier die schließende Klammer des else vom ersten if:

    }

    ?>

    Bereich fuer footer (in html)
    </html>

    MfG
    vaudi