afficher les résultats d'une sélection multiple

Répondre
janebond
le 12/09/2006 à 08:05
janebond
Bonjour,
J'effectue une interrogation sur une BD du type:
$req="SELECT * FROM table WHERE var1=$var1 AND var2=$var2 AND var3=$var3";
Le souci c que l'utilisateur peut choisir 1 ou 2 ou 3 etc... variables pour faire sa recherche.
Comment ne pas tenir compte d'une variable dont le champ n'a pas été rempli dans l'écriture de ma requête ?
merci de votre aide.
LupusMic
le 12/09/2006 à 09:55
LupusMic
$req="SELECT * FROM table WHERE var1=$var1" ;
if(isset($var2)) $req.=" and var2=$var2" ;
if(isset($var3)) $req.=" and var3=$var3" ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
janebond
le 13/09/2006 à 08:23
janebond
Merci de m'avoir répondu rapidement. malheureusement cela ne fonctionne pas...
voici mon code :
<?php 
// RECUPERATION DES VARIABLES ENVOYEES PAR LE FORMULAIRE DE LA PAGE index01.PHP
$type_loc=$_POST["type_loc"];
$capacite_loc=$_POST["capacite_loc"];
$dept_loc=$_POST["dept_loc"];
$region_loc=$_POST["region_loc"];

// CONNEXION AU SERVEUR ET SELECTION DE LA BASE
include ("../includes/fonctions/connexion.php");

//ECRITURE DE LA REQUETE DE RECHERCHE EN FONCTION DES CRITERES CHOISIS
$requete_recherche="SELECT num_loc FROM locations WHERE dept_loc='$dept_loc'";

if (isset($type_loc)) $requete_recherche="AND type_loc='$type_loc'";
if (isset($capacite_loc)) $requete_recherche="AND capacite_loc='$capacite_loc'";
if (isset($region_loc)) $requete_recherche="AND region_loc='$region_loc'";

//EXECUTION DE LA REQUETE
$resultat_recherche=mysql_query($requete_recherche);

while ($donnees_recherche=mysql_fetch_array($resultat_recherche))
{
echo "$num_loc";
}

?>

Le php c pas facile qd on débute ! :-(
LupusMic
le 13/09/2006 à 09:40
LupusMic
Chaque caractère du code que je t'ai soumis est important. Relis-le.

Juste une question : quel est l'effet de l'opérateur .= ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
janebond
le 13/09/2006 à 11:48
janebond
Désolée, je ne sais pas ce que cela signifie...
après avoir fait les modifs, il continue à m'envoyer ce message:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home.10.2/ideeloc/www/ideeloc/internet/resultat_recherche.php on line 31
je n'ais eu que 3 jours de formation à PHP/mysql et j'avoue que même avec Internet et un bouquin, j'ai vraiment beaucoup de mal. mais je trouve ça passionnant !
LupusMic
le 13/09/2006 à 17:09
LupusMic
Désolée, je ne sais pas ce que cela signifie...


C'est un opérateur de concaténation et d'affectation :
$str1 = $str1 . $str2
// équivaut à :
$str1 .= $str2
// Ce qui a pour effet de rajouter $str2 à $str1

// Si tu fais :
$str1 = $str2
// Alors tu as toute la chaine $str2 qui est affecté à $str1, écrasant le contenu de $str1.


Je commente ce que je t'ai fournit :

$req="SELECT * FROM table WHERE var1=$var1" ; // Affectation de la requête initiale
if(isset($var2)) $req.=" and var2=$var2" ; // Ajout de la seconde condition. Tu remarques que la chaine commence par un espace
if(isset($var3)) $req.=" and var3=$var3" ; // idem


Avec l'espace, la requête devient :
SELECT * FROM table WHERE var1=vcsdcvsd and var2=sdfsdfsdf

Si tu ne mets pas d'espace dans la chaîne à concaténer, tu obtiendrais :
SELECT * FROM table WHERE var1=vcsdcvsdand var2=sdfsdfsdf

Le and ne sera pas trouvé, ta requête est fausse.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
janebond
le 14/09/2006 à 08:20
janebond
Merci beaucoup pour ces explications.J'ai modifié comme suit:
<?php 
// RECUPERATION DES VARIABLES ENVOYEES PAR LE FORMULAIRE DE LA PAGE index01.PHP
$type_loc=$_POST["type_loc"];
$capacite_loc=$_POST["capacite_loc"];
$dept_loc=$_POST["dept_loc"];
$region_loc=$_POST["region_loc"];

// CONNEXION AU SERVEUR ET SELECTION DE LA BASE
include ("../includes/fonctions/connexion.php");

//ECRITURE DE LA REQUETE DE RECHERCHE EN FONCTION DES CRITERES CHOISIS
$requete_recherche="SELECT num_loc FROM locations WHERE dept_loc=$dept_loc";
if (isset($type_loc)) $requete_recherche.=" AND type_loc=$type_loc";
if (isset($capacite_loc)) $requete_recherche.=" AND capacite_loc=$capacite_loc";
if (isset($region_loc)) $requete_recherche.=" AND region_loc=$region_loc";

//EXECUTION DE LA REQUETE
$resultat_recherche=mysql_query($requete_recherche);

while ($donnees=mysql_fetch_array($resultat_recherche))
{
$num_loc=$donnees[num_loc];
}
echo "$num_loc";

// FERMER LA BASE DE DONNEES
mysql_close();
?>

Mais j'ai toujours le même message d'erreur !
Le choix des critères s'effectue via une liste déroulante, est-ce là le pb ? merci pour ton aide.
LupusMic
le 14/09/2006 à 16:05
LupusMic
Essaye de modifier ton code comme ceci :

//EXECUTION DE LA REQUETE 
$resultat_recherche=mysql_query($requete_recherche);
if($resultat_recherche)
{
while ($donnees=mysql_fetch_array($resultat_recherche))
{
$num_loc=$donnees['num_loc'];
echo" $num_loc";
}
mysql_free_result($resultat_recherche) ;
}
else
{
echo "Erreur MySQL (".mysql_error()."") ;
}

// FERMER LA BASE DE DONNEES
mysql_close();
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
janebond
le 14/09/2006 à 17:11
janebond
merci pour ta réponse rapide. voilà ce qu'il m'affiche :
Erreur MySQL (You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND capacite_loc=6 AND region_loc=' at line 1)
tu sais ce que cela veut dire ?
merci encore pour ton aide
LupusMic
le 14/09/2006 à 20:26
LupusMic
Dans une requête MySQL, si tu compare une colonne à une chaîne, il faut que la chaîne soit entre parenthèses.

Et pour voir la requête construite :

echo "Erreur MySQL (".mysql_error().") sur la requête ($sql)") ;


Est-ce que tu as directement accès à la base de données ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre
LoadingChargement en cours