Nicht markierte Checkboxen per $_POST

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

  • Nicht markierte Checkboxen per $_POST

    Hallo !

    folgende Situation:

    ich übertrage die Formulardaten einer Suchmaske per $_POST an das
    auszugebende Element.

    Da die Ausgabe über mehrere Seiten erfolgt habe ich die Postdaten
    in die $_SESSION Variable übertragen mittels:

    PHP-Code:
    if ($HTTP_POST_VARS){
        
    //echo "POSTDATEN:<br>";
        //print_r ($HTTP_POST_VARS)."<br><br>";
        
    foreach($_POST as $key => $value)
        
    $_SESSION[$key] = $value;
    }
    //echo "<br>SESSIONDATEN:<br>";          
    //print_r ($_SESSION); 
    Ich benötige aber auch die leeren Checkboxen welche dann in die Session-Variable geschrieben werden. Dies funktioniert leider nicht.
    Alle anderen Felder werden mit "Leer" gefüllt. Warum keine "Checkboxen" ?

    POSTDATEN:
    Array ( [kunde] =>123 [project] => [plz] => [vertrieb] => [country] => [month] => [year] => [branche] => [sto] => [product] => [typ] => [fremd] => [konzept] => [equip] => [messen] => [firma] => [fototyp] => [medien] => )

    SESSIONDATEN:
    Array ( [kunde] =>123 [project] => [plz] => [vertrieb] => [country] => [month] => [year] => [branche] => [sto] => [product] => [typ] => [fremd] => [konzept] => [equip] => [messen] => [firma] => [fototyp] => [medien] => [einzelmodul] => on [fassade] => on ) 0

    Die Postdaten der leeren Checkboxen werden hier leider nicht übermittelt.
    In der Session bleiben diese natürlich erhalten.
    Ich möchte auch keine einzelnen Checkboxen abfragen, da dies auf Dauer zu aufwändig währe, da sich diese Suchmaske beliebig erweitern lässt.

    Weiß jemand warum das so ist ?

    Ich habe die "Suche Funktion" bereits seit 3 Stunden benutzt




    Vielen Dank


    Gruß Ingo
    Zuletzt geändert von gringo15; 06.10.2005, 21:05.

  • #2
    Ich benötige aber auch die leeren Checkboxen welche dann in die Session-Variable geschrieben werden. Dies funktioniert leider nicht.
    Is so. Wenn der Browser da keine Lust zu hat, dann hat er die halt nicht.

    Die Postdaten der leeren Checkboxen werden hier leider nicht übermittelt.
    In der Session bleiben diese natürlich erhalten.
    Nur, dass sie in der Session rein gar nichts mit der Checkbox zu tun haben.

    Kommentar


    • #3
      PHP-Code:
          foreach($_POST as $key => $value)
          
      $_SESSION[$key] = $value
      Das ist n Witz, oder???

      Kommentar


      • #4
        1. http://tut.php-q.net/formulare.html#u13
        2. http://de3.php.net/manual/en/function.isset.php

        Kommentar


        • #5
          @TobiaZ

          warum sollte das ein Witz sein ?

          Kennst du eine bessere Möglichkeit Variablen über
          mehrere Seiten zu transportieren ?

          Die Möglichkeit die Postdaten über "hidden" Felder zu überreichen
          hat bei mir ab der 3ten Seite leider nicht mehr funktioniert.

          Gruß Ingo

          Kommentar


          • #6
            Die Möglichkeit die Postdaten über "hidden" Felder zu überreichen hat bei mir ab der 3ten Seite leider nicht mehr funktioniert.
            heißt nicht, dass sie an sich nicht funktioniert.

            aber darum ging's nicht - tobiaz meinte vermutlich, dass es nicht ungefährlich ist, ausnahmslos alles, was vom client kommt, in eine session zu stecken.

            selbst wenn dein benutzermanagement (solltes es eins geben) anders funktioniert und dadurch nicht beeinflusst werden kann, lässt es immer noch türen für einen ddos-angriff übrig.

            Kommentar


            • #7
              $_SESSION = $_POST;

              spart dir die foreach und zeigt dir noch eindeutiger, dass du dem Benutzer erlaubst alles was er will in die Session zu schreiben.

              Also vorher die erlaubten indexe definieren und die Werte entsprechend überprüfen.

              Never trust incomeing data

              Kommentar


              • #8
                Hmm...

                Ich habe das jetzt so gelöst:
                PHP-Code:
                if (isset($HTTP_POST_VARS)){
                    unset(
                $_SESSION[$postdata]);
                    foreach(
                $_POST as $key => $value)
                    
                $_SESSION[$postdata][$key] = $value;

                die Seite wird wohl primär nur in unserem Intranet laufen.
                Das einer von den Bürofuzzis einen DDOS Angriff auf diese Seite
                ausführen halte ich für recht unwahrscheinlich
                Aber der Sicherheitsaspekt ist trotzdem nicht zu vernachlässigen,
                deshalb werde ich zumindest die Indexe auf Validät prüfen.
                Eine Benutzerverwaltung muß ich noch einbauen.
                Deshalb das zweidimensionale Array.

                Aber trotzdem Vielen Dank
                Gruß Ingo

                P.S Diese (isset()) Abfrage? Ist diese der Sauberkeit des Codes wegen, oder kann ich mir dieses "isset" sparen.
                Gerade die C++ Progger sind doch auch extrem schreibfaul.
                Zuletzt geändert von gringo15; 07.10.2005, 18:42.

                Kommentar


                • #9
                  $_SESSION[postdata] = $_POST; willst du nicht verwenden?

                  Kommentar


                  • #10
                    P.S Diese (isset()) Abfrage? Ist diese der Sauberkeit des Codes wegen, oder kann ich mir dieses "isset" sparen.
                    Gerade die C++ Progger sind doch auch extrem schreibfaul.
                    Ne isset-Abfrage ist "eigentlich" überflüsssig, denn das $_POST -Array existiert sowieso immer!

                    Noch überflüssiger ist sie, weil du auf http-post-vars prüfst, aber _post verwendest. Sinn ist klar?

                    Kommentar


                    • #11
                      Hallo !


                      $_SESSION[postdata] = $_POST; willst du nicht verwenden?
                      Hmm .. Danke für den Tip .. Aber in die Schleife will ich noch die
                      Validätsprüfung einbauen ! Denke so wird der Code kompakter.

                      Ne isset-Abfrage ist "eigentlich" überflüsssig, denn das $_POST -Array existiert sowieso immer!

                      Noch überflüssiger ist sie, weil du auf http-post-vars prüfst, aber _post verwendest. Sinn ist klar?
                      Wenn ich ehrlich bin nicht ganz !
                      Ist http-post-vars nicht das gleiche wie das Post - Array ??
                      Wenn dann währe die Abfrage immer TRUE, und dann würde mir die Routine jedesmal die $_SESSION[$postdata] überschreiben.
                      Das tut Sie aber nicht !

                      BTW: Die "isset-Frage" bezieht sich nicht nur auf diese Beispiel.
                      Ist es generell angebracht die if() Abfragen mit isset zu schreiben, oder kann ich mir das sparen. Funktionieren tut beides !

                      Kommentar


                      • #12
                        Ist http-post-vars nicht das gleiche wie das Post - Array ??
                        Naja, nicht so ganz. Siehe das Manual. $HTTP_POST_VARS ist in erster linie erstmal veraltet. Und wenn du die möglichkeit, $_POST zu verwenden, hast, dann hat die post-vars-variante in deinem Code nichts mehr zu suchen?

                        Wenn dann währe die Abfrage immer TRUE, und dann würde mir die Routine jedesmal die $_SESSION[$postdata] überschreiben.
                        Ja, und wenn kein if davor ist, genauso! empty() sollte dir ein Begriff sein. Ich betrachte das zumindest als Grundlagen.

                        Fazit: $_POST mit empty() verwenden!!!

                        Ist es generell angebracht die if() Abfragen mit isset zu schreiben, oder kann ich mir das sparen. Funktionieren tut beides !
                        Letzteres halte ich für humbug. Deine Überzeugung kommt vielleicht aber auch daher, dass du unsere Regeln noch nicht verinnerlicht hast Wie sieht es mit error_reporting E_ALL und undefinierten Variablen/Indexen aus? Aus diesem Grund ist eine isset-Abfrage bei allen POST und GET abfragen zwingend notwendig, es sei denn, sie fand vorher statt. Nur variablen, bei denen du 100% sicher bist, dass sie bereits definiert sind, erfordern keine vorherige prüfung auf existenz.

                        Kommentar


                        • #13
                          Aha .. jetzt wird einiges klar !

                          Ich stolpere im Inet noch über "alten" Code von Php.
                          Nja .. da werde ich meine PHP-Bücher nochmals durchwälzen.



                          Ja, und wenn kein if davor ist, genauso! empty() sollte dir ein Begriff sein. Ich betrachte das zumindest als Grundlagen.
                          Jetz verstehe ich. Stimmt ... das sollte Grundlage sein

                          Ich komme programmiertechnisch leider aus einer komplett anderen Richtung. Dewegen habe ich noch manchmal Schwierigkeiten mit PHP.

                          Nichtsdestotrotz
                          Vielen Dank

                          Kommentar

                          Lädt...
                          X