La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  Methodologie formulaire recherche
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: Methodologie formulaire recherche  (Lu 942 fois)
Methodologie formulaire recherche
« sur: le 10-04-2006 a 15:55:12 »
ouarzazat
Membre récent
*

Hors-Ligne

Messages: 9



Je suis un lama!

Voir le Profil
Répondre avec citation

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.

Code:

[size=2]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éfaut
else {$forum = "1";
    $option_forum="";}[/size]


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:
Code:

//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:
Code:

$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:
Code:

$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:
Code:

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:
Code:

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!

Rapporter au modérateur  

Re:Methodologie formulaire recherche
« Répondre #1 sur: le 10-04-2006 a 16:24:37 »
Martin.
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 244





Voir le Profil    WWW
Répondre avec citation

Je prendrais volontier un zip du tout + sql, je m'ennuie (installation Gentoo, compilation du kernel...). De plus, je me perds dans cet énorme message...

Finalement, si je comprends bien ta méthode pour la recherche :
L'utilisateur choisit son critère de recherche (lieu, description, ...), puis tu récupères tous les critères choisis et leur valeur, pour ensuite chercher dans la BDD ?

Rapporter au modérateur  

Hébergement gratuit sans publicité : C-WebHosting
Re:Methodologie formulaire recherche
« Répondre #2 sur: le 10-04-2006 a 16:52:08 »
ouarzazat
Membre récent
*

Hors-Ligne

Messages: 9



Je suis un lama!

Voir le Profil
Répondre avec citation

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 !!

Rapporter au modérateur  
Re:Methodologie formulaire recherche
« Répondre #3 sur: le 10-04-2006 a 16:56:25 »
Martin.
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 244





Voir le Profil    WWW
Répondre avec citation

Il m'est impossible d télécharger une source PHP :s

Pourriez-vous faire un fichier zip ?

Rapporter au modérateur  

Hébergement gratuit sans publicité : C-WebHosting
Re:Methodologie formulaire recherche
« Répondre #4 sur: le 10-04-2006 a 17:02:10 »
ouarzazat
Membre récent
*

Hors-Ligne

Messages: 9



Je suis un lama!

Voir le Profil
Répondre avec citation

Je t'ai mis un .rar et un .zip!!
Bonne chance, si tu as une question n'hesites pas

Rapporter au modérateur  
Re:Methodologie formulaire recherche
« Répondre #5 sur: le 10-04-2006 a 17:03:20 »
ouarzazat
Membre récent
*

Hors-Ligne

Messages: 9



Je suis un lama!

Voir le Profil
Répondre avec citation

et encore merci !

Rapporter au modérateur  
Re:Methodologie formulaire recherche
« Répondre #6 sur: le 10-04-2006 a 17:25:23 »
Martin.
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 244





Voir le Profil    WWW
Répondre avec citation

Ton code m'a l'air d'être un bazard pas possible :s Je ne comprends pas pourquoi tu as divisé le tout en 25 tables ! Donc si tu veux mon avis, tu as choisi un bien mauvais chemin :s

Si tu veux, je peux t'aider par IM à arranger (j'entends plutôt recommencer :s) ton script...

Rapporter au modérateur  

Hébergement gratuit sans publicité : C-WebHosting
Re:Methodologie formulaire recherche
« Répondre #7 sur: le 20-09-2006 a 20:11:05 »
erwinol
Iznogoud Deluxe
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 1845



Que la FARCE soit avec toi

Voir le Profil    WWW
Répondre avec citation

Citation de: C-Labs le le 10-04-2006 a 17:25:23
Je ne comprends pas pourquoi tu as divisé le tout en 25 tables !

Je ne suis pas partisant du "tout en 5 tables". Il y a des règles à appliquer lorsque tu construits une base de données et ça multiplie rapidement les tables.

Rapporter au modérateur  

MySeoBox soumet vos sites sur des milliers d'annuaire
Vous possédez un annuaire ? Gagnez de l'argent avec celui-ci grâce à l'affiliation MySeoBox !
Re:Methodologie formulaire recherche
« Répondre #8 sur: le 20-09-2006 a 20:36:36 »
Martin.
Modérateur Global
*****

Hors-Ligne

Sexe: Male
Messages: 244





Voir le Profil    WWW
Répondre avec citation

Je suis d'accord avec toi. Cependant, le script que j'ai recu comportait des dizaines de tables ne comportant chacune qu'un seul champ...

Rapporter au modérateur  

Hébergement gratuit sans publicité : C-WebHosting
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg