PHP + MySQL + JQuery et... Je deviens fou !

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 30 sept. 2011 à 09:06
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 1 oct. 2011 à 19:20
Hello,

alors voilà : je suis en train de faire un site avec membres, et je rélaise un moteur de recherche pour afficher différents membres suivant des critères divers tels que le pays, la région, et le département.

Pour ce faire j'ai une base de données MySQL où sont stockées les infos ; les données "pays", "region", et "dept" sont de type INT.

J'ai donc 4 pays : france, belgique, suisse, et luxembourg. Seule la france permet une recherche par région et département.

Le problème :

- Lorsque j'effectue une recherche par pays, et que je recherche soit en belgique, suisse, ou luxembourg, la requête fonctionne et les membres recherchés s'affichent correctement sur ma page de résultats.

- Mais lorsque j'effectue une recherche sur la france, et que par conséquent je sélectionne une région et un département, la requête ne me renvoie aucun résultat -> les lignes de ma BDD ne matchent jamais !

Les hypothèses :

- J'utilise donc 3 technologies pour faire fonctionner mon moteur de recherche : PHP, MySQL, et JQuery.
Pour sélectionner le pays j'ai une liste déroulante statique (<SELECT></SELECT>) dans mon formulaire.
Lorsque c'est la France qui est sélectionnée, j'affiche dynamiquement une nouvelle liste déroulante via JQuery, puis lorsque la région est à son tour sélectionnée, j'en affiche une troisième toujours via JQuery.

Une partie de mon code JQuery pour afficher ces listes déroulantes :

$(document).ready(function() {

var longueurListe = "";

$("#maRegion").hide();
$("#listeRegion").hide();

$("#monDpt").hide();
$("#listeDpt").hide();

$("#listePays").change(function() {
if ( $("#listePays").val() == "0"){
$("#listeRegion").hide(200);
$("#maRegion").hide(200);
$("#listeRegion").get(0).selectedIndex = 0;
$("#monDpt").hide(200);
$("#listeDpt").hide(200);
$("#listeDpt").get(0).selectedIndex = 0;
}else if ( $("#listePays").val() == "1"){
$("#listeRegion").show(200);
$("#maRegion").show(200);
}else if ( $("#listePays").val() == "2"){
$("#listeRegion").hide(200);
$("#maRegion").hide(200);
$("#listeRegion").get(0).selectedIndex = 0;
$("#monDpt").hide(200);
$("#listeDpt").hide(200);
$("#listeDpt").get(0).selectedIndex = 0;
}else if ( $("#listePays").val() == "3"){
$("#listeRegion").hide(200);
$("#maRegion").hide(200);
$("#listeRegion").get(0).selectedIndex = 0;
$("#monDpt").hide(200);
$("#listeDpt").hide(200);
$("#listeDpt").get(0).selectedIndex = 0;
}else if ( $("#listePays").val() == "4"){
$("#listeRegion").hide(200);
$("#maRegion").hide(200);
$("#listeRegion").get(0).selectedIndex = 0;
$("#monDpt").hide(200);
$("#listeDpt").hide(200);
$("#listeDpt").get(0).selectedIndex = 0;
}
});

$("#listeRegion").change(function() {
if ( $("#listeRegion").val() == "0"){
$("#listeDpt").hide(200);
$("#monDpt").hide(200);
$('#listeDpt').children().remove().end().append('<option selected value="0">critère sans importance</option>');
}else if ( $("#listeRegion").val() == "1"){
$("#listeDpt").show(200);
$("#monDpt").show(200);
$('#listeDpt').children().remove().end().append('<option selected value="0">critère sans importance</option>');
$("#listeDpt").append("<option value='67'>BAS RHIN - 67</option>");
$("#listeDpt").append("<option value='68'>BAS RHIN - 68</option>");
}else if ( $("#listeRegion").val() == "2"){
$("#listeDpt").show(200);
$("#monDpt").show(200);
$('#listeDpt').children().remove().end().append('<option selected value="0">critère sans importance</option>');
$("#listeDpt").append("<option value='24'>DORDOGNE - 24</option>");
$("#listeDpt").append("<option value='33'>GIRONDE - 33</option>");
$("#listeDpt").append("<option value='40'>LANDES - 40</option>");
$("#listeDpt").append("<option value='47'>LOT ET GARONNE - 47</option>");
$("#listeDpt").append("<option value='64'>PYRENEES ATLANTIQUES - 64</option>");
}else if ( $("#listeRegion").val() == "3"){
...etc...


J'envoie donc les données de mon formulaire avec la méthode POST, et je compare avec les données de ma base. Mais après x tests, il m'est impossible de faire coïncider les données "region" et "dpt" envoyées avec les données de ma bdd, donc je ne comprends pas... J'ai essayé plein de choses :
- j'ai tenté tous les encodages/décodages possibles et inimaginables mais sans succès.
- j'ai tenté de changer le type INT de ces données dans ma base en "VARCHAR" mais sans succès.
- j'ai essayé de comparer mes données avec stripos mais sans succès.
- Partant dans l'hypothèse que ce serait peut-être un problème dû à un conflit de type, j'ai essayé de biaiser en soustrayant les données envoyées aux données stockées, et si le résultat est égal à 0 -> ça matche. Le résultat est bien égal à 0 pour les données sensées matcher... Mais ça ne matche pas.
- et encore bien d'autres tests....

Je précise que j'ai effectué ces tests dans l'environnement du site (donc avec le formulaire dynamique) et également dans une page "test" où les données à chercher sont tapées en dur dans la page, et ... Sur la page "test" à chaque fois ça matche lorsque ça le doit...

La conclusion que j'en tire :

Etant donné que j'ai d'autres données INT dans ma base qui sont comparées à d'autres données envoyées par le formulaire, et que ces données ne posent pas de problème, j'en déduis que ce sont mes deux listes déroulantes dynamiques qui sèment le trouble (du moins je ne vois que ça...).
Le problème : et bien je ne sais comment le résoudre le problème justement , donc j'en appelle à vos compétences si parmi vous quelqu'un a une idée.

D'avance mille mercis pour vos réponses


BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono

12 réponses

Utilisateur anonyme
30 sept. 2011 à 13:09
Bonjour,

C'est pour quand le 4em topic a ce sujet?


Romain
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
30 sept. 2011 à 14:10
Hello Romano58,

peux-tu développer stp ? Je n'ai pas trouvé de topic traitant de mon problème, aurais-tu le lein d'un des topics en question stp ?

Thks

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
galled Messages postés 41 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 13 décembre 2012
30 sept. 2011 à 14:49
Personnellement j'en ai trouvé 3 qui traite exactement du même sujet.

Le problème vient surement de ta requête vérifie si dans ton php elle retourne réellement quelque chose ou si c'est vide. Si c'est le cas c'est surement que tu passe pas les bonnes variables dans ta requête.
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
30 sept. 2011 à 15:10
Hello Galled,

bon et bien je vais chercher plus précisément où se trouvent ces posts. Quoi qu'il en soit ma requête retourne bien dans mon PHP des résultats. LE fait est que ça ne matche pas, donc il y a évidemment une coquille mais je n'ai pas encore trouvé où.

A plus ;),

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0

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

Posez votre question
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
30 sept. 2011 à 17:18
héhé,

non ceux-ci je vais essayer de les garder. Certes j'y suis allé franchement car ne voyant véritablement pas de solution à mon souci j'ai jugé bon de poster sur chacun des forums correspondant à chaque langage que j'utilise pour faire l'appli.

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
galled Messages postés 41 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 13 décembre 2012
30 sept. 2011 à 17:26
Alors c'est soit ta requête qui n'est pas bonne soit les paramètres. Je peux difficilement t'aider sans ta table, ton code php qui traite les post et ta requête...
0
Utilisateur anonyme
30 sept. 2011 à 18:03
Wow, aucune réaction :)

Sinon, je suis du même avis que galled: Difficile d'imaginer une quelconque solution sans avoir plus d'informations (structure des tables + requêtes?).
Tu peux essayer de débugger en exécutant les requêtes directement dans une invite de commande MySQL, pour voir si effectivement tu à un résultat/erreur de retourné. Ou avec un print_r ou var_dump (je ne sais plus) directement.

Aussi, je sais ça va paraître un peu tiré par les cheveux, mais vérifier que la requêtes a bien des résultats à renvoyer est une bonne idée. Je me suis fais avoir une fois comme ça. Voyant ma liste de "trucs" qui ne s'affiché pas je commencé à devenir dingue, mais c'étais à cause de la fatigue car la requête étais bonne, la table bien remplie, mais juste aucun résultats ne correspondais à ma requêtes :)

Sinon: Récupérer tout les paramètres qui seront placé dans la requêtes, et les afficher quelques part, afin de vérifier que tout passe bien et que tu te retrouve bien avec tout les paramètres, et qu'aucun ne c'est évadé en cachette.


Romain
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
30 sept. 2011 à 19:55
Re,

désolé de répondre si tardivement, effectivement j'ai effectué plusieurs "débugages" afin de voir si tout s'affiche correctement. Pour le coup lorsque je fais un echo lors de la boucle effectuée dans la requête, je compare les données postées et les données de la BDD, et c'est sur les résultats "region" et "dpt" que ça foire systématiquement.
Pour tout dire au départ ma base contenait uniquement des données varchar pour les données "region" et "dpt", du genre : "Rhône-Alpes" et "AIN - 01".
Lorsque je récupérai ces résultats et les comparais dans un echo avec ceux postés j'avais exactement les mêmes... A force de chercher sans trouver je me suis résigné à reprendre ma BDD en y insérant des données INT en correspondance de celles en varchar, du genre : "Rhône-Alpes" - "23", et "AIN - 01" "1".
Verdict : même souci ça ne matche pas.
Honnêtement je ne sis plus où j'en suis tant j'ai retourné le code dans tous les sens, donc je vais laisser cela de côté pour aujourd'hui et y reprendre ensuite la tête reposée.

Effectivement je n'avais pas mis la totalité de mon code car celui-ci est long, et donc fastidieux à lire, mais je le posterai tout à l'heure au cas où vous avez envie de vous divertir . Et même si je reste sur l'idée que le JS a un rapport avec le problème, plus j'y pense et moins j'en suis sûr...

Merci en tout cas à vous 2 .


BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
30 sept. 2011 à 22:51
Bon, et bien il se trouve que le menu dynamique JQuery n'est pas incriminé, et il se trouve aussi que j'ai peut-être posté un peu vite car je viens de trouver pourquoi cela clochait : j'avais tout simplement une petite condition, dans le script qui précède l'include où se trouve la requête SQL, qui foutait le bordel...
Donc désolé pour le dérangement .

Good night ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
Utilisateur anonyme
1 oct. 2011 à 10:13
Mouhahaha

Bonne continuation!

Romain
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
1 oct. 2011 à 19:20
Merci, toi aussi

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0