Erreur requete sql

Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011
-
Bonjour, j'ai un formulaire via lequel je propose diverses options de recherche dans ma bdd; j'ai le code suivant qui me récupère les données du form :

//Récupération des valeurs des champs:


//Tables
$flag='';
$from='';


if(isset($_POST['recap_ameliorations']))
{
$from=" FROM recap_ameliorations ";
$flag='1';
}


if(isset($_POST['recap_observations']))
{
if($flag=='1') $from.=" ,  recap_observations  ";
else
$from.="  FROM recap_observations  ";
}


//Mot clé
$flag='';
$where='';


if(isset($_POST['mot_cle']))
{
$where=' WHERE description OR cause_probable OR proposition_amelioration LIKE \''.$_POST['mot_cle'].'\' ';
$flag='1';
}


//Agence concernée
if(isset($_POST['agence_concernee']))
{
if($flag=='1') $where.=' AND agence_concernee LIKE \''.$_POST['agence_concernee'].' \' ';
else
$where.=' WHERE agence_concernee LIKE \''.$_POST['agence_concernee'].' \' ';
$flag='1';
}


//Processus concerné
if(isset($_POST['processus_concerne']))
{
if($flag=='1') $where.=' AND processus_concerne LIKE \''.$_POST['processus_concerne'].' \' ';
else
$where.=' WHERE processus_concerne LIKE \''.$_POST['processus_concerne'].' \' ';
$flag='1';
}


//Responsable
if(isset($_POST['resp']))
{
if($flag=='1') $where.=' AND resp LIKE \''.$_POST['resp'].' \' ';
else
$where.=' WHERE resp LIKE \''.$_POST['resp'].' \' ';
$flag='1';
}


//Etat des actions
if(isset($_POST['etat_action']))
{
if($flag=='1') $where.=' AND etat_action LIKE \''.$_POST['etat_action'].' \' ';
else
$where.=' WHERE etat_action LIKE \''.$_POST['etat_action'].' \' ';
$flag='1';
}


//Numéro
if(isset($_POST['numero']))
{
if($flag=='1') $where.=' AND numero LIKE \''.$_POST['numero'].' \' ';
else
$where.=' WHERE numero LIKE \''.$_POST['numero'].' \' ';
$flag='1';
}


//Connexion à la base de données


 $db = mysql_connect($host,$user,$password) or die("Impossible de se connecter");
 
 if (!mysql_select_db( "$base",$db))
 
  echo "Erreur  : impossible de sélectionner la base
";
 
//requête SQL:
$sql="SELECT * ".$from.$where."  ORDER BY numero";
echo "$sql";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error()); 

Si je fais un echo de ma requete j'ai :

SELECT * FROM recap_observations WHERE description OR cause_probable OR proposition_amelioration LIKE '' AND agence_concernee LIKE ' ' AND processus_concerne LIKE ' ' AND resp LIKE ' ' AND etat_action LIKE ' ' AND numero LIKE ' ' ORDER BY numero

Je ne comprends pas ou est le soucis, mes conditions ne fonctionnent pas car dans mon formulaire, je ne sélectionne que la base et sa m'affiche quand meme tous les AND....
Je devrais avoir une requete du style   SELECT * FROM recap_observations ORDER BY numero

La ca a l'air de ne pas tenir compte des mes if(isset... et des flags...

Merci d'avance!!

4 réponses

Messages postés
15
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
16 mai 2006

Salut

dans tes parties qui précédent celle de la connexion, ta variable $where. n'existe pas je pense que ta variable est $where
ta formule devrai être $where=$where."ton code";

à la place de isset utilise empty

empty verifie si ton post est vide ou pas

salutations
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
 WHERE description OR cause_probable OR proposition_amelioration LIKE \''.$_POST['mot_cle'].'\' ';

ça , ça ne marche  pas

where description LIKE '%$_POST['mot_cle']%'
or
cause_probable LIKE '%$_POST['mot_cle']%'
or
 proposition_amelioration '%$_POST['mot_cle']%'
...
Messages postés
15
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
16 mai 2006

tu as ecrit WHERE ... LIKE ".$_POST['mot_cle'].'\' ';

essaie WHERE ... LIKE '.$_POST['mot_cle'].'\' ';
Messages postés
38
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
10 juillet 2011

Bonjour a toutes et à tous

Voila, ne serait il pas possible de simplifier ce genre de code,(voir ci-dessous)
je fait une requete avec un critere identique mais sur des champs différents, et je passe par une case Texte!

merci d'avance pour vorte aide
<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur1 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 1

<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur2 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 2
<!---- ======================================-->
  $query = "SELECT * FROM equipe WHERE joueur2 like '%".$searchterm."%'";
   $result = mysql_query($query);
   $num_results = mysql_num_rows($result);
   
   echo "  ".$num_results."&nbsp;&nbsp; Match trouvé pour &nbsp; ".$searchterm." ";
    for ($i=0; $i <$num_results; $i++)
    {
     $row = mysql_fetch_array($result);

affichage des données 3

il doit y avoir une autre facon de faire !!!

Du bout des doigts, née VB