Pechvogel: PHP/MySQL-Problem ...ich weiß nicht mehr weiter

Hallo,
ich habe ein riesiges Problem mit meinem Code. Ich habe ein Formular das zur Abfrage einer MySQL dienen soll.
Da ich dem User auch eine kombienierte Suche über verschiedene Felder ermöglichen will, setzte ich den Suchstring per PHP entsprechend zusammen:

  
$searchcode='"SELECT * FROM login WHERE 1 ';  
if ($land=="") $land="Deutschland";  
if ($firma >" ") $searchcode=$searchcode." AND firma LIKE '".$firma."'";  
if ($vorname >" ") $searchcode=$searchcode." AND vorname LIKE '".$vorname."'";  
if ($nachname >" ") $searchcode=$searchcode." AND nachname LIKE '".$nachname."'";  
if ($plz >" ") $searchcode=$searchcode." AND plz LIKE '".$plz."'";  
if ($ort >" ") $searchcode=$searchcode." AND ort LIKE '".$ort."'";  
if ($land >" ") $searchcode=$searchcode." AND land LIKE '".$land."'";  
if ($email >" ") $searchcode=$searchcode." AND email LIKE '".$email."'";  
if ($username >" ") $searchcode=$searchcode." AND user = '".$username."'";  
$searchcode = $searchcode.'"';  
$result = mysql_query ($searchcode);  
if ($result === false) echo mysql_error();  
while ($fields = mysql_fetch_row($result))  
# Hier folgt nur die Ausgabe der Daten in formatierter Form  

Mein Problem ist nun, das mir das ganze immer einen Fehler zurückwirft, besser gesagt er mault über die SQL-Syntax - aber ich sehe eigentlich den Fehler nicht.
Er gibt mir immer den folgenden Fehler aus:

You have an error in your SQL syntax near '"SELECT * FROM login WHERE 1 AND firma LIKE 'gmbh' AND land LIKE 'Deutschland'"' at line 1
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\paysystem\admin\searchkd.php on line 74
<<<
Ich hoffe das einer hier Rat weiß - ich seh den Wald vor lauter Bäumen nicht mehr...

Gruss
euer Pechvogel

  1. Hi,

    Mein Problem ist nun, das mir das ganze immer einen Fehler zurückwirft, besser gesagt er mault über die SQL-Syntax

    ergo ist der PHP-Code irrelevant. Lass Dir das SQL-Statement ausgeben.

    aber ich sehe eigentlich den Fehler nicht.

    Ich schon - gleich beim ersten Zeichen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo nochmal,

      das Statement ist "SELECT * FROM login WHERE 1 AND land LIKE 'Deutschland'", besser gesagt das ist der Inhalt von $searchcode wenn der User alle Felder auflässt. Wenn ich das ganze jetzt mit mysql_query ($searchcode); aufrufe müsste es doch gehn....
      Ich seh den fehler immer noch nicht (bin ja auch noch Newbie in MySQL (_schäm_).

      Gruss

      1. Moin

        das Statement ist "SELECT * FROM login WHERE 1 AND land LIKE 'Deutschland'", besser gesagt das ist der Inhalt von $searchcode wenn der User alle Felder auflässt. Wenn ich das ganze jetzt mit mysql_query ($searchcode); aufrufe müsste es doch gehn....
        Ich seh den fehler immer noch nicht (bin ja auch noch Newbie in MySQL (_schäm_).

        benutze mal das:

        $result = mysql_query($searchcode);
        if (!$result)
        {
            print mysql_error();
            die("Query $query ist ungültiges SQL.");
        }

        Und was soll das sein? WHERE 1

        Grüsse
        Mike

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
        1. Und was soll das sein? WHERE 1

          Grüsse
          Mike

          http://forum.de.selfhtml.org/my/?t=89133&m=532172#nachricht

          Mit WHERE 1 sag ich nur das die Abfrage wahr ist. Das brauch ich, damit ich die eigentliche Abfrage mit PHP aufbauen kann.

          *achselzuck*
          Versteh ich auch nicht. Aber ich kenn mcih auch nicht so gut damit aus.

          ciao

          1. Hello,

            Mit WHERE 1 sag ich nur das die Abfrage wahr ist. Das brauch ich, damit ich die eigentliche Abfrage mit PHP aufbauen kann.

            Dann kannst Du doch die where-Klausel ganz weglassen.
            Du kannst doch prüfen, ob in der Matrix aus 'und' und 'oder' Werten alle leer sind.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
          2. Noch ein kleiner Nachtrag wegen der vielen Fragen bz. dem WHERE 1:
            Da ich ja nicht weiß welche (Such-)Felder der User tatsächlich ausnutzt und ich ja den Suchstring nicht mit ..AND beginnen lassen kann, schieb ich einfach einen WHERE 1 davor. Das WHERE 1 sagt eigentlich nichts aus (ausser das die Abfrage wahr ist) aber ich kann danach problemlos den String immer mit "AND" erweitern.

            Gruss
            euer Pechvogel

            1. Moin Glücksvogel,

              Da ich ja nicht weiß welche (Such-)Felder der User tatsächlich ausnutzt und ich ja den Suchstring nicht mit ..AND beginnen lassen kann, schieb ich einfach einen WHERE 1 davor. Das WHERE 1 sagt eigentlich nichts aus (ausser das die Abfrage wahr ist) aber ich kann danach problemlos den String immer mit "AND" erweitern.

              Pfiffig ;-)

              Grüsse
              Mike

              --
              Freunde kommen und gehen. Feinde sammeln sich an.
              1. Pfiffig ;-)

                Grüsse
                Mike

                *grinst*

                Ansichtsache: Ich würde eher die ganzen Argumente Sammeln und am ende schauen ob irgendwas überflüssig ist und es mit substr ausklammern =)

                Aber ansonsten *thumb up* =)

                ciao

                1. Moin Mortimer,

                  Ansichtsache: Ich würde eher die ganzen Argumente Sammeln und am ende schauen ob irgendwas überflüssig ist und es mit substr ausklammern =)

                  dto. Aber viele Wege führen nach Rom. ;-)

                  Grüsse
                  Mike

                  --
                  Freunde kommen und gehen. Feinde sammeln sich an.
        2. Hallo und DANKE !!!!!

          Ich bin so doof....
          Natürlich, die Anführungszeichen ! Sorry und nochmals vielen, vielen Dank ! Ob Ihrs glaubt oder nicht - ich sitze seit heute Nachmittag an dem Teil und meine Haarfarbe ist nun noch mehr grau...

          Nochmals vielen Dank an alle !

          Gruss
          euer Pechvogel !!!

        3. Hallo Mike,

          Und was soll das sein? WHERE 1

          in https://forum.selfhtml.org/?t=89133&m=532172 schreibt Pechvogel:

          Mit WHERE 1 sag ich nur das die Abfrage wahr ist. Das brauch ich, damit ich die eigentliche Abfrage mit PHP aufbauen kann.

          Anders ausgedrückt:

          Seine WHERE-Klausel besteht aus lauter UND-Verknüpfungen. Seine erste Bedingung ist immer wahr, somit kann er sie stets mit

          AND xyz LIKE 'abc'

          fortsetzen.

          Du würdest sicherlich die WHERE-Klausel in einer eigenen Variablen zusammenbauen und AND nur bei der Erweiterung verwenden, d.h., wenn die WHERE-Klausel kein Leerstring ist.

          Selbstverständlich sollte Pechvogel grundsätzlich nicht ungeprüfte Rückgabewerte aus seinem Formular verwenden, siehe http://dclp-faq.de/q/q-sql-injection.html.

          Freundliche Grüsse,

          Vinzenz

          1. Moin Vinzenz,

            Anders ausgedrückt:

            Seine WHERE-Klausel besteht aus lauter UND-Verknüpfungen. Seine erste Bedingung ist immer wahr, somit kann er sie stets mit

            Besten Dank für deine Erläuterungen, man lernt immer dazu :-)

            Du würdest sicherlich die WHERE-Klausel in einer eigenen Variablen zusammenbauen und AND nur bei der Erweiterung verwenden, d.h., wenn die WHERE-Klausel kein Leerstring ist.

            Indeed, aber wie man sieht geht es auch anders.

            Grüsse
            Mike

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
      2. Hallo Pechvogel,

        das Statement ist
        "SELECT * FROM login WHERE 1 AND land LIKE 'Deutschland'"

        Ja, leider :-(
        SQL-Statements sind _nicht_ in Anführungszeichen eingeschlossen.

        Macht zwei Fehler: Erstes (siehe Cheatahs Posting) und letztes Zeichen :-)

        Freundliche Grüsse,

        Vinzenz

        1. Moin Vinzenz,

          Macht zwei Fehler: Erstes (siehe Cheatahs Posting) und letztes Zeichen :-)

          Jetzt lasst ihn nicht so zappeln. Manchmal sieht man's halt gar nicht.
          Also, ich behaupte mal where 1 , muss die 1 weg. Das LIKE brauch ja wohl auch Joker Zeichen, oder?

          Grüsse
          Mike

          --
          Freunde kommen und gehen. Feinde sammeln sich an.
          1. Hallo Mike,

            Macht zwei Fehler: Erstes (siehe Cheatahs Posting) und letztes Zeichen :-)

            Jetzt lasst ihn nicht so zappeln. Manchmal sieht man's halt gar nicht.

            Das erste Zeichen: Erstes doppeltes Anführungszeichen.
            Das letzte Zeichen: Schliessendes doppeltes Anführungszeichen.

            Ich sags doch: SQL-Statements gehören _nicht_ in Anführungszeichen.

            Also nicht:

            $strSQL = '"SELECT x FROM y"';
                # $strSQL enthält _kein_ gültiges SQL-Statement.

            Also, ich behaupte mal where 1 , muss die 1 weg. Das LIKE brauch ja wohl auch Joker Zeichen, oder?

            Nein.

            Freundliche Grüsse,

            Vinzenz

            1. Moin Vinzenz,

              Ich sags doch: SQL-Statements gehören _nicht_ in Anführungszeichen.

              Ich wage mal zu widersprechen:

              $query="select count(sid) as sid_count from actual_question where sid='".$SID."'";

              Das funktioniert! Es kommt darauf an wie du deine PHP Sequenz einleitest.

              Grüsse
              Mike

              --
              Freunde kommen und gehen. Feinde sammeln sich an.
              1. Hallo Mike,

                Ich sags doch: SQL-Statements gehören _nicht_ in Anführungszeichen.

                Ich wage mal zu widersprechen:

                das ist doch kein Wagnis :-)

                $query="select count(sid) as sid_count from actual_question where sid='".$SID."'";
                Das funktioniert! Es kommt darauf an wie du deine PHP Sequenz einleitest.

                Selbstverständlich sollte bei geeignetem Inhalt von $SID die Variable $query ein gültiges SQL-Statement enthalten, da zweifle ich nicht daran.

                Es macht jedoch einen Unterschied, ob Du

                $query = '"SELECT abc FROM xyz"';
                    $query1 = 'SELECT abc FROM xyz';

                schreibst.

                $query enthält kein gültiges SQL-Statement,
                    $query1  jedoch schon.

                Freundliche Grüsse,

                Vinzenz

  2. Ich weiss es nicht genau, aber was macht diese 1 in deinem Stirng?

    "...WHERE 1..." where was gleich 1?

    Auch irretiert mich dein $searchcode = $searchcode.'"';.. wo ist da der Sinn?

    Genrell würde ich sagen solltest du ersteinmal auch alle Eingaben checken (kann aber auch sein dass du das darüber -für mich unsichtbar- gemacht hast) und Dir ERST(!) Den String zusammensetzt und DANACH die SQL-Abfrage machst:

    $erste = "Obst='Apfel'";
    $zweite = "Gemüse='Möhren'";
    $dritte = "BAckware='Brot'";

    SELECT * FROM x WHERE $erste && $zweite && $dritte ORDER BY date DESC

    Ansonsten... mh

    ciao

    1. Ich weiss es nicht genau, aber was macht diese 1 in deinem Stirng?

      "...WHERE 1..." where was gleich 1?

      Mit WHERE 1 sag ich nur das die Abfrage wahr ist. Das brauch ich, damit ich die eigentliche Abfrage mit PHP aufbauen kann.

      Auch irretiert mich dein $searchcode = $searchcode.'"';.. wo ist da der Sinn?

      Im Query muss die Abfrage in Anführungszeichen stehen, ich setzte mir damit nur die Abfrage zusammen.

      Genrell würde ich sagen solltest du ersteinmal auch alle Eingaben checken (kann aber auch sein dass du das darüber -für mich unsichtbar- gemacht hast) und Dir ERST(!) Den String zusammensetzt und DANACH die SQL-Abfrage machst:

      Ja, ich setz mir ja zuerst den String zusammen und mach danach erst die Abfrage - leider mit Fehler.

      Gruss
      euer Pechvogel

  3. Moin Pechvogel,

    [code]
    $searchcode='"SELECT * FROM login WHERE 1 ';
    if ($land=="") $land="Deutschland";
    if ($firma >" ") $searchcode=$searchcode." AND firma

    wie Cheatah bereits erwähnte, lass dir mal den fertigen Abfragestring ausgeben.

    Und baue deinen Searchstring for deinem Select Statement.

    Grüsse
    Mike

    --
    Freunde kommen und gehen. Feinde sammeln sich an.