Enrico: Formularfelder übergeben / Pflichtfelder prüfen

Hallo,

jetzt ist es soweit, dass ich absolut nicht mehr mit meiner serverseitigen Überprüfung von Formularfeldern weiterkomme.

Mein Problem greift das Problem meines Threats "Pflichtfelder feststellen" auf, bezieht sich nun aber auch auf die gezielte Übernahme der Feldinhalte der einzelnen Formularfelder.

Hier der zum Teil erheblich reuzierte Code:

=-=-=-=-=-=-=-=-=
Datei Eintrag.php
=-=-=-=-=-=-=-=-=

<?php

... weiterer Code (hier nicht von Bedeutung) ...

echo '<form method="post" action="' . $PHP_SELF . '">
          <input type="hidden" name="Aktion" value="Speichern">
          <input type="hidden" name="Felder" value="$Name,$eMail,$Homepage,$Text">
          <input name="Name" ...>
          <input name="eMail" ...>
          <input name="Homepage" ...>
          <textarea name="Text"></textarea>

... weiterer Code (hier nicht von Bedeutung) ...

</form>';

?>

-=-=-=-=-=-=
Validierung:
-=-=-=-=-=-=

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

$Array_Felder        = explode (",", $_POST ['Felder']); // [2]

for ($i = 0; $i < count ($Array_Felder); $i++)
{
  $Array_Felder [$i] = isset ($_POST [$Array_Felder [$i]]) ? $_POST [$Array_Felder [$i]] : ""; // [3]

if (empty ($Array_Felder [$i])) // [4]
  {
    if ($Pflichtfeld [$Array_Felder [$i]] == "Ja") // [5]
      echo $Array_Felder [$i]] . " muss ausgefüllt werden<br>";
  }
}

[1] Hier wird das Formular-spezifische Array $Pflichtfeld definiert.

[2] Hier wird der Inhalt des versteckten Feldes namens "Felder" aufgesplittet. So erhalte ich ein Array mit allen Formularfeldern, die zur Verfügung stehen (Pflichtfelder und optionale Felder, also in diesem Fall "$Name", "eMail", "$Homepage" und "$Text").

[3] Hier soll jedes Element des Arrays Felder (siehe Punkt 1) durchlaufen und entweder mit dem Inhalt gefüllt oder auf Null gesetzt werden

[4] Hier soll überprüft werden, ob die einzelnen Elemente des Arrays $Array_Felder leer sind

[5] Jetzt wird geprüft, ob das Arrayelement $Pflichtfeld [$Array_Felder [$i]] ein Pflichtfeld darstellt oder nicht.
    {
      echo $Array_Felder [$i] . " muss eingegeben werden";
    }
  }
}

Welche(r) Fehler gilt es noch auszumerzen ?

Ich hoffe, Ihr könnt mir weiterhelfen.

Schon mal vielen Dank,

Gruss, Enrico

  1. hi,

    Mein Problem greift das Problem meines Threats "Pflichtfelder feststellen" auf, bezieht sich nun aber auch auf die gezielte Übernahme der Feldinhalte der einzelnen Formularfelder.

    dass ich es nicht für sonderlich sinnvoll halte, die deklaration der pflichtfelder vom client übergeben zu lassen, weil ich sie damit eben ganz schnell zu nicht-pflichtfeldern machen kann, hatte ich dir ja in deinem ersten thread schon gesagt ...

    echo '<form method="post" action="' . $PHP_SELF . '">
              <input type="hidden" name="Aktion" value="Speichern">
              <input type="hidden" name="Felder" value="$Name,$eMail,$Homepage,$Text">

    dass $Name, $eMail etc. hier nicht durch ihre werte ersetzt werden, ist beabsichtigt?

    $Array_Felder        = explode (",", $_POST ['Felder']); // [2]

    da stehen jetzt also die textstrings $Name, $Email etc. drin.

    for ($i = 0; $i < count ($Array_Felder); $i++)
    {
      $Array_Felder [$i] = isset ($_POST [$Array_Felder [$i]]) ? $_POST [$Array_Felder [$i]] : ""; // [3]

    was ergibt denn jetzt $_POST [$Array_Felder [$i]]?
    da wie gesagt in $Array_Felder nur $Name, $eMail etc. drin stehen, erfolgen hier jetzt also zugriffe auf
    $_POST['$Name']
    $_POST['$eMail']
    etc.
    die namen deiner formularfelder sind aber Name, eMail etc. - natürlich nicht mit vorangestelltem $-zeichen. das passt hier also schon mal nicht zusammen ...

    if ($Pflichtfeld [$Array_Felder [$i]]

    gleiches problem, die indizes von $Pflichtfeld lauten _nicht_ $Name, $eMail, etc.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."