ouarzazat Posté 10 Avril 2006 Posté 10 Avril 2006 Bonjour à tous, voilà un post qui je l'espère suscitera beaucoup de réactions. Je ne suis pas encore très aguéri au php/sql et pourtant j'ai décidé de me lancer dans la création d'un projet qui consiste à référencer des sites web. J'ai donc créé une base de donnée, une page formulaire d'insertion et une page formulaire de recherche. Et c'est au niveau de la page formulaire de recherche que je suis vraiment noyé. Celle-ci contient le formulaire de recherche, le code pour traiter les requêtes et le code pour afficher les résultats, du 3 en 1 quoi. Le formulaire de cette page appelle cette même page. Et je trime comme c'est pas permi, alors je crois que j'ai vraiment besoin d'aide, je vais donc vous expliquer la méthodologie que j'ai utilisé et vous mettre des exemples de code afin de recueillir vos commentaires. Cela fait déjà bien 2 semaines que j'ai commencé à bosser dessus et là je commence à baisser les bras. Donc voici ma méthodologie, je vais vous décrire dans l'ordre ce qu'il se passe sur cette page 3 en 1: 1 - Je récupère les données postées = les critères sélectionnés sur le formulaire de recherche, en majorité ils proviennent de cases à cocher. if (ISSET ($_POST['forum'])) {$forum = 'forum'; $option_forum = "checked=\"checked\"";}// ça c'est pour qu'au rechargement de la page, les critères sélectionnés soient cochés par défautelse {$forum = "1"; $option_forum="";} 2 - Les critères de sélection appartiennent à différents catégories: ex: la description du site, les coordonnées de l'éditeur, la localisation du service qu'il propose (ex: petites annonces dans l'AIN), etc... Donc s'il y a un critère sélectionné concernant la description du site, je recherche dans la bdd tous les id qui correspondent. Ces id je les écrit dans une table_recherche avec un code rappelant la catégorie à laquelle ils appartiennent. Par exemple pour les critères de description le code vaut 1. Ce qui donne dans ma table recherche: code | id --------------------- 1 | 3 1 | 6 1 | 25 1 | 34 Et ainsi de suite pour chaque catégorie, la table_recherche ressemblera à celà: code_recherche | identification_id -------------------------------------- 1 | 3 1 | 6 1 | 25 1 | 34 2 | 6 2 | 25 2 | 34 2 | 42 7 | 6 7 | 25 7 | 34 Un exemple: //Si critères d'Indexation remplis:if ( $payante!="1" OR $gratuite!="1" OR $echange!="1" )// si un critère n'a pas été posté, j'initialise sa valeur à 1;{$sql_id_indexation = mysql_query(" SELECT identification_id FROM tab_description WHERE indexation_id IN (SELECT indexation_id FROM tab_indexation WHERE payante='$payante' OR gratuite='$gratuite' OR echange='$echange') ");while ($array_identification_id = mysql_fetch_array($sql_id_indexation)) {$identification_indexation_id = $array_identification_id['identification_id'];mysql_query("INSERT INTO tab_recherche VALUES ('', '8', '$identification_indexation_id')");}} 3 - Ensuite je créé une requête qui va regrouper tous id et leur réattribuer des code_recherche qui se suivent. Je vous ai montré dans l'exemple de table_recherche que le code recherche pouvait sauter de 2 à 7 par exemple. Je rappelle que les codes recherche correspondent à la catégorie d'information auxquels appartienent les id. Avec ce code dans notre exemple les enregistrements dont le code recherche vaut 7 vont se voir réattribuer un code recherche qui vaut 3. Vous allez comprendre pourquoi je fais ça dans le 4- J'ai bien essayé de faire un code_recherche qui s'auto incrémente avec une requête du style: code_recherche =0 si critère description rempli, code_recherche++, puis écrire dans la table, mais c'était bancal, donc j'ai opté pour la solution ou le code_recherche est prédéfini. Voilà le code dont je me sert pour réatribuer les codes recherche: $sql_global = mysql_query("SELECT * FROM tab_recherche ");if ($sql_global!="")// et ça, est-ce valable comme requete??{$i = '1';while ($req_code_recherche = mysql_fetch_array($sql_global)){$num_code_recherche = $req_code_recherche['code_recherche'];$liste_id_par_code = mysql_query("SELECT * FROM tab_recherche WHERE code_recherche='$num_code_recherche'"); while ($req_liste_id = mysql_fetch_array($liste_id_par_code)) { $insert_id = $req_liste_id['identification_id']; mysql_query("UPDATE tab_recherche SET code_recherche='$i', identification_id='$insert_id' WHERE identification_id='$insert_id'"); }$i++;} 4 - Puis je compte le nbre de code_recherche avec ceci: $compte_code_recherche = mysql_query("SELECT count(code_recherche) FROM tab_recherche GROUP BY code_recherche"); $nbre_code_recherche = mysql_num_rows($compte_code_recherche); Et c'est là ou je fais le recoupement des id, où je choisi les id qui appartiennent à toutes les catégories, donc les id que je vais exploiter pour afficher les résultats. Dans l'exemple table_recherche, les id sont les id numéro 6, 25 et 34. Cette requête est la suivante: switch ($nbre_code_recherche) { case 1: // dans le cas où $nbre_code_recherche vaut 1$regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' GROUP BY identification_id ORDER BY identification_id ASC");break;case 2: $regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='2') GROUP BY identification_id ORDER BY identification_id ASC");break;case 3: $regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='2' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='3')) GROUP BY identification_id ORDER BY identification_id ASC");break; et ainsi de suite jusqu'à 12, en effet j'ai 12 catégories de crritères différentes. Puis je vide ma table recherche avec truncate. 5 - Bon maintenant j'ai tous les id que je vais exploiter, j'affiche le formulaire de recherche. 6 - Puis j'affiche les résultats de ma recherche en exploitant les id. je commence par: while ($result_identification_id = mysql_fetch_array($regroupement_identification_id)) { $result_id = $result_identification_id['identification_id'];$tab_indexation = mysql_query(" SELECT payante, gratuite, echange FROM tab_indexation WHERE indexation_id IN (SELECT indexation_id FROM tab_description WHERE identification_id='$result_id')");//et ainsi de suite je récupère toutes les infos relatives à l'id; 7 - ensuite je met en forme les résultats de cet id dans un tableau. 8 - et ainsi de suite pour chaque id. C'est comme ça que je m'y suis pris, tout me parait cohérent et pourtant ça ne marche pas, j'ai pas d'erreur spéciale quand je lance ma recherche, c'est simplement que quand je bidouille des fois j'ai un résultat qui s'affiche des fois 3, des fois rien du tout pour une même requête. J'espère que vous pourrez me faire part de votre expérience. J'ai besoin d'un gourou pour m'en sortir!! Si mon cas vous intéresse je vous envoie les codes sources, un dump de la base, n'hésitez pas! Je suis conscient que c'est beaucoup mais j'aurai vraiment besoin d'un coup de pouce, même minuscule. Merci à tous, à bientôt!
Anonymus Posté 10 Avril 2006 Posté 10 Avril 2006 Bonjour, Peux tu nous décrire succinctement, sans code, ce que doit donner ce programme, s'il te plait ? Et éventuellement, si tu as une url où ce code est installé, ca serait le plus simple, Merci
ouarzazat Posté 10 Avril 2006 Auteur Posté 10 Avril 2006 Ce code doit afficher une liste de site, correspondant aux critères de recherches énoncés par l'utilisateur. L'utilisateur choisi également quels informations (adresse, caractéristiques...) doivent apparaître dans les résultats. C'est vrai que c'est plus simple comme cela J'ai mis les fichiers en ligne, avec un dump de la base contenant quelques enregistrements. J'ai aussi placé la page où l'on saisit ces informations pour qu'elles puissent etre enregistrees dans la base: http://testplateforme.free.fr/ Voilà, j'espère que ça vous aidera à m'aider, merci
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant