problème espace dans un formulaire de recherche

Eléphanteau du PHP | 11 Messages

26 mai 2011, 17:45

Bonjour,

J'ai une page clients.php qui m'affiche une tableau d'une liste de clients issue d'une base de donnée.

J'ai intégré dans la colonne titre "nom", un formulaire de recherche.

Quand je tape une recherche, pas de soucis, le nom du client est trouvé, le problème c'est lorsque je veux réaficher ma liste client, je met un espace dans ma recherche, mais lorsque je fais ça, je remarque dans l'url que mes espaces sont convertis par des "%20" et de ce fait, il me fait une recherche pour %20 :/

Voici mon code correspondant à ma recherche dans ma page client :
<?php
	session_start();
		//connexion serveur mysql
	$link = mysql_connect("localhost", "", "");
		if (!$link)
			{
			die ("Impossible de se connecter : " . mysql_error());
			}
		//connexion base de donnée
	$db_selected = mysql_select_db('', $link);
		if (!$db_selected)
			{
			die ('Impossible de sélectionner la base de données : ' . mysql_error());
			}
			
			//Mise du cookie dans la session 
		if (isset($_GET['clientsnomlike']))
				{
					
					$_SESSION['cnomlike']=$_GET['clientsnomlike'];
					
				};		
		
			//traitement en fonction de la session
		if (!isset($_SESSION['cnomlike']))
			{
				$filtreClients = "SELECT * FROM Clients ORDER BY Nom"; 
			}
			
		elseif ($_SESSION['cnomlike']=="")
			{
				$filtreClients = "SELECT * FROM Clients ORDER BY Nom"; 
			}
			
		else
			{
				$filtreClients="SELECT * FROM Clients WHERE Nom LIKE '" . $_SESSION['cnomlike'] . "%' ORDER BY Nom ";
			}

et voici mon forumaire de recherche dans mon tabtop
<table style="text-align: center;" border="1"
 cellpadding="2" cellspacing="2">
  <tbody>
    <tr style="background-color: #CCFFCC; color: #008000">
      <th>Nom<br/>
	  [size=150]<input	maxlength="24" 
						size="24"
						value=""
						onchange="var newsearch='?clientsnomlike='+this.value; location.search=newsearch;reload()"></th>[/size]
      <th>Prénom</th>
	  <th> Dossier</th>
    </tr>


Merci d'avance
Modifié en dernier par Yuuki le 28 mai 2011, 17:23, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 mai 2011, 18:43

Le %20 correspond à l'encodage d'un espace dans une url... comme tu envois un espace en get, il est normale que celui-ci apparaisse sous forme de %20 dans la barre d'adresse, mais celui-ci sera normalement traité par php... c'est à dire que php va effectuer une recherche sur tous les noms commençant par un espace...

Logiquement pour réafficher ta liste complète, il ne te faudrait rien mettre dans le champ de recherche :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

26 mai 2011, 19:52

Ce qui me perturbe c'est que ça fonctionne parfaitement sous internet explorer, mais pas sous mozzila et chrome :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 mai 2011, 20:25

Le problème doit provenir de ton javascript dans ce cas... essaye peut être comme ceci :
onchange="document.location.href = '?clientsnomlike='+this.value;"
Sinon le mieux serait de faire un formulaire (balise form) et de le soumettre :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

27 mai 2011, 10:44

Salut ,
Effectivement comme le dit Ryle le %20 doit etre automatiquement traiter par php et converti en espace
en fait php fait automatiquement un urldecode() sur les variable superglobales $_GET et $_REQUEST

donc je pense aussi que ta requête cherche quelque chose commençant par un espace .
tu devrais faire un trim($_GET['clientsnomlike']) pour enlever les espaces au debut et a la fin comme ca ta condition $_SESSION['cnomlike']=="" serrait validé
Agence de communication et de formation aux outils du web marketing http://www.linesoft.fr
Plateforme d'emailing - création de newsletter - gestion de campagnes d' email marketing http://www.emailing-express10.fr
Ressources pour webmaster gratuites ,icones,fichiers vectoriels,psd ... http://www.ressource-web.fr

Eléphanteau du PHP | 11 Messages

27 mai 2011, 17:22

salut,

mais si je fais un trim, il va me supprimer mes espaces entre les noms composé de deux parties, par exemple "Van oof"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mai 2011, 18:45

Nope, le trim n'affecte que les espaces en début et en fin de chaîne :)

Mais je ne suis pas sur que tes utilisateurs devinent qu'il faut mettre un espace dans le moteur de recherche pour afficher une liste complète et te recommande de regarder du côté du javascript pour le rendre compatible entre les différents navigateurs...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...