referenz problem

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

  • referenz problem

    hallo zusammen

    habe ein problem irgendwie greift die referenz nicht !
    ich übergebe ein array $_GET und die function soll mittels der referenz direkt auf den inhalt de arrays zeigen und überschreiben aber er tut es nicht und ich weiss nicht warum hat das was mit register_global zu tun
    oder safe_mode ?

    naja keine ahnung hier der code :
    PHP-Code:
    function magic_code(&$input) {
        if(
    get_magic_quotes_gpc()) {
            
    stripslashes($input);
        }
                foreach(
    $input as $key) {
                    if(!
    is_numeric($input[$key])) {
                        
    $input[$key]=strip_tags($input[$key]);
                        
    $input[$key]=mysql_real_escape_string($input[$key]);
                        
                    }
                }
                
    var_dump($input);
    }

    magic_code($_GET); 
    ich habe natürlich mit var_dump ne ausgabe gemacht ($input) in der vari sind die sgml-tags gelöscht worden aber im array $_GET nicht die function arbeitet also leider noch mit einer kopie des inhaltes und das soll er nicht was kann ich dagegen tun ?

    denn ich muss hier ohne return arbeiten ich war zu faul immer die function immer wieder zu schreiben bei jeder datenbank abfrage !

    danke schonmal !!

  • #2
    Re: referenz problem

    Erst mal dürfte es wohl unsinnig sein, stripslashes auf ein Array anwenden zu wollen.

    Und dann solltest du im Manual bzgl. foreach noch mal nachlesen, wie das da mit Referenzen aussieht.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ja das mit stripslashes muss ich noch ändern !

      super also foreach arbeitet immer mit kopien egal ob mit oder ohne referenz !

      ich hab es mal so probiert aber das klappt nicht :
      PHP-Code:
      function magic_code(&$input) {
          if(
      get_magic_quotes_gpc()) {
          
      $output=array();
          
      $output2=array();
              foreach(
      $input as $key) {
                  if(!
      is_numeric($input[$key])) {
                      
      $output[$key]=stripslashes($input[$key]);
                  }
              }
          }
                  foreach(
      $output as $key) {
                      if(!
      is_numeric($output[$key])) {
                          
      $output2[$key]=strip_tags($output[$key]);
                          
      $output2[$key]=mysql_real_escape_string($output[$key]);
                      }
                  }
          
      $input=$output2;
      }

      magic_code($_GET); 

      ich komm damit nicht so klar kann mir bitte einer helfen ich blick da nicht mehr durch glaub ich !

      und ich hab noch ne frage : nehmen wir mal an die function funktioniert und er überschreibt die werte im $_GET array,
      greif ich dann mit $_REQUEST auf die gleichen daten zu oder muss ich dann immer mit $_GET arbeiten ?

      damit würdet iht mir echt helfen denn ich steh hier jetzt echt vor ein riesen problem wenn ich das nich hin bekomme muss ich das ganze script umschreiben !

      danke schonmal !

      Kommentar


      • #4
        in deine Funktion:

        return $output2;

        außerhalb:

        PHP-Code:
        $_GET magic_code($_GET);
        $_REQUEST magic_code($_REQUEST);
        // usw... $_POST, $_SESSION, $_COOKIE... 
        ich glaube

        Kommentar


        • #5
          foreach($input as $key => $value)
          $input[$key] = stripslashes($value);

          So wird ansatzweise ein Schuh draus und du musst nicht mit tausenden von Dummy-Arrays rumhantieren;
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            ah super danke ihr beiden da muss man erst drauf kommen !

            ich probier das gleich ma, aber das müsste es sein !

            mfg

            washu

            Kommentar


            • #7
              hi hab es jetzt mal so probiert

              PHP-Code:
              function magic_code($input) {
                  if(
              get_magic_quotes_gpc()) {
                      foreach(
              $input as $key => $value) {
                          if(!
              is_numeric($value)) {
                              
              $input[$key]=stripslashes($value);
                          }
                      }
                  }
                          foreach(
              $input as $key => $value) {
                              if(!
              is_numeric($value)) {
                                  
              $input[$key]=strip_tags($value);
                                  
              $input[$key]=mysql_real_escape_string($value);
                              }
                          }
                  return 
              $input;
              }

              $_GET magic_code($_GET);

              var_dump($_GET); 
              aber es funzt immer noch nicht was mach ich falsch ist das überhaupt so möglich ?

              wenn ich in der foreach schleife solch eine ausgabe mache print strip_tags($value); gibt er den string korrekt aus alle sgml tags sind weg wenn ich es aber wieder in einem array speicher dann wird strip_tags nicht ausgeführt !

              will mich php verarschen

              Zuletzt geändert von washu; 17.01.2007, 13:18.

              Kommentar


              • #8
                so hab es geschafft er macht jetzt das was er soll

                er maskiert und entfernt alle sgml tags aus das array und somit sind die usereingaben global von böswilligen code befreit und für die abfrage an einer datenbank vorbereitet !

                für leute die diesen code benutzen wollen oder ein ähnliches problem haben hier meine lösung :
                PHP-Code:
                function magic_code($input) {
                $output=array();
                    if(
                get_magic_quotes_gpc()) {
                        foreach(
                $input as $key => $value) {
                                
                $output[$key]=stripslashes($value);
                        }
                    }
                            foreach(
                $input as $key => $value) {
                                    
                $output[$key]=mysql_real_escape_string(strip_tags($value));
                            }
                    return 
                $output;
                }

                $_REQUEST magic_code($_REQUEST); 
                irgendwie hatte php wohl ein problem bei dieser schreib art keine ahnung warum

                $input[$key]=strip_tags($value);
                $input[$key]=mysql_real_escape_string($value);

                Danke an aklle beteiligten hier ihr habt mir sehr geholfen !!!!

                Kommentar


                • #9
                  Original geschrieben von washu
                  er maskiert und entfernt alle sgml tags aus das array und somit sind die usereingaben global von böswilligen code befreit und für die abfrage an einer datenbank vorbereitet !
                  Abgesehen davon, dass strip_tags u.U. noch mehr macht als nur "Tags" zu entfernen - warum sollte man das überhaupt wollen?

                  Wenn hier Tags entfernt würden - dann könnten HTML-Probleme hier im Forum ja gar nicht diskutiert werden ...
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X