MySQL Suche ohne Leerzeichen

thommy1972

Mitglied
Hallo.
Ich habe eine Suchfunktion:
PHP:
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$strasse = $_POST["strasse"];
$wohnort = $_POST["wohnort"];


$sql = "SELECT * FROM profile WHERE vorname = '$vorname' OR nachname = '$nachname' OR strasse = '$strasse' OR ort = '$wohnort'";
$ausgabe = mysql_query($sql);
$row = mysql_fetch_array(mysql_query("SELECT * FROM profile WHERE vorname = '$vorname' OR nachname = '$nachname' OR strasse = '$strasse' OR ort = '$wohnort'"));

Habe allerdings das Problem wenn man ein Feld des Suchformulars leer lässt er wohl auch den Leerstring nimmt. Sucht er dann nach z.b. OR nachname = '' ****
Wenn jetzt noch kein nachname eingetragen ist erscheint das also auch in den Ergenissen oder mach ich einen Denkfehler ?

Thommy
 
Eben das ist mein Problem. Irgendwie steh ich auf dem Schlauch heute.
Wenn ich if($vorname == '') { $vorname = "irgendwas"; }
mach gehts auch nicht
Also ich habe 4 Eingabefelder.
Er soll wenn ich aber nur eins ausfülle nur das finden wo ich ausgefüllt (bei 2 eben 2 u.s.w.) habe und alle anderen aussen vor lassen.
Wie mach ich das am besten ?
 
Zuletzt bearbeitet:
Dafür musst du den Query dynamisch generieren.
Dafür prüfst du welche Felder einen Wert beinhalten und schreibst dementsprechend die Datenbankabfrage.
PHP:
$vorname = mysql_real_escape_string(trim($_POST["vorname"]));
$nachname = mysql_real_escape_string(trim($_POST["nachname"]));
$strasse = mysql_real_escape_string(trim($_POST["strasse"]));
$wohnort = mysql_real_escape_string(trim($_POST["wohnort"])); 
$conditions = 0;
$query = "SELECT * FROM profile WHERE ";
if( !empty($vorname) ){
  $query .= "vorname = '$vorname' ";
  $conditions++;
}
if( !empty($nachname) ){
  if( $conditions == 0 ){
    $query .= "nachname = '$nachname' ";
  }
  else{
    $conditions++;
    $query .= " OR nachname = '$nachname' ";
  }
}
//....
if( $conditions == 0 )
  echo 'Sie müssen nach irgendetwas suchen.';
else{
  $result = mysql_query($query);
}
Den Rest dürftest du wohl selber schaffen.
 
Zuletzt bearbeitet:
Besser du arbeitest über einen Array und am Schluss machst du einen implode()

PHP:
$wheres[] = getWherePartString('vorname');
$wheres[] = getWherePartString('nachname');
$wheres[] = getWherePartString('strasse');
$wheres[] = getWherePartString('ort', 'wohnort');
//Alle leeren ausfiltern
$wheres = array_filter($wheres);

//WHERE-String zusammensetzen, falls argumente mitgegeben wurden
if(count($wheres) > 0) $where = ' WHERE '.implode(' OR ', $wheres);
//SQL zusammensetzen
$sql = "SELECT * FROM profile {$where}";

/**
 * ein WHERE-Part generieren. Ist nur gültig für String-Felder
 * Andere Feldtypen analog konstruieren
 * @param   String $fieldName   Name des Feldes in der DB
 * @param   String $postName    Name der Variable in $_POST. wenn nicht angegeben, 
 *                              wird der Name des Feldes genommen
 * @return  String/Boolean
 */
function getWherePartString($fieldName, $postName = false){
    if($postName===false) $postName = $fieldName;
    $value = mysql_real_escape_string(trim($_POST[$postName]));
    if(empty($vorname)) return false;
    return "{$fieldName} = '{$value}'";
}

Nachtrag:
Hat eigentlich nur entfern direkt mit MySQL zu tun. Ist eher ein PHP-Problem. Ich verschiebs mal
 
Zurück