Php - Moteur de recherche affichage immédiat

Fermé
Utilisateur anonyme - 7 avril 2011 à 10:41
 Utilisateur anonyme - 7 avril 2011 à 14:15
Bonjour, et merci à tout ceux qui vont me consacrer du temps.

Dans le cadre d'un stage, je dois effectuer une recherche sur une base de donnée.
Jusque là pas de problème voici mon script :

<form method="post" onChange="submit()">
	<label for="recherche">Nom prénom :</label>
	<input type="text" name="recherche" id="recherche"/>
</form>	

<?php
	include('connexionBDD.php');
	//Si le post n'existe pas, $recherche = null, sinon on met la première lettre en majuscule : ucfirst()

	$recherche = (isset($_POST['recherche']))? ucfirst($_POST['recherche']) : null;

	$mots = explode(" ", $recherche); //séparation des mots de la recherche à chaque espace grâce à explode
	$nombre_mots = count($mots); //$nombre_mots = 1,2,3...
	$prenom = $mots[$nombre_mots - 1]; //le numero du dernier mot de la recherche, s'il n'y a qu'un mot on a $mots[0] et non -1
						
	//On cherche grâce au nom
	$requet = "SELECT * FROM personnel WHERE nom_personne LIKE '%$recherche%' ORDER BY nom_personne";
	$result = mysql_query($requet,$lien) or die('Erreur SQL : <br />'.$requet);

	if(mysql_num_rows($result) > 0){
		while($data = mysql_fetch_assoc($result)) {
		$nom_personne = $data["nom_personne"];
		$prenom_personne = $data["prenom_personne"];
		$num_personne = $data["num_personne"];
		echo '
			<input type="button" VALUE="'.$prenom_personne.' '.$nom_personne.'" onClick="location.href=\'TModifPersonne.php?nom_personne='.$nom_personne.'\'"/>
			<br/>
                        ';
		}
	}else{
		echo 'Aucun résultat trouvé pour le nom.
		<br/>La recherche a été élargie avec les prénoms. <br/>	
		';
		//Si ça ne suffit pas on rajoute les prénoms
		$requet = "SELECT * FROM personnel WHERE prenom_personne LIKE '%$prenom%' ORDER BY nom_personne";
		$result = mysql_query($requet,$lien) or die('Erreur SQL : <br />'.$requet);
							
		while($data = mysql_fetch_assoc($result)) {
			$nom_personne = $data["nom_personne"];
			$prenom_personne = $data["prenom_personne"];
			$num_personne = $data["num_personne"];
			echo '
				<input type="button" VALUE="'.$prenom_personne.' '.$nom_personne.'" onClick="location.href=\'TModifPersonne.php?nom_personne='.$nom_personne.'\'"/>
			<br/>';
			}
		}
?>		


La petite amélioration que je voudrais apporter consiste à afficher les résultats au fur et a mesure, comme le fait le moteur de recherche google.
Je n'arrive pas à trouver d'aide à ce sujet. Je tombe toujours sur comment effectuer le moteur de recherche mais jamais cette amélioration.

J'ai donc essayé onKeyup="submit()" le problème c'est qu'on a pas le temps de finir de taper le nom en général, ce qui est plutôt logique...
onChange() ne convient pas non plus car il faut appuyer sur entrer ou dé-sélectionner la balise input.

Je suis actuellement entrain de continuer ma formation JavaScript pour ensuite me lancer sur Ajax qui aura peut être une solution à me proposer.

En attendant, quelqu'un aurait-il la solution ?

Cordialement.
A voir également:

4 réponses

Utilisateur anonyme
7 avril 2011 à 10:49
Bonjour,

>La petite amélioration que je voudrais apporter consiste à afficher les résultats au fur et a mesure, comme le fait le moteur de recherche google.

Vous voulez dire page par page ?

Si c'est le cas, vous pouvez mettre un limit dans votre requête 0,10

pour avoir les 10 premières réponses, un lien en bas de page qui conduit aux dix suivantes, vous relancez alors la recherche mais avec un limit 10,10 etc...
0
Utilisateur anonyme
7 avril 2011 à 11:42
@neoprog67

La recherche affiche les noms du personnel.

Je voudrais que si on tape "D".
En même temps que cette saisie, tous les noms avec un D s'affiche.

Puis quand on rajoute "u" (on a alors "Du")
La liste s'actualise et affiche tout les noms qui sont composés de "Du"

Etc, jusqu'à ce qu'on est un tout petit groupe de personne, comme
Dupont 1
Dupont 2
etc...

En effet une limite serait peut être à envisager pour l'affichage.
0
Utilisateur anonyme
7 avril 2011 à 11:45
Ok si j'ai bien compris, dans le champ de recherche, dès que l'on tape une lettre il faudrait que la liste se mette à jour, c'est ça ?

Si oui, je te le déconseille.
Car 1 c'est de l'AJAX
2 ça va bouffer de la ressource système
3 ça va sans doute ramer

A moins de faire un compromis AJAX javascript, à savoir quand on tape D on ramène en AJAX un tableau de tout les noms commençant par D et on gère l'affichage ensuite en JS
0
Utilisateur anonyme
7 avril 2011 à 11:57
>Car 1 c'est de l'AJAX

L'Ajax pose problème ou c'est parce que j'ai mis que je ne le connaissait pas encore?

> ça va sans doute ramer
De l'ordre du centième de seconde ou plutôt de la seconde?

Je pense que je chercherai un compromis plus tard.
Beaucoup d'inconvénients pour un petit plus.
C'était surtout pour savoir faire :).
0
Utilisateur anonyme
7 avril 2011 à 13:14
AJax ne pose pas de problème, il faut juste assimiler le principe, mais on oublie souvent que Ajax c'est une requête HTTP, on l'occurence dans votre cas il faudrait faire une requête Ajax à chaque évènement onChange 'pas certain que ce soit on Change d'ailleurs) sur le <input> et donc si quelqu'un tape vite un texte les requêtes vont s'accumuler pour chaque saisie de caractère, bof bof.
Et ça c'est pour un utilisateur, alors une centaine simultanément...

Pour la durée tout dépend de la requête HTTP qui fourni les résultats, mais de toute façon, se sera inf au dixième de seconde, mais par caractère tapé
0
Utilisateur anonyme
7 avril 2011 à 14:05
Il y a de forte chance que ce ne soit pas onChange en effet.
Dans mon cas, seul l'administrateur aurait à effectuer cette requête. Et assez rarement.
Je vais cependant laissé ça de côté pour le moment.

Je ne met pas que le problème a été résolu, vu que ce n'est pas le cas.
Mais je vous remercie pour votre avis. Il m'a permis de ne pas m'attarder sur le problème et de savoir ou chercher si j'ai du temps en trop.

En vous souhaitant une bonne journée.
0
Utilisateur anonyme
7 avril 2011 à 14:15
De rien, bonne journée à vous aussi
0