Foros del Web » Programando para Internet » PHP »

Problema con php intercalado en formulario

Estas en el tema de Problema con php intercalado en formulario en el foro de PHP en Foros del Web. Hola a todos, he decidido basarme en el aporte del usuario rogertm , sin embargo me encuentro con algunas dudas. En principio, tras hacer las ...
  #1 (permalink)  
Antiguo 26/02/2011, 06:20
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Problema con php intercalado en formulario

Hola a todos, he decidido basarme en el aporte del usuario rogertm, sin embargo me encuentro con algunas dudas.

En principio, tras hacer las modificaciones pertinentes a su código (básicamente rellenarlo con mis datos xD), me encuentro con que hay algo que falla en el formulario.

De entrada no entiendo la parte de código xhtml con php intercalado:

Cita:
<h1><a href="<?php echo $_SERVER['PHP_SELF']; ?>”>Buscador - By RogerTM</a></h1>
<form name=”buscar” action=”<?php $_SERVER['PHP_SELF'] ?>” method=”get”>
Buscar: <input type=”text” size=”50″ value=”<?php echo $_GET['frase']; ?>” name=”frase” />
<input type=”submit” name=”buscar” value=”Buscar” />
</form>
Aquí se puede ver el código completo.

Recibo este error > Notice: Undefined index: frase in /opt/lampp/htdocs/buscar.php on line 11

También observo que la etiqueta input con atributo type="submit" lejos de mostrarse como un botón se muestra como un campo de texto. Literalmente uso el código tal y como está expuesto en el quote de arriba...

Estas son las dudas que me surgen, espero ser preciso y expresarme con exactitud.

¿Qué clase de fallo puede haber en el código xhtml, puede tratarse del orden de los atributos, del valor, que esté obsoleto?

Asumo que $_SERVER es una variable generada por el servidor que almacena un array con datos referentes a cabeceras, rutas, etc. y que en el código de arriba se llama al índice (key) 'PHP_SELF' resultando en la expresión $_SERVER['PHP_SELF'] que devolvería algo así como la ruta /htdocs/Web/buscar.php por poner un ejemplo.

¿Entonces a que viene la instrucción (función) echo? ¿El hecho de que se use $_SERVER['PHP_SELF'] en lugar de "buscar.php" como valor para el atributo action se debe a que el form se encuentra en la misma página que el código php?

Y para acabar ¿qué significa esto: value=”<?php echo $_GET['frase']; ?>"? No entiendo que se recoja mediante la variable superglobal $_GET el campo con name="frase" cuando en esa parte del código aún no se ha especificado todavía el nombre del campo.

De hecho el Notice dice índice indefinido en línea 11 que corresponde exactamente con "<?php echo $_GET['frase']; ?>", eso es todo.

Última edición por Gambinoh; 26/02/2011 a las 06:36
  #2 (permalink)  
Antiguo 26/02/2011, 12:04
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 9 meses
Puntos: 641
Respuesta: Problema con php intercalado en formulario

Es muy simple, y todo se soluciona con un poquito de estudio en php
las comillas del form estan raras son como de ladito ” cuando deberian ser asi "

una vez coregido esto y quitando todo el código php nos da esto:

Código HTML:
<h1><a href="">Buscador - By RogerTM</a></h1>
<form name="buscar" action="" method="get">
Buscar: <input type="text" size="50" value="" name="frase" />
<input type="submit" name="buscar" value="Buscar" />
</form> 
con esto se ve mucho mejor, ahora
por que estos valores?

Código PHP:
<?php echo $_GET['frase']; ?>
a pues para obtener los valores del form de forma dinamica por ejemplo la parte anterior

Código PHP:
echo $_GET['frase']; 
muestra el parametro pasado por url

http://web.com/frase=hola

hola entonces será mostrada en el input

y esta parte

Código PHP:
$_SERVER['PHP_SELF']; 
sirve para mostrar

esta parte

http://example.com/test.php/foo.bar

o sea test.php

tedejo el manualito de php donde viene todo es :)

http://php.net/manual/es/
  #3 (permalink)  
Antiguo 27/02/2011, 05:34
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Problema con php intercalado en formulario

Cita:
Iniciado por memoadian Ver Mensaje

Código PHP:
<?php echo $_GET['frase']; ?>
a pues para obtener los valores del form de forma dinamica por ejemplo la parte anterior

Código PHP:
echo $_GET['frase']; 
muestra el parametro pasado por url

http://web.com/frase=hola

hola entonces será mostrada en el input
Muchas gracias por responderme memoadian, jeje no se que haría sin la ayuda de los usuarios de FDW.

Me sigue quedando una duda, te comento, se que el atributo value es el que muestra un determinado texto en el campo (input) de texto, a veces la gente escribe en ese campo cosas como "Buscar palabra...". Es decir parece tener una funcionalidad informativa.

Entonces en el formulario, la parte del código que tiene lo siguiente:

Código PHP:
Ver original
  1. value="<?php echo $_GET['frase']; ?>"

Lo que haría es simplemente imprimir, tras la búsqueda de una frase/palabra, esa palabra o frase en el campo de texto (tras haber recogido el string contenido por el input mediante $_GET). En principio eso es lo que me hace pensar que esté como valor del atributo de xhtml value.

Ahora bien, como toda página dinámica, la página que en este caso es buscar.php, cuando recibe una variable enviada vía get por el formulario, tiene que autogenerar una página en base a los datos enviados por el formulario. En este caso, una cadena de texto contenida por el campo de texto con atributo name="frase".

O sea, que lo que yo entiendo es que la acción de enviar el formulario mediante get con todos sus parámetros, apuntando a buscar.php, es independiente del fragmento de código: value="<?php echo $_GET['frase']; ?>". Y que podría prescindir de ello.

En todo caso ahora mismo voy a poner en práctica tus consejos y te digo si el código esta vez funciona, si lo que me ha parecido entender es correcto y no estoy en un error. Cuado lo haga añadiré otro mensaje confirmando si todo ha ido bién, que espero que sea así.
  #4 (permalink)  
Antiguo 27/02/2011, 06:27
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Problema con php intercalado en formulario

Vale, confirmado, tras cambiar las comillas de costado por las comillas normales como sugería memoadian el buscador interno realiza correctamente las consultas a la base de datos.

Sin embargo hay un problema que no alcanzo a comprender. PHP devuelve un error de tipo E_NOTICE que es recogido en el campo de texto antes de realizar ninguna búsqueda, el error aparece en la siguiente línea:

Código PHP:
Ver original
  1. Buscar: <input type="text" size="50" value="<?php echo $_GET['frase']; ?>" name="frase" />

Notice: Undefined index: frase in /opt/lampp/htdocs/Web/buscar.php on line 11

Entiendo que al cargarse por primera vez el archivo (todo son archivos) buscar.php se ejecuta el código PHP contenido en la línea anterior y como es lógico en ese momento NO ha sido enviado mediante get nada, porque no se ha pulsado el boton enviar del formulario y de ahí ese error.

Ahora bien, pienso así rápidamente que podría definirse dentro de ese código PHP que está dentro del atributo value una variable, por ejemplo $texto_busqueda y darle como valor un string vacío (""), luego en el código PHP posterior, fuera del formulario, recoger el string enviado y asignarle un nuevo valor a la variable $texto_busqueda.

Se aceptan sugerencias (se piden en realidad, pienso que mi opción puede no ser buena y ando un poco perdido).

La cosa podría quedar así:

Código PHP:
Ver original
  1. Buscar: <input type="text" size="50" value="<?php $texto_busqueda = ""; echo $texto_busqueda; ?>" name="frase" />

Posteriormente, ANTES de las estructuras de control que acabarán realizando bajo ciertas condiciones las consultas SQL, meto este código:

Código PHP:
Ver original
  1. $texto_busqueda = $_GET['frase'];

O sea que inicialmente cuando la página es buscar.php se imprime en el campo texto un string vacío, es decir nada, no hay error porque la variable ha sido definida. Luego cuando se envía el string contenido por el campo frase, antes de que se realicen las consulta SQL y que se recargue la página mostrando los resultados, ya se habrá asignado a la variable $texto_busqueda su nuevo valor (que será el del string buscado).

[Edito]

Vale al parecer eso no funciona ¿Sugerencias?

[Edito otra vez y arreglado]

He añadido una estructura de control if antes del formulario resultando finalmente en esto:


Código PHP:
Ver original
  1. <?php
  2. if (empty($_GET['frase'])){
  3. $texto_busqueda = "";
  4. }else{
  5. $texto_busqueda = $_GET['frase'];}
  6. ?>
  7. <h1><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Buscador - By RogerTM</a></h1>
  8. <form name="buscar" action="<?php $_SERVER['PHP_SELF'] ?>" method="get">
  9. Buscar: <input type="text" size="50" value="<?php echo ($texto_busqueda); ?>" name="frase" />
  10. <input type="submit" name="buscar" value="Buscar" />
  11. </form>

Última edición por Gambinoh; 27/02/2011 a las 07:26

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:12.