Announcement

Collapse
No announcement yet.

Problem mit next() und leerem Feld in einem Array

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit next() und leerem Feld in einem Array

    Hallo Leute,


    für die Aktualierung eines Eintrags in einer Datenbank möchte ich einen query dynamisch erstellen. In meiner db class habe ich eine Funktion "updateEntry" die wie folgt aussieht.

    PHP Code:
    function updateEntry($update_assocArray,$where_str){

        
    $err_prefix $this->ERR_PREFIX."updateEntry(".var_export($update_assocArrayTRUE).",".$where_str.")";
        
    $query "UPDATE ".$this->table." SET ";

        foreach(
    $update_assocArray as $key => $value){
            
    $query.= $key."='".$value."'";
            if (
    next($update_assocArray) == true) {
                    
    $query.=", ";
                }
            }

            
    $query.= " WHERE $where_str";
            
    $result $this->newQuery($query,$err_prefix);
            
    $entries $this->num_rows;
            return 
    $entries;
        } 
    Das zu übergebene Array könnte wie folgt aussehen:

    PHP Code:
    $update = array('name'    => 'Hans''nachname'  => 'Doesenkohl',    'u.s.w.' => 'u.s.f.');

    $sql->updateEntry($update$where); 
    Solange ich keine leeren Felder übergebe funktioniert die Funktion auch einwandfrei und ich erhalte z.B. folgenden query:

    ... SET name = 'Hans', nachname = 'Dosenkohl', u.s.w. = 'u.s.f.'

    Wenn nun aber im Array ein leeres Feld enthalten ist (z.B. nachname = '') funktioniert die nect(array) Abfrage nicht und gibt FALSE zurück obwohl nocht Schlüssel - Felder Paare vorhanden sind.

    Somit wird hinter den Eintrag keine Komma gesetzt und ich erhalte eine MySql Fehlermeldung.

    Kennt jemand von euch einen anderen (besseren) Weg, um diese Problem zu beheben?

    Vielen Dank im Voraus

  • #2
    Hallo,

    "vorauszusehen" ob noch was kommt ist meist schwieriger als das zu prüfen was man schon hat . Dreh doch deine Logik einfach um. Setz einfach ein Komma VOR den Eintrag und halt nur beim Ersten nicht.
    PHP Code:
        $iCount 0;
        foreach(
    $update_assocArray as $key => $value){
            
    $query.= ($iCount++ ? ', ' '').$key."='".$value."'";
        } 
    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      next()

      Hallo Alexander,
      ich habe mir angewöhnt, bei zusammengesetzten Abfragen vor jedes Element immer ein Komme zu setzen , und am ende diesen Sub-String ab der 2. Stelle auszugeben.
      Um Nur die Elemente zu bekommen, die nicht leer sind, brauchst ja nur die Abfrage zu ändern:
      PHP Code:
      $subquery="";
      foreach(
      $update_assocArray as $key => $value){ 
        if (
      $value!="") {
          
      $subquery.=",".key."='".$value."'"
        }
      $subquery=substr($subquery,1);
      }
      $query.=$subquery
      Gruss, O.K.

      Comment


      • #4
        Lösungen gibt es viele....
        bei mir sieht das immer so aus...
        PHP Code:
        $set = array();
        foreach(
        $values as $key => $value){
          
        $set[] = $key." = '".$value."'";
        }
        $query.implode(", "$set)."where..."
        sieht irgendwie am besten aus (meine Meinung)

        Comment


        • #5
          Gute Lösungen

          Hi Leute,

          tschuldigung das ich mich erst jetzt wieder zu Wort melde. Vielen Dank für die guten Lösungsansätze.

          Das komma einfach vorn vor zu setzen. Tja, manche Dinge sind so einfach, dass man nicht drauf kommt.

          Gruß

          Alexander

          Comment


          • #6
            Aus sicherheitsgründen, würde ich dir aber empfehlen die werte noch mit mysql_real_escape_string zuvor bearbeiten.

            Comment

            Working...
            X