Rainer: Array durchlaufen und Werte in DB schreiben

Hallo,

habe folgende Ausgabe in $_POST

Array ( [5] => 1 [6] => 1 [47] => 0 [8] => 1 [9] => 1 [7] => 1 [10] => 1 [11] => 1 [bmod] => Struktur [go] => save [StrukturName] => Standard )

Bsp:
[5] ist die ID i der DB-Zeile
=> 1 ist der Wert dazu

Ich muss nun das array durchlaufen alle Key=>Values in die DB per UPDATE schreiben.
$sql = "UPDATE table SET Value='$Value' WHERE ID = 'Key'";

Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?

Gruß Rainer

  1. Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?

    Wie bei jedem anderen Array auch - sinnvollerweise mit foreach.

  2. Hi!

    Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?

    Das machst Du am einfachsten mit foreach - Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!

      
      
    foreach ($_POST as $key => $value) {  
      // validiere die Werte !!  
      // Wenn ok: schreibe in die DB  
      
    }  
    
    

    Beachte: insgesamt ist es keine gute Idee, einfach über alle übergebenen Werte zu iterieren und diese in eine Datenbank zu schieben, da Du jedes einzelne Datum validieren *mußt*!
    In obiger Kontrollstruktur kann $value u.U. ein Array sein - das mußt Du überprüfen!

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Hi!

      Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!

      Auf was genau soll er da validieren?

      Lo!

      1. Auf was genau soll er da validieren?

        Ob die Werte dem entsprechen, was er erwartet

        $_POST['date'] = 'Gumpoldskirchen';  
        $_POST['e-mail'] = '1. Mai 2010';
        

        Dowas ist selten vernünftig.

        1. Hi!

          Dowas ist selten vernünftig.

          Doof, was?

          *SCNR* ;)

          --
          Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
      2. Hi!

        Du solltest aber unbedingt die Werte überprüfen, bevor Du sie verarbeitest!

        Auf was genau soll er da validieren?

        Woher soll ich seine Anforderungen kennen?

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  3. Hi!

    Hallo,

    habe folgende Ausgabe in $_POST

    Array ( [5] => 1 [6] => 1 [47] => 0 [8] => 1 [9] => 1 [7] => 1 [10] => 1 [11] => 1 [bmod] => Struktur [go] => save [StrukturName] => Standard )

    Bsp:
    [5] ist die ID i der DB-Zeile
    => 1 ist der Wert dazu

    Ich muss nun das array durchlaufen alle Key=>Values in die DB per UPDATE schreiben.
    $sql = "UPDATE table SET Value='$Value' WHERE ID = 'Key'";

    Mein Problem: wie kann ich das array $_POST durchlaufen um an die Key,Values zu kommen?

    foreach und dabei die Keys beachten. Das Problem dabei ist, die benannten von den nummerierten zu unterscheiden. Etwas einfacher wäre es, wenn du nicht name="5" etc. sondern name="id[5]" in dein HTML bringst, dann kannst du $_POST['id'] (ein Array) durchlaufen und dort alle Keys verwenden.

    Lo!

  4. Erst mal Danke für die Antworten.
    Da ich genau weiß was über $_POST ankommt kann ich mir jegliche Prüfung sparen.
    Habe ich es jetzt so gelöst:

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

    if($key == "bmod" || $key == "go"){}else{

    $sql = "UPDATE table SET Wert = '$wert' WHERE ID = '$key'";
    $res = mysql_query($sql);

    }
    }

    Ist das ok, oder sollte man das doch anders machen.

    Gruß Rainer

    1. Hi!

      Da ich genau weiß was über $_POST ankommt kann ich mir jegliche Prüfung sparen.

      Achso! Du sendest also *auschließlich* _selbst_ Daten und kannst versehentliche Fehleingaben stets auschließen?

      off:PP

      --
      "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    2. Hallo,

      Da ich genau weiß was über $_POST ankommt ...

      nein, das weißt du nicht! Solange dieses Script irgendwo online erreichbar ist, kann irgendjemand POST-Requests auf diese Ressource absetzen. Mit beliebig sinnvollen oder auch unsinnigen Daten.

      kann ich mir jegliche Prüfung sparen.

      Darüber würde ich nochmal nachdenken.

      if($key == "bmod" || $key == "go"){}else

      Putzig, ein leerer if-Anweisungsblock. ;-)
      Wenn du nur die negierte Bedingung brauchst, dann formuliere das doch gleich so:

      if ($key!="bmod" && $key!="go")

      und lass den else-Zweig dafür weg.

      $sql = "UPDATE table SET Wert = '$wert' WHERE ID = '$key'";
      $res = mysql_query($sql);

      Spätestens hier gelangen also Eingaben, die von außen über $_POST kommen, direkt bis an die Datenbank. Viel Spaß!

      Ist das ok, oder sollte man das doch anders machen.

      Oder. Das allermindeste wäre eine kontextgerechte Maskierung vor der Übergabe an die DB.

      So long,
       Martin

      --
      Finanztipp:
      Leihen Sie sich Geld von einem Pessimisten.
      Er rechnet sowieso nicht damit, dass er es zurückbekommt.