Robsen: Bei WHERE filtern (MySQL)

Hi!

Wenn ich die Daten per Php aus meiner Datenbank auslese, mache ich das so...

  
$sql = "SELECT  
titel, link, kategorie  
FROM  
links WHERE kategorie='buecher' ORDER BY titel ASC";  

Wenn ich jetzt mehrere Kategorien habe, z.B. buecher, dvds und cds, aber nicht jedes mal

  
WHERE kategorie='buecher'  
WHERE kategorie='dvds'  
WHERE kategorie='cds'  

in den Quelltext eintippen will, gibts dafür ne Lösung? Ich habe z.B. schon mal gesehen, dass die eine oder andere Seite in der Browserzeile &filter=sonstwas stehen hatte. Kann ich die WHERE-Geschichte über den Eintrag in der Browserzeile filtern und wenn ja, wie?

Vielen Dank!!

  1.   
    $sql = "SELECT  
    titel, link, kategorie  
    FROM  
    links WHERE kategorie='".mysql_real_escape_string($_GET['filter'])."' ORDER BY titel ASC";  
    
    

    Inwieweit bist du mit PHP vertraut soetwas nicht zu wissen. Der SQL-Query ist zuallererst mal ein String. Du musst nur auspassen, dass man dir in diesen keinen Schadcode einschmuggelt.

    Im obigen Beispiel steht dir unter seite.php?filter=foo nun ein dynamischer Paramter zur Verfügung.

    1. Danke für die Lösungen, dieser hier klappt wunderbar!

      $sql = "SELECT
      titel, link, kategorie
      FROM
      links WHERE kategorie='".mysql_real_escape_string($_GET['filter'])."' ORDER BY titel ASC";

        
      
      > Inwieweit bist du mit PHP vertraut soetwas nicht zu wissen.  
        
      Es geht eben so, aber man wird ja jeden Tag ein bißchen schlauer! :-) Vielen Dank für Eure Hilfe!
      
  2. Hallo

    Kann ich die WHERE-Geschichte über den Eintrag in der Browserzeile filtern und wenn ja, wie?

    Das könntest du z.B. so lösen:

      
     $sql = "SELECT  
     titel, link, kategorie  
     FROM  
     links";  
      
      
    if(isset($_GET['filter'])){  
      
     switch($_GET['filter'])){  
      
      case "buecher":  
       $sql .= " WHERE kategorie='buecher'";  
      break;  
      
      case "dvds":  
       $sql .= " WHERE kategorie='dvds'";  
      break;  
      
      default:  
      /* die WHERE-KLausel, wenn $_GET['filter'] weder buecher noch dvds oder leer sein sollte */  
      
     }  
      
    }else{  
     /* die WHERE-Klausel, wenn kein filter über die URL übergeben wurde */  
    }  
      
    
    

    Gruß

    Krueger

  3. Wenn ich jetzt mehrere Kategorien habe, z.B. buecher, dvds und cds, aber nicht jedes mal

    WHERE kategorie='buecher'
    WHERE kategorie='dvds'
    WHERE kategorie='cds'

      
    Eventuell geht sowas:  
    ~~~sql
      
    WHERE  
     (kategorie IN ('buecher', 'dvds', 'cds')