$_GET['valeur'] [Résolu]

Signaler
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
-
Salut,

Voilà, j'ai un tit soucis avec un moteur de recherche multi-critères.

C'est un moteur de recherche pour agence immobilière, et je dois pouvoir faire un multiple choix de ville.


"moteur.php"

Bien enttendu il y a une requete qui va chercher toutes les villes dans la BDD

<select name= "ville[]" size="5" multiple="MULTIPLE" id="ville">
<?php
do {
?>
<option value="<?php echo $row_R_listevilles['ville']?>"><?php echo $row_R_listevilles['ville']?></option>
<?php
} while ($row_R_listevilles = mysql_fetch_assoc($R_listevilles));
$rows = mysql_num_rows($R_listevilles);
if($rows > 0) {
mysql_data_seek($R_listevilles, 0);
$row_R_listevilles = mysql_fetch_assoc($R_listevilles);
}
?>
</select>



resultats-recherche.php


mysql_select_db($database_mabase, $mabase);


$query_R_resultats_recherche sprintf("SELECT * FROM biens WHERE bien %s AND type_fr = %s AND pays = %s AND pieces = %s AND prix >= %s AND prix <= %s AND ville =" . $ville . "",
GetSQLValueString($varbien_R_resultats_recherche, "text"),
GetSQLValueString($vartype_R_resultats_recherche, "text"),
GetSQLValueString($varpays_R_resultats_recherche, "text"),
GetSQLValueString($varpiece_R_resultats_recherche, "text"),
GetSQLValueString($varmin_R_resultats_recherche, "int"),
GetSQLValueString($varmax_R_resultats_recherche, "int"),
GetSQLValueString($varville_R_resultats_recherche, "text"));

$R_resultats_recherche = mysql_query($query_R_resultats_recherche, $mabase) or die(mysql_error());




Le problème, c'est que ca ne m'affiche que 1 seule ville, et non pas toutes les villes sélectionnées. J'immagine qu'il doit y avoir un while ou foreach quelque part à caler. Mais ou ?

Je n'ai jamais fais de boucle dans une requete et c'est là que ca bloque :(

Quelqu'un aurrait une solution svp???


Merci d'avance

VestaX

33 réponses

Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Voici ce qu'il faut modifier :

<?php
$varpays_R_resultats_recherche = "-1";
if (isset($_GET['pays']))
{
$varpays_R_resultats_recherche = $_GET['pays'];
}
$vartype_R_resultats_recherche = "-1";
if (isset($_GET['type_fr']))
{
$vartype_R_resultats_recherche = $_GET['type_fr'];
}
/*********************
DEBUT MODIF
*********************/
mysql_select_db($database_arimmobilier, $arimmobilier);


$query_R_resultats_recherche sprintf("SELECT * FROM biens WHERE bien %s AND type_fr = %s AND pays = %s AND pieces = %s AND prix >= %s AND prix <= %s",
GetSQLValueString($varbien_R_resultats_recherche, "text"),
GetSQLValueString($vartype_R_resultats_recherche, "text"),
GetSQLValueString($varpays_R_resultats_recherche, "text"),
GetSQLValueString($varpiece_R_resultats_recherche, "text"),
GetSQLValueString($varmin_R_resultats_recherche, "int"),
GetSQLValueString($varmax_R_resultats_recherche, "int")
);
// On parcours le tableau de villes recherchées si au moins une ville à été séléctionnée
if(isset($_GET['ville']) and count($_GET['ville']) > 0)
{
$query_R_resultats_recherche .= "AND (";
foreach($_GET['ville'] as $value)
{
$query_R_resultats_recherche .= 'ville LIKE "'.GetSQLValueString($value, "text").'" OR ';
}
// On supprime le dernier  OR  en trop
$query_R_resultats_recherche = substr($query_R_resultats_recherche, 0, -4);
$query_R_resultats_recherche .= ")";
}

/*********************
FIN MODIF
*********************/

$R_resultats_recherche = mysql_query($query_R_resultats_recherche, $arimmobilier) or die(mysql_error());
$row_R_resultats_recherche = mysql_fetch_assoc($R_resultats_recherche);
$totalRows_R_resultats_recherche = mysql_num_rows($R_resultats_recherche);
?>



_________________________________
Min iPomme
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Hello,

Pourquoi ne pas former ta requête comme ca :

<?php

$sql_requete 'SELECT * FROM biens WHERE bien "'.GetSQLValueString($varbien_R_resultats_recherche, "text").'" AND type_fr = "'.GetSQLValueString($vartype_R_resultats_recherche, "text").'" [...] AND (';
// Imaginons que $ville est ton tableau de villes
foreach($ville as $value)
{
   $sql_requete .'ville "'.$value.'" OR ';
}
// On supprime le dernier OR en trop
$sql_requete = substr($sql_requete, 0, -4);
// On ferme la requete
$sql_requete .= ')';

$R_resultats_recherche = mysql_query($sql_requete, $mabase) or die(mysql_error()); 
?>


_________________________________
Min iPomme
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
PS : Pour des champs Text dans une base de donnée, il vaut mieux utiliser le LIKE à la place du =.

Le .'toto' équivaut à faire $mavar $mavar.'toto'
<?php
$mavar = "Hello ";
$mavar .= "world";
echo $mavar;
// Hello world
?>


_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Erfff, marche pas, j'ai trop pleins de problèmes de requetes.

Voici mon code complet:







Document sans titre








ADMINISTRATION







,

----,
----











,
Ajouter une fiche




Résultats de votre recherche: réponse(s)








----,
,
,

----

,
REF,
BIENS,
TYPES,
VILLES,
PRIX,
,

----

,
,
,


----

"> ">,
,
,
,
,
€,
,

----

,







à sur

">Début ">Précédent ">Suivant ">Fin

































VestaX
www.jm-studio.eu
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
1. Met ton code entre les balises [ code=php ][ /code ] prévues à cet effet ;

2. Ton code est difficile à comprendre, car tu ne l'as pas indenté.

Conséquence, personne ne va le lire et à la fin des temps ton problème ne sera toujours pas résolu .
Tu trouveras dans ce tutoriel les conseils pour bien indenter ton code, et d'autres informations sur ce point sur Wikipedia.

3. Dire "Ça ne marche pas" ne permet pas de situer le problème, et n'aide donc en rien les membres à trouver une piste, explication ou solution.
[list]
[*]Le comportement constaté est-il différent de celui attendu ?
[*] Quels sont ces comportements ?
[*] Est-ce qu'il y a un message d'erreur, et si oui, lequel ?
/list

Bon sinon déjà :
Pourquoi mettre deux fois
<?php require_once('../Connections/arimmobilier.php'); ?>
<?php require_once('../Connections/arimmobilier.php'); ?>


Il vaut mieux mettre ca :
<?php
if (!isset($_SESSION)) {
session_start();
}
?>

Tout en haut

Tu n'est pas obligé de fermer et ouvrir les balises php à chaque fois, au contraire...
Ce qui donne pour les premières lignes :
<?php
if (!isset($_SESSION))
{
    session_start();
}
require_once('../connections/arimmobilier.php');


Je m'arrête la en attendant l'erreur exacte... Ou plus de détails sur ce qui ne fonctionne pas...




_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Re,

En fait, je passe par dreamweaver. C'est pour ca qu'il m'ouvre 50000 balises <?php :)

Merci pour tes liens, mais j'ai déjà fait les 50 premières pages de google depuis ce matin pour trouver une solution. Mais rien a faire.

Oui, quand je dit ca ne marche pas, c'est qu'il y a plein d'érreur sql.


exemple:

Notice: Undefined variable: ville in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 157

Warning: Invalid argument supplied for foreach() in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 157

Notice: Undefined variable: sql_requete in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 162


et j'en passe. Dès que je touche un paramètre, ca plante!!


VestaX
www.jm-studio.eu
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Alors :
Notice: Undefined variable: ville in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 157

Ici ca veux juste dire que tu te sert d'une variable qui n'existe pas...
Idem pour tout les autres messages...

_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Merci beaucoup Tonio pour ton temps passé à m'aider. Je vais tester ton code de suite, et je te tiens au jus :)


VestaX
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Tonio_35

T'EST UN DIEU!!!!! MERCIIIIIIIIIIIIII!!!!!!


VestaX
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
[quote="VestaX"]T'EST UN DIEU/quote
Non je suis LE dieu

De rien, n'hésite pas à me poser des questions si tu ne comprends pas ce que j'ai fais...

_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Re:

Ya juste un détail, c'est qu'il m'affiche toutes les villes. On y est presque


VestaX
www.jm-studio.eu
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

Houais en fait tu as fais une boucle dans le: getsqlvaluestring

J'ai fait le test en choisissant "cannes" et "antibes" comme ville en 2 pièces. Ca a marché. Et quand je met que "cannes" en 2 pièces, il me sort les résultats avec "cannes" et "antibes".

je penses que l'on est pas loin.

VestaX
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
OoOo

Peux tu faire un

<?php
echo "
==============
Villes:";
foreach($_get['ville'] as $value)
   echo "$value -";
echo "
QUERY:$query_r_resultats_recherche";
exit();
?>


Aavant le :
<?php
/*********************
fin modif
*********************/
?>

Et tester ton formulaire (en séléctionnant 3-4 villes) et m'envoyer ce qu'il y a d'écrit après la soumission du formulaire s'il te plais ?

Ca va ressembler à qqch comme ca :
==============
Villes:toto-tata-tutu
QUERY:SELECT labla...




_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

J'ai mis:

/*********************
debut modif
*********************/
mysql_select_db($database_arimmobilier, $arimmobilier);


$query_R_resultats_recherche sprintf("select * from biens where bien %s and type_fr = %s and pays = %s and pieces = %s and prix >= %s and prix <= %s",
getsqlvaluestring($varbien_R_resultats_recherche, "text"),
getsqlvaluestring($vartype_R_resultats_recherche, "text"),
getsqlvaluestring($varpays_R_resultats_recherche, "text"),
getsqlvaluestring($varpiece_R_resultats_recherche, "text"),
getsqlvaluestring($varmin_R_resultats_recherche, "int"),
getsqlvaluestring($varmax_R_resultats_recherche, "int")
);
// on parcours le tableau de villes recherchées si au moins une ville à été séléctionnée
if(isset($_get['ville']) and count($_get['ville']) > 0){
$query_R_resultats_recherche .= "and (";
foreach($_get['ville'] as $value)
{
$query_R_resultats_recherche .'ville "'.getsqlvaluestring($value, "text").'" or ';
}
// on supprime le dernier  or  en trop
$query_R_resultats_recherche = substr($query_R_resultats_recherche, 0, -4);
$query_R_resultats_recherche .= ")";
}
echo "
==============
villes:";
foreach($_get['ville'] as $value)
   echo "$value -";
echo "
query:$query_R_resultats_recherche";
exit();


/*********************
fin modif
*********************/



et j'ai le message suivant:

==============
villes:
Warning: Invalid argument supplied for foreach() in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 166

query:select * from biens where bien 'Achat' and type_fr 'Appartement' and pays = 'France' and pieces = '2' and prix >= 0 and prix <= 2147483647




ligne 166 est = à
foreach($_get['ville'] as $value)



VestaX
www.jm-studio.eu
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
ARf, c'est à cause des balises de phpCS...

remplace les $_get par des $_GET...


_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

C'est ce que j'ai fait. Toujours le même problème :(

mysql_select_db($database_arimmobilier, $arimmobilier);
$query_R_resultats_recherche sprintf("SELECT * FROM biens WHERE bien %s AND type_fr = %s AND pays = %s AND pieces = %s AND prix >= %s AND prix <= %s",
GetSQLValueString($varbien_R_resultats_recherche, "text"),
GetSQLValueString($vartype_R_resultats_recherche, "text"),
GetSQLValueString($varpays_R_resultats_recherche, "text"),
GetSQLValueString($varpiece_R_resultats_recherche, "text"),
GetSQLValueString($varmin_R_resultats_recherche, "int"),
GetSQLValueString($varmax_R_resultats_recherche, "int"));


// on parcours le tableau de villes recherchées si au moins une ville à été séléctionnée
if(isset($_get['ville']) and count($_get['ville']) > 0)
{
$query_r_resultats_recherche .= "and (";
foreach($_get['ville'] as $value)
{
$query_r_resultats_recherche .= 'ville like "'.getsqlvaluestring($value, "text").'" or ';
}
// on supprime le dernier or en trop
$query_r_resultats_recherche = substr($query_r_resultats_recherche, 0, -4);
$query_r_resultats_recherche .= ")";
}

echo "
==============
villes:";
foreach($_GET['ville'] as $value)
echo "$value -";
echo "
query:$query_R_resultats_recherche";
exit();


VestaX
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

J'ai oublié le message d'érreur:

==============
villes:
Warning: Invalid argument supplied for foreach() in C:\Sites\ar-immobilier\Admin\resultats-recherche.php on line 157

query:SELECT * FROM biens WHERE bien 'Achat' AND type_fr 'Appartement' AND pays = 'France' AND pieces = '2' AND prix >= 0 AND prix <= 2147483647


VestaX
www.jm-studio.eu
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Il semble ne pas trouver le $_GET['ville']...

Pourtant c'est bien un <select name="ville[]"... que tu as avant d'envoyer le formulaire ?

_________________________________
Min iPomme
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

oui, oui, exacte. C'est bizzare.

On dirrait qu'il prends en compte que le nombre de pièces et c'est tout.


VestaX
Messages postés
374
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
24 avril 2013

C'est bon, j'avais enlevé les []

voilà ce qu'il me sort:


==============
villes:Antibes - Juan-Les-Pins -Cannes -
query:SELECT * FROM biens WHERE bien 'Achat' AND type_fr 'Appartement' AND pays = 'France' AND pieces = '1' AND prix >= 0 AND prix <= 2147483647




VestaX
www.jm-studio.eu