$_GET['valeur']

Résolu
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013 - 30 sept. 2009 à 12:03
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 - 2 oct. 2009 à 10:33
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

Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 15:03
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
3
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 12:43
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
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 12:48
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 13:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 14:22
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 14:33
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
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 14:45
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 15:10
Merci beaucoup Tonio pour ton temps passé à m'aider. Je vais tester ton code de suite, et je te tiens au jus :)


VestaX
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 15:14
Tonio_35

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


VestaX
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 15:40
[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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 15:42
Re:

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


VestaX
www.jm-studio.eu
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 15:45
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
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 15:55
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 16:00
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
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 16:08
ARf, c'est à cause des balises de phpCS...

remplace les $_get par des $_GET...


_________________________________
Min iPomme
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 16:17
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 16:18
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
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
30 sept. 2009 à 16:54
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 17:00
oui, oui, exacte. C'est bizzare.

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


VestaX
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
30 sept. 2009 à 17:06
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
0
Rejoignez-nous