Enrico: Beliebige Formulare prüfen: guter Ansatz ? >>> Problem

Beitrag lesen

Hallo,

leider beschäftigt mich das Thema "Formulare mit PHP prüfen" immer noch mehr als gewaltig.

Um etwaige Einbindungsfehler mit einzubeziehen, gebe ich Euch mal den kompletten Code an und möchte mich an dieser Stelle gleich mal für mein langes Posting entschuldigen:

=-=-=-=-=-=-=-=-=-=-=-
Datei "Gaestebuch.php"
=-=-=-=-=-=-=-=-=-=-=-

Diese Datei ist die Steuerzentrale meines Gästebuches und bindet, je nach übergebenem Wert der Variable "Aktion" die entsprechenden Dateien ein.

Hier klappt alles, bis auf die Überprüfung der Eingaben. Somit werde ich mich auch nur auf diesen Teil beschränken:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <?php

include 'Inc/PHP/Gaestebuch_Variablen.php';

$Aktion = isset ($_REQUEST ['Aktion']) ? trim ($_REQUEST ['Aktion']) : "";

switch ($Aktion)
      {
        ...
        case "Eintrag_speichern":
        {
          include $Pfad . 'Validierung_Variablen.php';
          include $Pfad . 'Validierung_Funktionen.php';
          include $Pfad . 'Validierung.php';
          include $Pfad . 'Gaestebuch_Eintrag_speichern.php';
          break;
        }
      }
    ?>
  </body>
</html>

=-=-=-=-=-=-=-=-=-=-
Gaestebuch_Variablen
=-=-=-=-=-=-=-=-=-=-

Hier definiere ich u.a. die auszufüllenden Pflichtfelder:

$Pflichtfeld = array ("Name"     => "Ja",
                      "eMail"    => "Nein",
                      "Homepage" => "Nein",
                      "Text"     => "Ja");

=-=-=-=-=-=-=-=-=-=-=-=-=
Validierung_Variablen.php
=-=-=-=-=-=-=-=-=-=-=-=-=

In dieser Datei definiere ich jediglich die Fehlermeldungen nach folgendem MUSTER:

$Laenge= array ("Name"  => array ("min" => 3,
                                  "max" => 30));

Die Fehlermeldungen werden ähnlich definiert, nur dass ich hier keine Nummernzuweisungen habe:

$Fehler = array ("Name" => array ("Eingabe fehlt",
                                  "Du musst Deinen Namen eingeben"));

=-=-=-=-=-=-=-=-=-=-=-=-=-
Validierung_Funktionen.php
=-=-=-=-=-=-=-=-=-=-=-=-=-

In dieser Datei werden alle Funktionen abgelegt, die ich zur Überprüfung verwende:

Sorgenkind ist hier folgende Funktion:

function Laenge_pruefen ($Feld_Name, $Feld_Inhalt, $min, $max)
{
  if (strlen ($Feld_Inhalt) === 0)
  {
    if ($Pflichtfeld [$Feld_Name] === "Ja")
      $Fehlermeldung .= $Feld_Name . "<ul><li>" . $Fehler [$Feld_Name][0] . "<ul><li>" . $Fehler [$Feld_Name][1];

return false;
  }
  else
    if (strlen ($Feld_Inhalt) < $min)
    {
      $Fehlermeldung .= "Feld "" . $Feld_Name . ""<ul><li>" . $Fehler [$Feld_Name][2] . "<ul><li>" . $Fehler [$Feld_Name][3];
      return false;
    }
    else
      if (strlen ($Feld_Inhalt) > $max)
      {
        $Fehlermeldung .= "Feld "" . $Feld_Name . ""<ul><li>" . $Fehler [$Feld_Name][4] . "<ul><li>" . $Fehler [$Feld_Name][5];
        return false;
      }

return true;
}

Diese Funktion bildet den Kern der Überprüfung, da hier die Länge der Eingabe und auch die Pflichtfelder geprüft werden.

=-=-=-=-=-=-=-=
Validierung.php
=-=-=-=-=-=-=-=

global $HTTP_POST_VARS;
global $HTTP_GET_VARS;

$Methode  = (isset ($HTTP_POST_VARS)) ? "Post"          : "Get";
$Formular = ($Methode == "Post")      ? $HTTP_POST_VARS : $HTTP_GET_VARS;

$Fehlermeldung = "<ul><li>";

foreach ($Formular as $Feld_Name => $Feld_Inhalt)
{
  if (isset ($Laenge [$Feld_Name]["min"])) // [1]
  {
    $Laenge_ok = Laenge_pruefen ($Feld_Name,
                                 $Feld_Inhalt,
                                 $Laenge [$Feld_Name]["min"],
                                 $Laenge [$Feld_Name]["max"]); // [2]

if ($Laenge_ok === true) // [3]
    {
      switch ($Feld_Name)
      {
        case "Name":
        {
          ...
        }
        ...
      }
    }
  }
}

$Fehlermeldung .= "</ul></ul></ul>";

if (strlen ($Fehlermeldung) > 23)
  echo $Fehlermeldung;

Hiermit sollen Formulare überprüft werden, unabhängig davon, wie sie übergeben wurden (mit "post" oder mit "get").

Da mit meiner foreach-Schleife auch weitere, für mich unnötige Felder übergeben werden, will ich die Überprüfung auf die Felder einschränken, die ich auch wirklich überprüfen will. Diese Felder filtere ich mit der Überprüfung [1] heraus, da ich bei allen zu überprüfenden Feldern eine Grössenangabe definiert habe.

Wenn das aktuelle Formularfeld eine Grössendefinition besitzt ([1]), dann wird die Länge der Eingabe geprüft. Dieser Funktion wird der Name des Feldes, dessen Inhalt und die Grenzwerte für die minimale und die maximale Länge übergeben [2].

Und genau hier scheitert meine Prüfung.

Diese Funktion gibt mir keine Fehlermeldung aus, liefert aber auch keine Fehlermeldung(en), d.h. syntaktisch ist alles richtig.

Mir ist aufgefallen, dass meine Definitionen für Pflichtfelder und die Längenangaben "ignoriert" werden und ich weiss absolut nicht, warum.

Die Unterstriche, die ich verwendet habe, kommen später noch weg, stellen aber aktuell auf meinem Rechner noch kein Problem dar.

Woran liegt es, dass meine Prüfung nicht funktioniert ?

Schon mal vielen Dank für Eure Zeit und Eure Lösungsvorschläge.

Gruss, Enrico