Input + Internet Explorer = No sé qué pasa

eXtreM3

Wenas! Me pasa algo curioso... Vereis, tengo un formulario con un campo y un botón. El formulario es para buscar algo y el botón lo tengo en "display: none" porque no quiero que se muestre, es la típica barra de búsqueda a la que se le da al Enter y funciona.

Cuando escribo "hola" y pulso enter, redirecciono

$txtBusqueda = $_POST['txtBusqueda'];
header("Location:buscar.php?b=$txtBusqueda");

Bien, con firefox todo va perfecto, me lleva a http://miweb.com/buscar.php?b=hola , y me saca los resultados...

Pero Internet Explorer se lo pasa por el forro... me lleva a http://miweb.com sin más :(

Qué puedo hacer? la verdad es que me ha dejado knockeado :D jajaj

EDIT: más datos:

Si lo hago mediante botón, sí funciona. Pero quiero que funcione lo del Enter en firefox y explorer... no sé qué pasa la verdad jeje, se escapa a mis conocimientos xD

EDIT 2: más datos y posible error:

<?php

if($POST['botonBuscar'])
{
$txtBuscar = $
POST['txtBuscar'];
// Redireccionamos
header("Location:buscar.php?b=$txtBuscar");
}

?>

Y el formulario está así:

<form name="formBuscar" id="formBuscar" method="post" action="">

<input id="txtBuscar" name="txtBuscar" type="text" value="Busca lo que desees..." />
<input id="bBuscar" name="bBuscar" type="submit" />

</form>

Me he dado cuenta que al darle al Enter, con IE no entra en el if de if($_POST['botonBuscar']), no lo interpreta y por eso devuelve siempre false y no entra...

Alguna solución? Aún no he dado con la tecla, pero al menos he acotao el problema.

r2d2rigo

No le has puesto el action a tu form. Y el "?b=hola" no es POST, es GET.

Shendraf

Yo no tengo mucha idea de php, pero quizás te ayude esta otra manera de hacerlo:

<form name="formBuscar" id="formBuscar" method="post" action="buscar.php">
  <input id="txtBuscar" name="txtBuscar" type="text" value="Busca lo que desees..." 
     onkeypress="validar(event)"/>
</form>

Con eso evitamos utilizar un botón oculto. Y ahora el método javascript:

<script type="text/javascript">
function validar(e) {
  tecla = (document.all) ? e.keyCode : e.which;
  
if (tecla==13) { texto = document.getElementById('txtBuscar').value; document.getElementById('formBuscar').action += "?b=" + texto; document.getElementById('formBuscar').submit(); } } </script>

Quizás no es la manera más bonita ni la más correcta, pero al menos funciona para IE y FF

eXtreM3

#2 los form no siempre tienen porqué tener action. Muchas veces hay que realizar algunas comprobaciones php antes de lanzarte el action (cosa que no sé hacer sin javascript, y como no sé javascript pues no lo hago de esa manera). Luego pruebo de todas formas lo que has dicho porque sinceramente, nunca he hecho un form con el method="get" la verdad xD

#3 gracias tío, joder el javascript es una maravilla...

Luego edito y comento qué tal ha ido.

EDITO:

#3, ha funcionado a la perfección, miles de gracias :D. He tenido que modificarlo un poco, porque aparte del parámetro búsqueda, también tenía que pasar otro. Pero guay, justo lo que buscaba, sencillo y limpio ;)

r2d2rigo

#4 da igual que hagas comprobacion o no, el method siempre tienes que especificarlo. En la comprobacion lo que le dices al navegador es si le das el ok para que transfiera datos o lo cancelas (return true/false). Y el GET se basa en que las variables se mapean a la URL de destino, mientras que con POST se pasan por otros metodos que hacen que el usuario no pueda cambiarlas "al vuelo".

NeB1

#1 si le dás a enter no apretas al botón, luego el valor del botón no se envía, supongo que será esa la interpretación que le dará IE, porque no compruebas para entrar en el if el que $_POST['txtBusqueda'] no esté vacío?

Usuarios habituales

  • NeB1
  • r2d2rigo
  • eXtreM3
  • Shendraf