Arne: Warum funktioniert dieses Statement nicht?

Hi,

ich habe eine Suche in PHP programmiert, die aber leider nicht so richtig funktioniert. Es werden trotzdem immer alle Datensätze angezeigt. Es soll eine Mitgliedersuche werden, bei der nur nach den Werten gesucht werden soll, die auch eingegeben/ausgewählt wurden. Hier das SQL-Statement:

$query = "SELECT * FROM tuser where ShortName like '%$txtUsername%' ";

if($cmbSex != 'nothing')
   {
    $query = $query."and Sex='$cmbSex' ";
   }

if($txtAgeFrom != "" && $txtAgeTo != "")
   {
    $query = $query."and (to_days(curdate())-to_days(Birthday))/365 between '$txtAgeFrom' and '$txtAgeTo'";
   }

if($txtZipcode != "")
   {
    $query = $query."and Zipcode like '%$txtZipcode%'";
   }

if($cmbHeight1 && $cmbHeight2 != 'nothing')
   {
    $query = $query."and Height between '$cmbHeight1' and '$cmbHeight2'";
   }

if($cmbWeight1 && $cmbWeight2 != 'nothing')
   {
    $query = $query."and Weight between '$cmbWeight1' and '$cmbWeight2'";
   }

if($cmbEyeColor != 'nothing')
   {
    $query = $query."and EyeColor = '$cmbEyecolor'";
   }

if($cmbHairColor != 'nothing')
   {
    $query = $query."and HairColor = '$cmbHaircolor'";
   }

if($cmbFamilystate != 'nothing')
   {
    $query = $query."and FamilyState = '$cmbFamilystate'";
   }

if($cmbChildren != 'nothing')
   {
    $query = $query."and Children = '$cmbChildren'";
   }

if($cmbCharacter != 'nothing')
   {
    $query = $query."and Charact = '$cmbCharacter'";
   }

if($cmbAppearance != 'nothing')
   {
    $query = $query."and Appearance = '$cmbAppearance'";
   }

Die Auswahlboxen wurden folgender Maßen definiert:

<select class='textfieldSmall' name='cmbSex'>
      <option value='nothing'></option>
      <option value='m'>male</option>
      <option value='f'>female</option>
     </select>

Hat jemand einen Tip für mich?

Vielen Dank!

Arne

  1. Hi,

    Es werden trotzdem immer alle Datensätze angezeigt. [...] Hier das SQL-Statement:

    nein, dass ist die Erzeugung desselben. Das _Ergebnis_ wäre aber sehr viel interessanter.

    $query = "SELECT * [...]

    Dies hast Du natürlich nur der Einfachheit halber gepostet, denn in Deinem aktiven Code wirst Du selbstverständlich niemals "*" selektieren, richtig?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi nochmal,

      das Ergebnis ist eben, dass alles angezeigt wird, egal was ich auch immer auswähle.....

      Select * habe ich nur zum Test gemacht, weil ich jetzt noch nicht genau weiss, welche Felder ich später wirklich benötige. Wird selbstverständlich später angepasst....

      Gruss Arne

      1. Hi,

        das Ergebnis ist eben, dass alles angezeigt wird, egal was ich auch immer auswähle.....

        das Ergebnis wäre, da Du das Problem auf PHP-Seite ansiedelst, das erzeugte SQL-Statement.

        Select * habe ich nur zum Test gemacht, weil ich jetzt noch nicht genau weiss, welche Felder ich später wirklich benötige. Wird selbstverständlich später angepasst....

        Das freut mich zu hören :-)

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    ich habe eine Suche in PHP programmiert, die aber leider nicht so richtig funktioniert. Es werden trotzdem immer alle Datensätze angezeigt.

    <snip>

    register_globals = off?

    Wenn ja, dann so lassen. Warum? Siehe [1].
    Hast Du mal geschaut, ob in deinen Variablen etwas drinsteht?
    Loesung: $_GET['name'] statt $name verwenden, oder $_POST['name'] statt $name, wenn du die post Methode verwendest.

    Gruss,
    Jan
    --
    [1] http://dclp-faq.de/q/q-formular-register-globals.html

    1. yo

      Hast Du mal geschaut, ob in deinen Variablen etwas drinsteht?

      oder mit anderen worten, du gehst nie in die IF anweisung rein, weil deine variablen nicht existieren und somit ist dein sql statement immer ohne zusätzliche WHERE bedingungen.

      Ilja

  3. Ich habe die Fehler eben selbst gefunden:

    1. Nach den einzelnen Echos in den IF - Sätzen hat jeweils ein Leerzeichen gefehlt, so dass das "and" immer direkt angehängt wurde.

    2. hatte ich bei zwei Auswahlboxen die Gross- und Kleinschreibung verzockt.

    Danke trotzdem nochmal für Eure Antworten

    Arne

  4. Hello,

    Hi,

    ich habe eine Suche in PHP programmiert, die aber leider nicht so richtig funktioniert. Es werden trotzdem immer alle Datensätze angezeigt. Es soll eine Mitgliedersuche werden, bei der nur nach den Werten gesucht werden soll, die auch eingegeben/ausgewählt wurden. Hier das SQL-Statement:

    $query = "SELECT * FROM tuser where ShortName like '%$txtUsername%' ";

    if($cmbSex != 'nothing')
       {
        $query = $query."and Sex='$cmbSex' ";
       }

    Wieso baust Du hier nicht ein Gate für die erlaubten Werte?
    Woher kommt $cmbSex? Aus einem Formular? Wurde das schon escaped?

    if($txtAgeFrom != "" && $txtAgeTo != "")
       {
        $query = $query."and (to_days(curdate())-to_days(Birthday))/365 between '$txtAgeFrom' and '$txtAgeTo'";
       }

    Woher kommt "Birthday"? Woher kommen $txtAgeFrom und $txtAgeTo? Sind die schon auf numeric() geprüft?

    if($txtZipcode != "")
       {
        $query = $query."and Zipcode like '%$txtZipcode%'";
       }

    Könnte da auch ein Leerzeichen drinstehen?

    ...usw.

    Außerdem kann man in PHP auch  query .= "zusätzlicher String"  schreiben.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen