$_POST aus array "füttern"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • $_POST aus array "füttern"

    Hallo Forum,

    es geht um folgenden Code:
    PHP-Code:
    $felder = array(
    'name',
    'email',
    'betreff',
    'nachricht'
    );

    foreach (
    $felder as $feld) {
    $
    $feld $_POST[$feld];

    Dadurch werden alle 4 Eingabefelder eines Kontaktformulars zu Variablen. Da ich diese immer wieder benötige/bearbeite, verhindert der array Redundanz, denn ich kann ihn immer wieder einsetzen. Aber ich habe mal irgendwo gelesen, dass $_POST keine Variablen enthalten sollte - dennoch funktioniert es hier einwandfrei, ist es also okay oder würdet Ihr es anders lösen?

    Danke & Grüße,
    Erik

  • #2
    Wozu soll das gut sein?

    Was spricht dagegen bei Bedarf einfach direkt auf $_POST["name"] usw. zuzugreifen? Wegen der paar Zeichen die du da mehr schreiben musst?
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Den Sinn habe ich doch bereits erklärt: Um Redundanz zu vermeiden. Und ich muss diesen array eh anlegen (denn ich setze ihn noch mehrere Male ein), also warum ihn nicht auch hierfür nutzen? Außerdem kann ein solches Formular dann leicht um viele weitere Felder erweitert werden: Einfach den array erweitern und fertig.

      Also nochmal meine Frage: Ist das so okay, vor allem das [COLOR=red]$_POST[$feld][/COLOR]? Aber ich denke mal, dass es okay ist, sonst würde es ja nicht funktionieren ;-)

      Kommentar


      • #4
        also ich habe eher etwas gegen das 2. Dollarzeichen vor dem $feld

        aber warum sollte das nicht in Ordnung gehen? $_POST ist aus dieser Sicht ein ganz normales Array..
        signed oder unsigned... das ist hier die Frage

        Kommentar


        • #5
          Original geschrieben von case
          [B]also ich habe eher etwas gegen das 2. Dollarzeichen vor dem $feld
          Das ist schon okay - variable Variablen ;-) http://www.php-center.de/de-html-man....variable.html

          Kommentar


          • #6
            Original geschrieben von erikbln
            Den Sinn habe ich doch bereits erklärt: Um Redundanz zu vermeiden.
            Vielleicht überseh ich ja auch was - aber IMHO erreichst du das genaue Gegenteil - die übertragenen Formular-Daten liegen ja bereits im $_POST-Array vor - warum die Daten nochmal in normale Variablen übertragen?

            Liegt da evtl. ein Verständnisproblem vor?

            Nimm statt deinem Code mal das hier zum veranschaulichen
            PHP-Code:
            <?php 

            foreach($_POST as $field=>$value)
            {
            echo 
            $field.": ".$value."<br />"
            }

            ?>
            Du kannst im aufrufenden Html-Formular nun beliebig Felder hinzufügen oder entfernen - du wirst immer alle übertragenen Daten angezeigt bekommen.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Original geschrieben von Quetschi warum die Daten nochmal in normale Variablen übertragen?
              Weil ich die Eingaben im weiteren Verlauf der Verarbeitung noch mehrfach bearbeite (trim, striptags, bei aktiviertem magic_quotes stripslashes etc.).

              Letztlich will ich nur, dass die Eingabe in input name="email" zur Variable $email wird, und analog dazu alle übrigen Felder, die schließlich alle in einem array stehen, den man dann bearbeitet (anstatt jedes Feld einzeln). Meine Methode funktioniert einwandfrei, aber Deine werde ich auch mal probieren.

              Kommentar


              • #8
                Original geschrieben von erikbln
                Weil ich die Eingaben im weiteren Verlauf der Verarbeitung noch mehrfach bearbeite (trim, striptags, bei aktiviertem magic_quotes stripslashes etc.)....anstatt jedes Feld einzeln... .
                PHP-Code:
                <?php 

                foreach($_POST as $field=>$value)
                {
                $value trim($value);
                $value strip_tags($value);

                //Bei Bedarf $value zurück ins $_POST-Array schreiben für spätere Verwendung
                $_POST[$field] = $value;

                echo 
                $field.": ".$value."<br />"
                }

                ?>
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Vielen Dank, das sieht schon sehr gut aus und bringt mich auf jeden Fall auf einen kürzeren Weg als meine ursprüngliche Variante. Ich arbeite weiter daran und poste dann das Ergebnis.

                  Kommentar


                  • #10
                    Folgendermaßen geht es nun:
                    PHP-Code:
                    $felder = array();

                    foreach(
                    $_POST as $feld => $wert) {
                    array_push($felder$feld);
                    $
                    $feld htmlspecialchars(trim(strip_tags($wert)));

                    // falls magic_quotes aktiviert > stripslashes
                    if (get_magic_quotes_gpc() === 1) {
                    $
                    $feld stripslashes($$feld);
                    }


                    Der Vorteil ist, dass ich die einzelnen Felder jetzt gar nicht mehr per Hand schreiben muss. Dennoch lasse ich mir einen array mit den Variablen-Namen anlegen, denn dadurch kann ich sie ganz am Ende (d.h. unmittelbar vorm Absenden) nochmals bearbeiten:
                    PHP-Code:
                    foreach ($felder as $feld) {
                    $
                    $feld utf8_decode(html_entity_decode($$feld));

                    Kommentar

                    Lädt...
                    X