Boubou: Mysql_real_Escape auf Array

Hallo zusammen. Ich weiss dass mysql_real_escape_string einen string erfordert. Ich habe jetzt ein Array. Daher hatte ich sowas geschrieben

foreach($array as $key => $werte)
{
   $werte = mysql_real_escape($werte);
   $newarray[] = $werte; // damit er mir das gesäuberte Array wiedergibt
}
return $newarray.

Allerdings kommt jetzt nichts an also das $newarray kommt nicht an. Gibt es eine Mödlichkeit auf ein Array mysql_real_escape zu machen?

MFG
Boubou

  1. Hi,

    foreach($array as $key => $werte)
    {
       $werte = mysql_real_escape($werte);
       $newarray[] = $werte; // damit er mir das gesäuberte Array wiedergibt
    }
    return $newarray.

    Allerdings kommt jetzt nichts an also das $newarray kommt nicht an.

    Was heisst "es kommt nichts an"?

    Aus welchem Kontext heraus versuchst du hier return zu verwenden, wo ist die Initialisierung deines Arrays?

    Gibt es eine Mödlichkeit auf ein Array mysql_real_escape zu machen?

    Sowas wie array_walk gäbe es auch noch.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Was heisst "es kommt nichts an"?

      Das heisst das die Methode die dieses "gesäuberte Array" bekommt sagt invalid Argument für foreach, weil das $newArray leer ist.

      Aus welchem Kontext heraus versuchst du hier return zu verwenden, wo ist die Initialisierung deines Arrays?

      Die Initialisierung ist aus der Smarty Template. Das Array kommt an also es ist initialisiert.

      Nur wenn ich die Methoden stripTag und RealEscape verwende wird mein Array geleert. Falls ich die Methoden weglasse und mein Array wie ich ees hab weitergeben klappt es. Ich werde es mal mit array walk ausprobieren. Was macht denn array walk?

      MFG

      Boubou

      1. echo $begrüßung;

        » Was heisst "es kommt nichts an"?
        Das heisst das die Methode die dieses "gesäuberte Array" bekommt sagt invalid Argument für foreach, weil das $newArray leer ist.

        Dann wäre der normale logische Weg des Debuggings, dass man weiter nach vorn schaut, was der vorhergehende Verarbeitungsschritt geliefert bekommt und was er daraus macht. Nachschauen kann man mit Kontrollausgaben. Am genauesten werden diese mit der Funktion var_dump().

        echo "$verabschiedung $name";

  2. Hello,

    foreach($array as $key => $wert)
    {

    $array[$key] = mysql_real_escape($wert);

    }

    So wird das Array verändert.

    Du musst aber dafür sorgen, dass der $wert nicht selber wieder ein Verweis auf ein Array oder ein Objekt ist.

    Liebe Grüße aus Syburg

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. echo $begrüßung;

      » foreach($array as $key => $wert)
            $array[$key] = mysql_real_escape($wert);
      So wird das Array verändert.

      Es geht auch mit einer Referenz

      foreach($array as $key => &$wert)
          $wert = mysql_real_escape_string($wert);

      Du musst aber dafür sorgen, dass der $wert nicht selber wieder ein Verweis auf ein Array oder ein Objekt ist.

      Naja, das wäre nicht sehr sinnvoll, denn dann brauchst es eigentlich vorher einen Mechanismus, um das Array flach zu bekommen, ansonsten "passt" es nicht in ein SQL-Statement.

      echo "$verabschiedung $name";

      1. Moin!

        Es geht auch mit einer Referenz

        foreach($array as $key => &$wert)
            $wert = mysql_real_escape_string($wert);

        Argl!

        Zwei Dinge, die mir an diesem Code nicht gefallen:

        Erstens: Fehlende geschweifte Klammern um den Codeblock - ja, die sind optional in diesem Fall, die will man aber nicht weglassen, das ist eine zu große Fehlerquelle, wenn man an dem Code später was ändert.

        Zweitens: Du vergißt, die Referenz nach der Schleife wieder zu löschen. Siehe http://de2.php.net/manual/en/control-structures.foreach.php: "Warning: Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset()."

        - Sven Rautenberg

        1. echo $begrüßung;

          Argl!

          Wegen den zwei Nichtigkeiten brauchst du doch nicht gleich die Hände überm Kopf zusammenzuschlagen. Ich will dich dann nicht erleben, wenn du die anderen Postings dieses Forums liest ...

          Erstens: Fehlende geschweifte Klammern um den Codeblock - ja, die sind optional in diesem Fall, die will man aber nicht weglassen, das ist eine zu große Fehlerquelle, wenn man an dem Code später was ändert.

          Reine Stilfrage. Ich bevorzuge bewusstes Einsetzen von Klammerung. Das verhindert dann auch "Stilblüten" wie

          include('datei');

          und echte Fehler wie

          function &foo() {
              return ($var);
            }

          Zweitens: Du vergißt, die Referenz nach der Schleife wieder zu löschen. Siehe http://de2.php.net/manual/en/control-structures.foreach.php: "Warning: Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset()."

          Die löst sich beim OP von selbst auf, weil nach dem foreach die Funktion mit einem return endet.

          echo "$verabschiedung $name";