Martin aus Wien: preg_replace

Hallo allerseits,

dieser Code soll mittels Formular den WHERE-Teil einer MySQL-Abfrage bauen. Dazu muss das letzte AND eliminiert werden. Das folgende funktioniert aber nicht, und ich kapier nicht, wieso:

if(isset($_POST['Submit'])){
 $_SESSION['where'] = " WHERE";
 foreach($_POST as $key => $value){
  if($value != "Weiter" && $value != "Bitte wählen Sie"){
   $_SESSION['where'] .= "$key = '$value' AND ";
  }
  $_SESSION['where'] = preg_replace("/AND $/","",$_SESSION['where']);
 }

//debugging:
echo "POST: ";
print_r($_POST);
echo "<br>";
echo "SESSION: ";
print_r($_SESSION);
echo "<br>";

}

http://www.useful-scripts.biz/umfrage-lechner/auswertung01.php

Gruß und Dank

Martin

  1. Hallo,

    das geht doch auch ohne regulären Ausdruck:

    $conditions = '';

    foreach($_POST as $key => $value){
      if($value != "Weiter" && $value != "Bitte wählen Sie"){
        if($conditions != '') $conditions .= ' AND ';
        $conditions .= "$key = '$value'";
      }
    }
    $_SESSION['where'] .= $conditions;

    Oder habe ich Dich irgendwie mißverstanden?

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. Danke Andreas, so müsste es natürlich gehen. Ich kapier aber trotzdem nicht, warum mir der reguläre Ausdruck alle AND löscht und nicht nur das letzte, wie er eigentlich sollte.

      Gruß
      Martin

      1. Hallo,

        Danke Andreas, so müsste es natürlich gehen. Ich kapier aber trotzdem nicht, warum mir der reguläre Ausdruck alle AND löscht und nicht nur das letzte, wie er eigentlich sollte.

        das liegt daran, daß Du die Ersetzung bei _jedem_ Schleifendurchlauf durchführst.
        Tipp: nimm das preg_replace() aus der Schleife raus.
        ;)

        Ciao,
        Andreas

        --
        "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
        1. Upps,

          ich hätt vielleicht doch früher schlafen gehen solle gestern :)

          Martin

  2. Hallo,

    gehe doch ganz einfach so vor:

    if(isset($_POST['Submit'])){  
     $_SESSION['where'] = " WHERE";  
     foreach($_POST as $key => $value){  
      if($value != "Weiter" && $value != "Bitte wählen Sie"){  
       $_SESSION['where'] .= "$key = '$value' AND ";  
      }  
     }  
     $_SESSION['where'] =substr($_SESSION['where']0,-5);  
    // ...  
    }
    

    Und im Übrigen streuben sich mir die Nackenhaare, wenn das alles an Prüfung war und $_SESSION['where'] so als Query benutzt werden würde.

    Gruß aus Berlin!
    eddi