Problème avec espace dans un sélect

Résolu
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Désolé, mais le titre n'est pas très explicite.
J'essaie de construire une interface qui me donne accès à différents éléments d'une base de données. Tout va bien sauf quand je mets en place des filtres par menu déroulant.
Les filtres fonctionnent sauf quand il y a un espace dans l'intitulé du filtre.

Pour exemple voici mon code :

	echo "<select name=\"letri\" id=\"letri\">"; 
while ($donroutage = $verif_routage->fetch()){
//echo "<li>".$doncompt['id_tcompte']." (".$doncompt['type_compte']."</li>";
//echo "<option value=\"".htmlentities($donroutage['routage_element'])."\">".$donroutage['routage_element']."</option>";
echo "<option value=\"".$donroutage['routage_element']."\">".$donroutage['routage_element']."</option>";
}
echo "</select>";

Quand la variable $donroutage['routage_element'] correspond à un intitulé comportant un espace blanc (par exemple "IP fixe") et que je m'en sers pour afficher mes éléments :

$verification = $bdd->query("SELECT * FROM routage WHERE routage.nature =\"$letri\"");

Je ne ressors aucun résultat alors qu'avec le même code et un élément qui ne porte pas d'espace blanc (par exemple "VPN") les résultats sortent bien.

Ce n'est donc pas mon script qui ne fonctionne pas mais quelque chose qui bloque quand il y a un espace blanc.

J'ai regardé dans le code html résultant en affichant ma variable $letri (correspondant au sélect) et il n'y a pas de %20 comme parfois en html. Et comme je n'arrive pas bien à exprimer le problème, Google ne m'a été d'aucune aide.

Si quelqu'un a une idée, je suis preneur.
Merci d'avance.
D.
A voir également:

7 réponses

Utilisateur anonyme
 
Bonjour

As-tu affiché la requête réellement exécutée :
$requete = "SELECT * FROM routage WHERE routage.nature 
=\"$letri\"";
echo $requete;
$verification = $bdd->query($requete);
0
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
et merci de t'intéresser au sujet.

Alors je l'avais fait exclusivement sur la variable $letri, dans les deux cas, la viarble est correctement retournée. J'ai mis :
$requete = "SELECT * FROM routage WHERE routage.nature 
=\"$letri\"";
echo "<p>Requete = ".$requete."</p>";

Et cela me retourne : Requete = SELECT * FROM routage WHERE routage.nature ="IP fixe"

La où je pense que c'est vraiment lié à l'espace blanc, c'est que dans le cas où il n'y a pas d'espace, le script fonctionne.

Si tu as d'autres idées, je suis preneur.
En tout cas, merci de ton aide.
Denis
0
Utilisateur anonyme
 
Si tu n'as aucun message d'erreur et que la requête ne retourne aucun enregistrement, c'est que tu n'as aucune ligne de ta table routage dont le champ nature vaut "IP fixe".
As-tu bien vérifié l'orthographe d'"IP fixe" ? (majuscules/minuscules, un ou deux espaces entre IP et fixe...). L'idéal serait que tu affiches la suite des codes ASCII de celui de ta table et de celui que tu saisis pour bien faire la comparaison.
As-tu fait l'essai de remplacer ta variable $letri directement par "IP fixe" dans la requête ?

[Edit]
Mais avant tout, quand tu dis que le script ne fonctionne pas, parles-tu bien du fait que requête SELECT * FROM routage WHERE routage.nature ="IP fixe" ne retourne aucun résultat ?
0
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, je parle bien du fait que la requête ne retourne rien.

Pour la vérification de la façon dont les choses sont écrites, j'ai fait un copier-coller pour être sur que c'est écrit pareil. Et il y a bien des lignes sur IP fixe.

Je vais donc contourner le problème et ne plus chercher par l'intitulé mais par l'id de l'intitulé et je remplace les intitulés dans la table principale par les id de la table qui spécifie les éléments. Ça complexifie un peut les requêtes (ce qui pour moi est toujours une difficulté) mais au moins ça devrait marcher.

Par contre (juste pour info) on fait comment pour afficher les codes ASCII ?
Et encore merci pour ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
DÉSOLÉ

Le problème venait d'ailleurs... une erreur de nommage de variable !
Sincèrement désolé... et merci pour ton aide.
0
Utilisateur anonyme
 
MySQL n'a jamais refusé de faire un WHERE sur un champ contenant un espace, il y a forcément autre chose. Dommage que tu ne souhaites pas approfondir, ça cache certainement un autre problème. Ce n'est jamais sain de contourner les problèmes, mais je sais bien qu'il faut avancer quand même...

Pour afficher le code d'un caractère, il y a en PHP la fonction ord. Doc, pour une chaîne complète :
$chn="abcd";
for ($k=0;$k<strlen($chn);$k++ ) echo ord($chn[$k]),',';

Le fait que tu aies copié-collé le texte n'est pas une preuve. Qu'as tu copié : de mysql vers ton script, ou l'inverse ? Et je suppose que tu l'as fait via phpmyadmin, ce qui fait qu'il peut y avoir des caractères invisibles qui ne sont pas pris en compte.
0
denirma Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
En fait, effectivement, ce n'était pas un problème lié à l'espace blanc, mais à la vérification de ma variable qui orientait ma requête selon le filtre... j'avais oublié le $ avant son nom.
D'où mon DÉSOLÉ du poste précédent. C'est fou comme parfois, malgré plusieurs relecture, je ne vois pas l'erreur stupide de mon écriture !
Donc, tu as raison, le problème ne venait pas l'espace ni de la requête.
Merci pour ta patience et ton aide. J'essaierai (voeu pieu) d'être plus attentif la prochaine fois.
Et merci pour le tuyau sur les caractère ASCII... je suis sur que cela me servira.
0