PB d'espace blanc dans un sélect

Invité
Invité n'ayant pas de compte PHPfrance

08 oct. 2013, 16:53

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 :

Code : Tout sélectionner

echo "<select name=\"letri\" id=\"letri\">"; while ($donroutage = $verif_routage->fetch()){ 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 :

Code : Tout sélectionner

$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.

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

08 oct. 2013, 17:21

salut,

1/ en SQL le délimiteur de chaine de caractères est le ' est pas le " ;)
2/ à priori $letri n'existe pas a moins que tu n'ai du code qui traite la valeur du formulaire.
3/ ton code semble sensible à l'injection SQL.

je te conseil de mettre la requete sql dans une variable et de l'afficher pour la tester avec un client SQL voir ce que cela donne.

parce que la, sauf si la donnée n'est pas dans la colonne nature il n'y as pas de raison qu'un simple sélect ne retourne pas d'info si elle existe dans la base.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 453 Messages

08 oct. 2013, 17:22

Salut,

As tu essayé de taper la requête dans un terminal ? Est ce que tu obtiens la même chose ?

perso, j'aurai tendance à écrire comme ceci :
$sql = "SELECT * FROM routage WHERE routage.nature ='$letri'"; //guillemets simples
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia