Enrico: Ein für mich schwierig zu beschreibendes Problem

Hallo,

ich habe bislang Formulareingaben verarbeitet, indem ich auf die Feldinhalte über folgenden Code zugegriffen habe:

if (isset ($_REQUEST ["Name"]))
   {
      $Name = $_REQUEST ["Name"];
      ... weitere Anweisungen (Validierung, Bearbeitung, ...) ...
   }

Ich habe das nun umgestellt, um über eine Schleife zu prüfen, ob ein Feld überhaupt ein erlaubtes Feld ist, ob das Feld ein Pflichtfeld ist und weitere Anweisungen anzuschliessen:

$Erlaubte_Felder = array ("Name", "eMail", "Telefon", "Homepage", "Nachricht");
   $Pflichtfelder   = array ("Name", "eMail", "Nachricht");

$Fehlermeldungen = array ();
   $Fehlermeldung   = "";

foreach ($_REQUEST AS $Feld => $Inhalt)
   {
      if (in_array ($Feld, $Erlaubte_Felder))
      {
         if (isset ($Feld))
         {
            if (in_array ($Feld, $Pflichtfelder) && empty ($Inhalt))
            {
               $Fehlermeldungen[] = "$Feld ist ein Pflichtfeld";
               exit;
            }
         }

... weitere Anweisungen (Validierung, Bearbeitung, ...) ...
      }
   }

Jetzt hänge ich an dem Punkt, an dem ich die Felder wieder ausgeben möchte, um die Vorschau aufzubauen, da ich mit "echo $Name" nicht auf das Feld "Name" zugreifen kann.

Wie kann ich diese Zuordnung zwischen dem "gesplitteten" $_REQUEST und den Feldern als solche wieder herstellen?

Ich hoffe, ihr versteht, was ich meine ?!

Gruß
Enrico

  1. Hi,

    Jetzt hänge ich an dem Punkt, an dem ich die Felder wieder ausgeben möchte, um die Vorschau aufzubauen, da ich mit "echo $Name" nicht auf das Feld "Name" zugreifen kann.

    Du solltest dir angewöhnen, korrekte Begrifflichkeiten zu verwenden (bzw. erst die nötigen Grundlagen zu lernen, wenn du sie noch gar nicht kennst).

    Der Begriff „Feld“ hat in der vorliegenden Umgebung überhaupt keine sinnvolle Bedeutung.

    Du meinst entweder Parameter, oder Variablen.

    Wie kann ich diese Zuordnung zwischen dem "gesplitteten" $_REQUEST und den Feldern als solche wieder herstellen?

    Ich hoffe, ihr versteht, was ich meine ?!

    Nein.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo ChrisB,

      ok, 2. Versuch:

      Ich durchwandere über eine foreach-Schleife das Array $_REQUEST, in dem die Namen und Inhalte der Eingabefelder eines Formulares liegen, d.h. mein Zugriff erfolgt nicht über $Name = $_REQUEST ["Name"], sondern über die Bildung von Assoziationen mittels $Feld => $Inhalt.

      Aufgrund dieser Systematik kann ich logischerweise nicht mehr über echo $Name auf den Inhalt des Eingabefeldes zurückgreifen.

      Daher meine Frage, wie ich - entsprechend meines Codes - "wieder" an die Inhalte der Eingabefelder komme.

      Gruß
      Enrico

      1. Hi,

        Ich durchwandere über eine foreach-Schleife das Array $_REQUEST, in dem die Namen und Inhalte der Eingabefelder eines Formulares liegen, d.h. mein Zugriff erfolgt nicht über $Name = $_REQUEST ["Name"], sondern über die Bildung von Assoziationen mittels $Feld => $Inhalt.

        Aufgrund dieser Systematik kann ich logischerweise nicht mehr über echo $Name auf den Inhalt des Eingabefeldes zurückgreifen.

        Aber über $_REQUEST['Name'] kannst du, und den Schlüssel 'Name' hast du bereits in deinem Array $Erlaubte_Felder vorliegen.

        Daher meine Frage, wie ich - entsprechend meines Codes - "wieder" an die Inhalte der Eingabefelder komme.

        So, wie du vorher bei der Überprüfung auch dran kommst.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hallo ChrisB,

          logisch, freilich, das war's.

          Danke :-)

          Gruß
          Enrico

          1. Moin!

            Du solltest vielleicht bei der Typisierung noch weiter gehen:

            Statt:

            $Erlaubte_Felder = array ("Name", "eMail", "Telefon", "Homepage", "Nachricht");
               $Pflichtfelder   = array ("Name", "eMail", "Nachricht");

            dann gleich richtig:

            $arRequests['feldname']['pflicht']       = TRUE;                   # TRUE, FALSE  
            $arRequests['feldname']['typ']           = 'INPUT';                # INPUT, AREA, SELECT, RADIO, CHECKBOX  
            $arRequests['feldname']['erlaubteWerte'] = array('Hallo', 'Welt'); # oder: FALSE;  
            $arRequests['feldname']['prueffunktion'] = 'teste_plz()';          # oder: FALSE;  
            
            

            Das lässt sich dann prima auswerten und die entsprechenden Aktionen ausführen. Noch besser wird es, wenn Du das Ganze hübsch als Objekt mit noch hübscheren privaten Funktionen verpackst...

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix

            1. Tach.

              Du solltest vielleicht bei der Typisierung noch weiter gehen:

              Und vorher am besten einen Blick auf PHPs Filterfunktionen werfen, um ggf. das Rad nicht unnötig neu erfinden zu müssen.

              --
              Always remember that you are unique. Just like everybody else.
  2. Hi!

    if (isset ($_REQUEST ["Name"]))

    Warum das unspezifische $_REQUEST und nicht $_GET oder $_POST, so wie du das beim Formularerstellen festgelegt hast?

    $Name = $_REQUEST ["Name"];

    Das enfache Umkopieren bekommt man zwar ständig zu sehen, ist aber immer wieder sinnlos. Und das hat dich dann auch bei der Findung der Lösung behindert, weil dein Tunnelblick auf $Name lag. Wenn du stattdessen stets gleich mit $_GET/$_POST gearbeitet hättest, vielleicht ...

    $Fehlermeldungen = array ();
       $Fehlermeldung   = "";

    Wozu brauchst du $Fehlermeldung?

    foreach ($_REQUEST AS $Feld => $Inhalt)
       {
          if (in_array ($Feld, $Erlaubte_Felder))
          {
             if (isset ($Feld))

    Diese Prüfung ist sinnlos. Natürlich ist $Feld vorhanden und ungleich NULL, denn foreach hat es angelegt. Du willst jedoch $_REQUEST[$Feld] auf Existenz prüfen, was du aber auch nicht brauchst, denn wenn es nicht existiert, iteriert das foreach auch nicht drüber. Du muss über $Pflichtfelder iterieren und schauen, ob dazu ein Eintrag in $_REQUEST (bzw. $_GET/$_POST) vorhanden ist. Und das muss unabhängig von der $Erlaubte_Felder-Prüfung passieren.

    Lo!