Problème pour afficher mes champs

Résolu
LIKE -  
 LIKE -
Bonjour,
J'ai un problème dans mon affichage, c'est qu'il m'affiche tous les résultats sans prendre en compte la clause WHERE.
Voici ma requête :
$sql ="SELECT * FROM categorisation WHERE 
	id_nationalite LIKE '$nationalite' AND
	id_statut_conflit LIKE '$statut_conflit' AND
	id_etat LIKE '$etat' AND
	id_sepulture LIKE '$sepulture' AND
	id_sexe LIKE '$sexe' AND
	id_age LIKE '$age' AND
	id_particularite LIKE '$particularite' AND
	id_confession LIKE '$confession' AND
	id_institution LIKE '$institution' AND
	id_administrative LIKE '$administrative' AND
	id_aide_sociale LIKE '$aide_sociale';
	";

Code affichage :
$reponse ->execute($sql) or print_r($bdd->errorInfo());
while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
{
	echo "Les structures sont : ";
	echo $donnees['id_struct'].'<br />';
	
}


PS : j'ai déjà utilisé ces lignes d'affichage, ça marche bien, mais c'est la première fois que j'utilise une requête avec un LIKE pour spécifier les critères, comment afficher dans ce cas-là ?

Merci

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    LIKE s'utilise avec des jokers...

    Par exemple :
    SELECT * FROM categorisation WHERE 
    	id_nationalite LIKE '%$nationalite%'
    


    Correspond à :nationalite contient :$nationalite

    Si j'utilise un seul % .. cela veut dire (selon sa position) : "commence par" ou " se termine par"
    Par exemple :
    SELECT * FROM categorisation WHERE 
    	id_nationalite LIKE '%$nationalite'
    

    Correspond à :nationalite commence par :$nationalite

    SELECT * FROM categorisation WHERE 
    	id_nationalite LIKE '$nationalite%'
    

    Correspond à :nationalite se termine par :$nationalite

    2
    1. LIKE
       
      Merci pour ces explications :)
      Et si un champ est une valeur d'une liste, il n'est pas utile d'utiliser un jocker ?
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > LIKE
       
      Si c'est la valeur EXACTE que tu cherches ... tu n'es même pas obligé d'utiliser un LIKE... le "=" est là pour ça.
      0
    3. LIKE > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ah oui, comme ça c'est plus simple à afficher. Tous mes champs sont des listes, alors je remplace par "=". Merci bcp :)
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > LIKE
       
      Si la question est résolue .. merci de cliquer sur le lien qui se situe en haut, sous le titre de ta question : "marquer comme résolu".

      Merci.
      0
    5. LIKE
       
      Ce n'est pas encore résolu :( , ça m'affiche toujours toutes les données sans prendre en compte le WHERE.
      $sql ="SELECT * FROM categorisation WHERE 
      	id_nationalite = '$nationalite' AND
      	id_statut_conflit = '$statut_conflit' AND
      	id_etat = '$etat' AND
      	id_sepulture = '$sepulture' AND
      	id_sexe = '$sexe' AND
      	id_age = '$age' AND
      	id_particularite = '$particularite' AND
      	id_confession = '$confession' AND
      	id_institution = '$institution' AND
      	id_administrative = '$administrative' AND
      	id_aide_sociale = '$aide_sociale';
      	";

      unset($sql);
      
      if ($nationalite == NULL) {
      }
      else {
      $sql[] = " Nationalité = '$nationalite' ";
      }
      if ($statut_conflit == NULL) {
      }
      else {
      $sql[] = "Statut_conflit = '$statut_conflit' ";
      }
      if ($etat == NULL) {
      }
      else {
      $sql[] = "etat = '$etat' ";
      }
      if ($sepulture == NULL) {
      }
      else {
      $sql[] = "sepulture = '$sepulture' ";
      }
      if ($sexe == NULL) {
      }
      else {
      $sql[] = "sexe = '$sexe' ";
      }
      if ($age == NULL) {
      }
      else {
      $sql[] = "Age = '$age' ";
      }
      if ($particularite == NULL) {
      }
      else {
      $sql[] = "Particularité = '$particularite' ";
      }
      if ($confession == NULL) {
      }
      else {
      $sql[] = "Confession = '$confession' ";
      }
      if ($institution == NULL) {
      }
      else {
      $sql[] = "Institution = '$institution' ";
      }
      if ($administrative == NULL) {
      }
      else {
      $sql[] = "Situation administrative = '$administrative' ";
      }
      if ($aide_sociale == NULL) {
      }
      else {
      $sql[] = "Bénéficiaire aide_sociale = '$aide_sociale' ";
      }
      
      
      $query = "SELECT * FROM categorisation";
      
      if (!empty($sql)) {
      $query .= ' WHERE ' . implode(' AND ', $sql);
      }
      
      echo $query;	
      echo "<br />";
      
      
      /* Afficher les résultats */
      
      $reponse ->execute($sql) or print_r($bdd->errorInfo());
      while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
      {
      	echo "Les structures sont : ";
      	echo $donnees['id_struct'].'<br />';
      	
      }
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    En relisant .. je viens de voir une erreur de copier/coller de ma part ...
    j'ai mis un accent dans le nom de la variable...

    
    $strWhere = isset($criteres) && count($criteres>0) ? " WHERE " . implode(' AND ', $criteres) : '';
    $sql="SELECT * FROM categorisation " . $strWhere ;
    echo " <br> REQUETE : <br>".$sql;
    


    Par contre .. l'affichage que tu obtiens m'étonne quelque peu...
    Pourrais tu poster le code COMPLET ?
    1
    1. LIKE
       
      	
      /* Recherche selon +sieurs critères */	
      	
      $criteres=array();
      if( !empty($_POST['nationalite']) )
         $criteres[]="id_nationalite LIKE '{$_POST['nationalite']}'";
      if( !empty($_POST['statut_conflit']) )
         $criteres[]="id_statut_conflit LIKE '{$_POST['statut_conflit']}'";
      if( !empty($_POST['etat']) )
         $criteres[]="id_etat LIKE '".$_POST['etat']."'";
      if( !empty($_POST['sepulture']) )
         $criteres[]="id_sepulture LIKE '{$_POST['sepulture']}'";
      if( !empty($_POST['sexe']) )
         $criteres[]="id_sexe LIKE '{$_POST['sexe']}'";
      if( !empty($_POST['age']) )
         $criteres[]="id_age LIKE '{$_POST['age']}'";
      if( !empty($_POST['particularite']) )
         $criteres[]="id_nationalite LIKE '{$_POST['particularite']}'";
      if( !empty($_POST['confession']) )
         $criteres[]="id_confession LIKE '{$_POST['confession']}'";
      if( !empty($_POST['institution']) )
         $criteres[]="id_institution LIKE '{$_POST['institution']}'";
      if( !empty($_POST['administrative']) )
         $criteres[]="id_administrative LIKE '{$_POST['administrative']}'";
      if( !empty($_POST['aide_sociale']) )
         $criteres[]="id_aide_sociale LIKE '{$_POST['aide_sociale']}'";
      //etc
      
      $strWhere = isset($criteres) && count($criteres>0) ? " WHERE " . implode(' AND ', $criteres) : '';
      $sql="SELECT * FROM categorisation " . $strWhere ;
      echo " <br> REQUETE : <br>".$sql;
      
      
      /* Afficher les résultats */
      
      $reponse =$bdd->query($sql);
      	
      while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
      {
      	echo "Les structures sont : ";
      	echo $donnees['id_nationalite'].'<br />';
      	
      }
      
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > LIKE
       
      Oups .. encore une erreur de ma part ..
      count($criteres>0)
      

      a remplacer par
      count($criteres)>0
      
      0
    3. LIKE
       
      Ah oui mtn ça marche, merci bcp :))))
      Une dernière chose, si je cherche les critères et que je ne trouve pas de résultat comment faire le test ( c pour afficher un message )?
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > LIKE
       
      Perso .. je n'aime pas passer une boucle WHILE ... FETCH ...
      Je préfère faire directement un FETCHALL ....(ce qui retourne TOUS les résultat dans un ARRAY)
      Ainsi, via un COUNT je peux connaitre le nombre de résultats...

      https://www.php.net/manual/fr/pdostatement.fetchall.php

      .. et pour afficher les résultats .. je remplace le WHILE .. par un FOREACH
      
      if(count($result)){
      echo "<br>Les structures sont : ";
      foreach( $result as $donnees ){
         echo $donnees['id_nationalite'].'<br>';
       }
      }else {
       echo "<br> Aucun résultat trouvé !";
      }
      
      
      0
    5. LIKE
       
      Merci bcp,!
      $result correpond à
      $result =$bdd->query($sql);
      ?
      J'ai testé, ça marche, mais dans le cas où il n'y a pas de résultat, le message du else ne s'affiche pas
      0