2009-09-15 7 views
1

Je suis en train de créer une page de recherche simple, mais je ne suis pas 100% sûr de savoir comment écrire la chaîne de recherche réelle (en utilisant le approprié et de etc si la variable existe) voici le code:créer dynamiquement une chaîne de recherche mysql?

if ($post) { 

    //get all search variables 
    $type = JRequest::getVar('type'); 
    $classifications = JRequest::getVar('classifications', array(0), 'post', 'array'); 
    $rating = JRequest::getVar('rating'); 
    $status = JRequest::getVar('status'); 
    $cterms = JRequest::getVar('cterms'); 
    $clientid = JRequest::getVar('clientid'); 
    $company = JRequest::getVar('company'); 
    $address = JRequest::getVar('address'); 
    $name = JRequest::getVar('name'); 
    $surname = JRequest::getVar('surname'); 
    $city = JRequest::getVar('city'); 
    $state = JRequest::getVar('state'); 
    $pcode = JRequest::getVar('pcode'); 
    $country = JRequest::getVar('country'); 

    //create search string 
    echo "SELECT * FROM #__db_clients "; <- the query is supposed to be done here.. it's in as echo because I was trying to spit it out before trying to make it run.. :) 

} else { 

    echo 'There has been an error, please try again.'; 

}; 

J'ai essayé d'utiliser (si type! = Null puis searchtype = "où type = 'X'") mais ensuite je ne pouvais pas comprendre comment placer l'AND avant/après si c'est nécessaire pour la recherche .. si cela fait sens?

Répondre

2

Ceci est un exemple rapide. Je ne sais pas quel type de données retourne JRequest :: getVar (toujours une chaîne de caractères, ou des types mixtes?) Mais cela devrait commencer. Assurez-vous d'utiliser la méthode d'échappement qui s'applique dans la boucle foreach:

if ($post) { 
    $criteria = array(); 
    //get all search variables 
    $criteria['type'] = JRequest::getVar('type'); 
    $criteria['classifications'] = JRequest::getVar('classifications', array(0), 'post', 'array'); 
    $criteria['rating'] = JRequest::getVar('rating'); 

    //if there are some criteria, make an array of fieldName=>Value maps 
    if(!empty($criteria)) { 
     $where = array(); 
     foreach($criteria as $k => $v) { 
      //IMPORTANT!! 
      //$v is the value of the field, needs to be quoted correctly!! 
      $where[] = "$k = '$v'"; 
     } 
    } 
    //create search string 
    $query = "SELECT * FROM #__db_clients"; 

    if($where) { 
     $query .= " where " . join(' AND ', $where); 
    } 
} else {  
    echo 'There has been an error, please try again.'; 
}; 
+2

Veillez à appliquer l'échappement à '$ v' lorsque vous l'interpolez dans l'expression. –

+1

@Bill Karwin - Merci, absolument! Je ne sais pas quelle méthode d'échappement s'applique à son application, alors j'ai mis une note dans la réponse (ainsi que le commentaire de code). – karim79

+0

Merci beaucoup, cela va certainement m'aider à obtenir mon code :) Beaucoup apprécié! – SoulieBaby

Questions connexes