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 -
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 :
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 :
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.
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:
- Problème avec espace dans un sélect
- Espace insécable - Guide
- Espace de stockage gmail plein - Guide
- Espace stockage google - Guide
- Liberer espace ipad - Guide
- Code ascii espace - Guide
7 réponses
Bonjour
As-tu affiché la requête réellement exécutée :
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);
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 :
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
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
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 ?
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 ?
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
DÉSOLÉ
Le problème venait d'ailleurs... une erreur de nommage de variable !
Sincèrement désolé... et merci pour ton aide.
Le problème venait d'ailleurs... une erreur de nommage de variable !
Sincèrement désolé... et merci pour ton aide.
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 :
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.
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.
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.
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.