Problema con espacio en un selector

Resuelto
denirma Mensajes publicados 7 Estado Miembro -  
denirma Mensajes publicados 7 Estado Miembro -
Hola,
Lo siento, pero el título no es muy explícito.
Estoy tratando de construir una interfaz que me dé acceso a diferentes elementos de una base de datos. Todo va bien excepto cuando implemento filtros mediante menús desplegables.
Los filtros funcionan excepto cuando hay un espacio en el nombre del filtro.

Para ejemplo aquí está mi código :

 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>";

Cuando la variable $donroutage['routage_element'] corresponde a un título que contiene un espacio en blanco (por ejemplo "IP fija") y lo utilizo para mostrar mis elementos :

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

No obtengo ningún resultado mientras que con el mismo código y un elemento que no tiene espacio en blanco (por ejemplo "VPN") sí salen los resultados.

Por tanto, no es mi script el que no funciona, sino algo que se bloquea cuando hay un espacio en blanco.

He mirado el código HTML resultante al mostrar mi variable $letri (correspondiente al select) y no hay %20 como a veces en HTML. Y como no me manejo bien para expresar el problema, Google no me ha ayudado.

Si alguien tiene alguna idea, se lo agradecería.
Gracias de antemano.
D.

7 respuestas

  1. Usuario anónimo
     
    Hola

    ¿Has mostrado la consulta realmente ejecutada :
    $requete = "SELECT * FROM routage WHERE routage.nature 
    =\"$letri\"";
    echo $requete;
    $verification = $bdd->query($requete);
    0
  2. denirma Mensajes publicados 7 Estado Miembro
     
    Hola,
    y gracias por interesarte en el tema.

    Entonces lo había hecho exclusivamente sobre la variable $letri, en los dos casos la variable se devuelve correctamente. Puse:
    $requete = "SELECT * FROM routage WHERE routage.nature 
    =\"$letri\"";
    echo "<p>Requete = ".$requete."</p>";

    Y eso me devuelve : Requete = SELECT * FROM routage WHERE routage.nature ="IP fija"

    Donde pienso que realmente está relacionado con el espacio en blanco es que en el caso de que no haya espacio, el script funciona.

    Si tienes otras ideas, las acepto.
    En cualquier caso, gracias por tu ayuda.
    Denis
    0
  3. Usuario anónimo
     
    Si no tienes ningún mensaje de error y la consulta no devuelve ningún registro, es que no tienes ninguna fila de tu tabla routing cuyo campo nature valga "IP fixe". ¿Has verificado bien la ortografía de "IP fixe"? (Mayúsculas/minúsculas, un o dos espacios entre IP y fixe...). Lo ideal sería que muestres la secuencia de códigos ASCII de los de tu tabla y de los que introduces para hacer la comparación correctamente. ¿Has probado sustituir directamente tu variable $letri por "IP fixe" en la consulta?

    [Editar]
    Pero antes que nada, cuando dices que el script no funciona, ¿te refieres a que la consulta SELECT * FROM routage WHERE routage.nature="IP fixe" no devuelve ningún resultado?
    0
  4. denirma Mensajes publicados 7 Estado Miembro
     
    Sí, hablo bien de que la consulta no devuelve nada.

    Para verificar la forma en que están escritos, he hecho un copiar-pegar para asegurarme de que está escrito igual. Y hay varias líneas sobre IP fija.

    Voy a sortear el problema y ya no buscar por el título, sino por el id del título y voy a reemplazar los títulos en la tabla principal por los ids de la tabla que especifica los elementos. Eso complica un poco las consultas (lo cual para mí es siempre una dificultad) pero al menos debería funcionar.

    Por cierto (solo para info) ¿cómo hacemos para mostrar los códigos ASCII?
    Y de nuevo, gracias por tu ayuda.
    0
  5. denirma Mensajes publicados 7 Estado Miembro
     
    LO SIENTO

    El problema venía de otro lugar... ¡un error de nombramiento de variable!
    Sinceramente lo siento... y gracias por tu ayuda.
    0
  6. Usuario anónimo
     
    MySQL nunca ha dejado de hacer un WHERE en un campo que contiene un espacio; tiene que haber algo más. Lástima que no quieras profundizar, eso seguramente oculta otro problema. No es sano evitar los problemas, pero sé que hay que avanzar de todas formas...

    Para mostrar el código de un carácter, en PHP está la función ord. Documentación, para una cadena completa:
    $chn="abcd";
    for ($k=0;$k<strlen($chn);$k++ ) echo ord($chn[$k]),',';

    El hecho de que hayas copiado y pegado el texto no es una prueba. ¿Qué copiaste: de MySQL a tu script, o al revés? Y supongo que lo hiciste vía phpMyAdmin, lo que podría hacer que haya caracteres invisibles que no se tengan en cuenta.
    0
  7. denirma Mensajes publicados 7 Estado Miembro
     
    De hecho, en realidad no era un problema relacionado con el espacio en blanco, sino con la verificación de mi variable que orientaba mi solicitud según el filtro... había olvidado el $ antes de su nombre.
    De ahí mi LO SIENTO del mensaje anterior. ¡Es curioso cómo a veces, a pesar de varias lecturas, no veo el error estúpido de mi escritura!
    Entonces, tienes razón, el problema no venía ni del espacio ni de la consulta.
    Gracias por tu paciencia y tu ayuda. Intentaré (peor imposible) ser más atento la próxima vez.
    Y gracias por el consejo sobre los caracteres ASCII... estoy seguro de que me será útil.
    0