Ankündigung

Einklappen
Keine Ankündigung bisher.

stripslashes für mehrdimensionales array

Einklappen

Neue Werbung 2019

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

  • stripslashes für mehrdimensionales array

    Hallo,

    ich habe ein mehrdimensionales Array ($_SESSION-Array), bei dessen Einträgen ich gerne die Funktion stripslashes anwenden möchte.

    Dafür verwende ich folgenden Code:
    PHP-Code:
    if (get_magic_quotes_gpc()) 

        
    array_walk_recursive $_SESSION'stripslashes' ); 

    Leider bekomme ich folgende Warnungen:
    Code:
    Warning:  Wrong parameter count for stripslashes() in /xxx/xxx/xxx/test.php  on line 179
    Wo liegt der Fehler?

    Gruß Marcel

  • #2
    Meine Empfehlung wäre, mehr ins manual zu schauen, da gibt es für sowas sehr oft schon Lösungen/ Denkansätze. Erklärt dir auch, wo der Fehler ist

    Hinweis: Falls funcname mit den tatsächlichen Werten des Arrays arbeiten muss, muss man den ersten Parameter von funcname als Reference übergeben. Dann werden alle Änderungen an den Elementen im ürsprünglichen Array selbst vorgenommen.
    Oder du nimmst die von php.net empfohlene funktion:

    PHP-Code:
    /**
             * @see http://www.php.net/manual/de/security.magicquotes.disabling.php
             */
            
    if (get_magic_quotes_gpc()) {
                
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
                while (list(
    $key$val) = each($process)) {
                    foreach (
    $val as $k => $v) {
                        unset(
    $process[$key][$k]);
                        if (
    is_array($v)) {
                            
    $process[$key][stripslashes($k)] = $v;
                            
    $process[] = &$process[$key][stripslashes($k)];
                        } else {
                            
    $process[$key][stripslashes($k)] = stripslashes($v);
                        }
                    }
                }
                unset(
    $process);
            } 
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

    Kommentar


    • #3
      ich hab meine eigene geschriebn, hat mich noch nie im Stich gelassen:

      PHP-Code:
      <?php
      function stripArray($var) {
          if (
      get_magic_quotes_gpc()) {
              return (
      is_array($var) ? array_map('stripArray'$var) : stripslashes($var));
          }
      }
      "My software never has bugs, it just develops random features."
      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

      Kommentar


      • #4
        Zitat von rudygotya Beitrag anzeigen
        Meine Empfehlung wäre, mehr ins manual zu schauen, da gibt es für sowas sehr oft schon Lösungen/ Denkansätze. Erklärt dir auch, wo der Fehler ist
        Da gebe ich dir prinzipiell recht

        Ich hatte auch schon versucht den Parameter als Reference zu übergeben, mit:
        PHP-Code:
        if (get_magic_quotes_gpc()) 

            
        array_walk_recursive ( &$_SESSION'stripslashes' ); 

        Aber leider hat das nicht funktioniert, oder ich hab noch etwas anderes falsch gemacht.

        @Paul.Schramenko: array_map kann ich meines Erachtens leider nicht verwenden, weil ich ein mehrdimensionales Array habe.

        Kommentar


        • #5
          Zitat von maeck Beitrag anzeigen
          @Paul.Schramenko: array_map kann ich meines Erachtens leider nicht verwenden, weil ich ein mehrdimensionales Array habe.
          Doch kannst du. Ist übrigens die Funktion aus dem Manual (Beispiel #2 Verwendung von stripslashes() in einem Array):

          PHP: stripslashes - Manual

          Kommentar


          • #6
            Zitat von hpf Beitrag anzeigen
            Doch kannst du. Ist übrigens die Funktion aus dem Manual (Beispiel #2 Verwendung von stripslashes() in einem Array):
            wusste ich nicht mal =)
            Ich liebe array_map()... die geilste Funktion ever. Hab schon so viele geile rekursive Sachen damit gebastelt...
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar


            • #7
              Zitat von hpf Beitrag anzeigen
              Doch kannst du.
              Und wie? Wenn ich array_map einsetze, dann sind nach einem Durchlauf alle mehrdimensionalen Arrays abgeschnitten.

              Ich dachte, für das rekursive traversieren würde es extra array_walk_recursive geben?


              Kommentar


              • #8
                in der Funktion wird ja die Funktion selber nochmal aufgerufen, wenns ein Array ist... Und das wird auf jedes Element angewendet.
                Damit ist die rekursion perfekt
                "My software never has bugs, it just develops random features."
                "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                Kommentar


                • #9
                  Als Callback angegeben? Oder wie meinst du das? Ansonsten ist array_map meines Wissens auch nicht rekursiv, solange du nicht mit create_function arbeitest. Und, es zerhaut dir wirklich deine Request Vars.

                  edit:

                  Hier mit funktionierendem testcode:
                  PHP-Code:
                  <?php


                  $a 
                  = array (
                      
                  "foo" => array(
                          
                  "\'bar",
                          
                  "foo2" => array(
                              
                  "\'bar\'\'bar",
                              
                  "foo3"=> array(
                                  
                  "\'bar\'\'bar\'\'\'bar"
                              
                  )
                          )
                      ),
                      
                  "\'bar\'bar\'bar"
                  );
                  function 
                  strip(&$val, &$key) {
                      
                  $val stripslashes($val);
                  }


                  echo 
                  "<h3>array_map</h1>";
                  echo 
                  "<pre>";
                  var_dump(array_map("stripslashes"$a));
                  echo 
                  "</pre>";

                  echo 
                  "<h3>array_walk_recursive</h1>";
                  array_walk_recursive($a"strip");
                  echo 
                  "<pre>";
                  var_dump($a);
                  echo 
                  "</pre>";
                  Ausgabe:

                  Code:
                  array_map
                  
                  array(2) {
                    ["foo"]=>
                    string(5) "Array"
                    [0]=>
                    string(12) "'bar'bar'bar"
                  }
                  array_walk_recursive
                  
                  array(2) {
                    ["foo"]=>
                    array(2) {
                      [0]=>
                      string(4) "'bar"
                      ["foo2"]=>
                      array(2) {
                        [0]=>
                        string(9) "'bar''bar"
                        ["foo3"]=>
                        array(1) {
                          [0]=>
                          string(15) "'bar''bar'''bar"
                        }
                      }
                    }
                    [0]=>
                    string(12) "'bar'bar'bar"
                  }
                  I like cooking my family and my pets.
                  Use commas. Don't be a psycho.
                  [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                  Kommentar

                  Lädt...
                  X