[MySQL 4.0] mySQL Abfrageproblem mit String und Leerzeichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.0] mySQL Abfrageproblem mit String und Leerzeichen

    Hallo,

    ich habe in einer Datenbank in einer Spalte einträge die so aussehen:
    A 000 000 33 03

    Ein User wird diese Nummer sicherlich so eingeben:
    A0000003303

    Mit einer Standardabfrage welche einfach in der Spalte nach dem String sucht, bekomme ich kein Ergebnis.
    Kann mir bitte jemand Tipps geben, wie ich diese Abfrage etwas "Idiotensicher" programmieren kann? Das übersteigt nun doch mein derzeitiges bescheidenen Wissen.

    mySQL ist 4.0.23, php ist 4.4.1

    Vielen Dank und Grüsse
    pixel
    lasstmichdurchichbinarzt

  • #2
    Wenn der User bei der Eingabe die Leerzeichen wegläßt, mußt du zum Vergleichen eben die Leerzeichen ebenfalls entfernen.

    SELECT .... WHERE $userinput = REPLACE(spalte, ' ', '')

    Aber besser gleich wie folgt, falls der User doch Leerzeichen getippt hat:

    SELECT .... WHERE REPLACE('$userinput', ' ', '') = REPLACE(spalte, ' ', '')
    Zuletzt geändert von onemorenerd; 11.02.2006, 19:38.

    Kommentar


    • #3
      hmm, danke für den ansatz. werde mich damit auseinandersetzen
      lasstmichdurchichbinarzt

      Kommentar


      • #4
        huuu, klasse. das funzt.

        PHP-Code:
        $sql "SELECT * FROM db_preise WHERE REPLACE('".$ptnrdu."', ' ', '') = REPLACE(ptnrdu, ' ', '')"
        Wenn ich nun z.b. nach Artikelnummern suchen will, die '230' enthalten verwende ich den LIKE-Befehl.
        Wie kombiniere ich das mit der oberen Abfrage?

        grüsse
        pixel
        lasstmichdurchichbinarzt

        Kommentar


        • #5
          ... AND ptnrdu LIKE '%230%'

          Kommentar


          • #6
            hmm, irgedwie nicht. mit AND müssten doch beide werte TRUE sein, oder?

            PHP-Code:
            $sql "SELECT * FROM db_preise WHERE REPLACE('".$ptnrdu."', ' ', '') = REPLACE(ptnrdu, ' ', '') AND ptnrdu LIKE '%".$ptnrdu."%'"
            kommt leider ne leer ausgabe raus. mit OR auch. Oder hab ich das nur flash eingbaut? Hier das komplette SCript:
            PHP-Code:
            <?php

            include("../configuration.php");
            mysql_connect($mosConfig_host$mosConfig_user$mosConfig_password);
            mysql_select_db($mosConfig_db);

            $sql "SELECT * FROM db_preise WHERE REPLACE('".$ptnrdu."', ' ', '') = REPLACE(ptnrdu, ' ', '') OR ptnrdu LIKE '".$ptnrdu."'";
            echo 
            "&sql=".$sql."&";
            $q=mysql_query($sql) or die(mysql_error());

            while (
            $arr=mysql_fetch_array($q)) {
                
            $kenn.=(($arr["kenn"])).","
                
            $ptnrdu.=(($arr["ptnrdu"])).",";
                
            $deu.=(($arr["deutsch"])).",";
                
            $eng.=(($arr["englisch"])).",";
                
            $frz.=(($arr["franz"])).",";
                
            $euro.=(($arr["euro"])).",";
                
            }

            //ein Komma wieder weg
            $kenn=substr($kenn,0,-1);
            $ptnrdu=substr($ptnrdu,0,-1);
            $deu=substr($deu,0,-1);
            $eng=substr($eng,0,-1);
            $frz=substr($frz,0,-1);
            $euro=substr($euro,0,-1);

            // Ausgabe für Flash
            echo "&kenn=".utf8_encode($kenn)."&";
            echo 
            "&ptnrdu=".utf8_encode($ptnrdu)."&";
            echo 
            "&deu=".utf8_encode($deu)."&";
            echo 
            "&eng=".utf8_encode($eng)."&";
            echo 
            "&frz=".utf8_encode($frz)."&";
            echo 
            "&euro=".utf8_encode($euro)."&";
            ?>
            Hier der Testlink: http://www.evospeed.de/php/mb_db_que...du=A0000007903

            Statt A0000007903 sollte das eben auch nur mit 0000007903 zu einem Ergebnis führen. Oder mit z. B. 230 zu vielen Ausgaben.
            lasstmichdurchichbinarzt

            Kommentar


            • #7
              Ohne %-Zeichen ist es kein LIKE sondern ein =.

              Kommentar


              • #8
                aah. also so
                PHP-Code:
                $sql "SELECT * FROM db_preise WHERE REPLACE('".$ptnrdu."', ' ', '') = REPLACE(ptnrdu, ' ', '') OR ptnrdu LIKE '%".$ptnrdu."%'"
                hab die irgendwie ignoriert danke
                lasstmichdurchichbinarzt

                Kommentar

                Lädt...
                X