Problème pour afficher mes champs
Résolu
LIKE
-
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 :
Code affichage :
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
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
-
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
-
-
-
-
-
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 />'; }
-
-
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 ?-
/* 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 />'; } -
-
-
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 FOREACHif(count($result)){ echo "<br>Les structures sont : "; foreach( $result as $donnees ){ echo $donnees['id_nationalite'].'<br>'; } }else { echo "<br> Aucun résultat trouvé !"; } -
-