Problème affichage - PHP & MySQL
Fermé
termi-zzz
Messages postés
63
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2009
-
20 déc. 2007 à 19:13
Alain42 - 22 déc. 2007 à 11:51
Alain42 - 22 déc. 2007 à 11:51
A voir également:
- Problème affichage - PHP & MySQL
- Easy php - Télécharger - Divers Web & Internet
- Affichage double ecran - Guide
- Mysql community server - Télécharger - Bases de données
- Problème affichage fenêtre windows 10 - Guide
- Windows 11 affichage classique - Guide
6 réponses
termi-zzz
Messages postés
63
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2009
2
21 déc. 2007 à 16:18
21 déc. 2007 à 16:18
Merci Alain, je connaissais bien le système affichage par pages, mais là j'avais un problème avec les if/else etc... j'ai tant bien que mal réussi à gérer tout ça.
Par contre, je souhaite faire une recherche pour le premier mot du texte entré dans le formulaire, et pour ça j'ai mis ça:
$array=explode(" ",$_POST[text]);
$requetez = "SELECT * from recherche where recherche_motscles LIKE '%$array[0]%' ORDER BY recherche_priority DESC";
Pas de bug mais ça ne fait pas la recherche comme ça devrait... Ca ne fait pas une recherche du premier mot comme si on entrait que seulement ce mot car j'ai testé et ça ne marche pas bien... Ai-je fais une erreur dans la synthaxe ?
Car si je tape "exemple" dans la recherche, ma première requête va trouver 5 résultats. Si je tape "exemple bordel de merde" la requête ci-dessus va trouver 0 résultats, hors elle devrait en trouver 5 aussi tu es d'accord ? C'est pour ça je comprends pas comment ça se fait que ça marche pas, à moins que j'ai fait une erreur de synthaxe ?...
a+
Par contre, je souhaite faire une recherche pour le premier mot du texte entré dans le formulaire, et pour ça j'ai mis ça:
$array=explode(" ",$_POST[text]);
$requetez = "SELECT * from recherche where recherche_motscles LIKE '%$array[0]%' ORDER BY recherche_priority DESC";
Pas de bug mais ça ne fait pas la recherche comme ça devrait... Ca ne fait pas une recherche du premier mot comme si on entrait que seulement ce mot car j'ai testé et ça ne marche pas bien... Ai-je fais une erreur dans la synthaxe ?
Car si je tape "exemple" dans la recherche, ma première requête va trouver 5 résultats. Si je tape "exemple bordel de merde" la requête ci-dessus va trouver 0 résultats, hors elle devrait en trouver 5 aussi tu es d'accord ? C'est pour ça je comprends pas comment ça se fait que ça marche pas, à moins que j'ai fait une erreur de synthaxe ?...
a+
termi-zzz
Messages postés
63
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2009
2
21 déc. 2007 à 16:31
21 déc. 2007 à 16:31
juste pour rappel ma première requête c'est celle qui recherche l'expression entière càd "LIKE '$_POST[text]'"
et si je souhaite recherchez mot par mot (et non le 1er mot) pour ma requête ci-dessus, comment dois-je faire ? par exemple avec l'exemple si dessus faire une recherche individuel de "exemple" OR "bordel" OR "de" OR "merde" est-ce possible ? comment faire pour découper le $i ?
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if(strlen($array_chaine[$i])>3){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles LIKE '%$array_chaine[$i]%'";
}
}
$query.= " ORDER BY recherche_priority DESC ";
j'pensais pas que c'était aussi dur de faire un moteur de recherche... :p
et si je souhaite recherchez mot par mot (et non le 1er mot) pour ma requête ci-dessus, comment dois-je faire ? par exemple avec l'exemple si dessus faire une recherche individuel de "exemple" OR "bordel" OR "de" OR "merde" est-ce possible ? comment faire pour découper le $i ?
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if(strlen($array_chaine[$i])>3){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles LIKE '%$array_chaine[$i]%'";
}
}
$query.= " ORDER BY recherche_priority DESC ";
j'pensais pas que c'était aussi dur de faire un moteur de recherche... :p
termi-zzz
Messages postés
63
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2009
2
21 déc. 2007 à 16:36
21 déc. 2007 à 16:36
d'ailleurs j'ai du mal à comprendre comment la fonction explode peut me permettre dans ma 3e requête (ci-dessus) de rechercher les mots en les découpant, exemple en entrant "de" => ca prend le motc-lé "description"... ? j'suis perdu help me mdr
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
regarde calmement ta boucle, tu verras qu'elle fabrique une requête :
SELECT ... WHERE recherche_motscles LIKE 'mot1%' OR recherche_motscles LIKE 'mot2%' OR recherche_motscles LIKE 'mo31%' ORDER ...
en ne prenant en compte que les mots de plus de 3 caractères
regarde calmement ta boucle, tu verras qu'elle fabrique une requête :
SELECT ... WHERE recherche_motscles LIKE 'mot1%' OR recherche_motscles LIKE 'mot2%' OR recherche_motscles LIKE 'mo31%' ORDER ...
en ne prenant en compte que les mots de plus de 3 caractères
Bonjour,
pour une recherche qui risque de faire plus d'une page, perso je procéderait ainsi:
- tu definis une variable nombre maxi par page $limit_page=20; par exemple
-tu fais une première requette sans LIMIT
- tu compte le nbr de resultats $nb_res=mysql_num_rows(...)
if( $nb_res < $limit_page){
par une boucle while tu affiche les résultats
else{
// calcul du nbr de pages
$nb_page=round($nb_res/$limit_page,0);
et la tu fais une nouvelle requette avec LIMIT $deb,$fin
et affichage par boucle while
$deb et $fin calculés par recup $deb=$_GET poste lors du click sur n°page suivante
$fin=$deb+$limit_page
}
en fin de page sous les resultats tu generes des liens avec comme libelé le numero page, et qui passe en parametre url le futur $deb
bien sur au premier affichage, pense a mettre $deb=1 par defaut
vas voir sur google il y a des scripts d'exemple de pagination php
j'ai aussi pensé:
au lieu de faire le test pour les mots >2 lettres pour ne pas les rechercher:
au lieu de faire if(strlen($mot){....
tu peux definir un array des non desires et rechercher si le mot n'est pas dedans:
pour une recherche qui risque de faire plus d'une page, perso je procéderait ainsi:
- tu definis une variable nombre maxi par page $limit_page=20; par exemple
-tu fais une première requette sans LIMIT
- tu compte le nbr de resultats $nb_res=mysql_num_rows(...)
if( $nb_res < $limit_page){
par une boucle while tu affiche les résultats
else{
// calcul du nbr de pages
$nb_page=round($nb_res/$limit_page,0);
et la tu fais une nouvelle requette avec LIMIT $deb,$fin
et affichage par boucle while
$deb et $fin calculés par recup $deb=$_GET poste lors du click sur n°page suivante
$fin=$deb+$limit_page
}
en fin de page sous les resultats tu generes des liens avec comme libelé le numero page, et qui passe en parametre url le futur $deb
bien sur au premier affichage, pense a mettre $deb=1 par defaut
vas voir sur google il y a des scripts d'exemple de pagination php
j'ai aussi pensé:
au lieu de faire le test pour les mots >2 lettres pour ne pas les rechercher:
au lieu de faire if(strlen($mot){....
tu peux definir un array des non desires et rechercher si le mot n'est pas dedans:
$array_indesires=array("le","les","la","a","et","un", etc...); // c'est plus souple ! if(!in_array($mot){........ // si il n'est pas dans la liste on fait la recherche: