elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Como saber si un formulario se ha enviado
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Como saber si un formulario se ha enviado  (Leído 20,392 veces)
Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: Como saber si un formulario se ha enviado
« Respuesta #20 en: 18 Marzo 2011, 23:02 pm »

Según yoya, isset comprueba que se encuentre alojada x variable en la memoria, no es asi?
Y empty comprueba si está vacía. Ahora que pasa si le paso a empty la variable x y esta no fue declarada (no existe).


En línea

Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Como saber si un formulario se ha enviado
« Respuesta #21 en: 19 Marzo 2011, 02:50 am »

isset() no tiene que fallar y no es una alias de empty ni nada similar. Los dos tienes propósitos diferentes, si dices que ah fallado es porque en realidad el fallo es lógico.

Yo no he dicho que isset() sea un alias de empty. Pero para este propósito a mí empty me funciona mejor que isset(). isset lo que comprueba efectivamente es que la variable exista, que no sea un valor NULL, sin embargo por mi experiencia empty me ha sido mucho más eficaz para este caso concreto.

--EDIT------
Para demostrar que no es un fallo lógico sino del funcionamiento de la función para este caso concreto. Que quede claro, que yo he dicho que prefiero usar empty para este caso concreto ya que isset "falla", y aquí tenéis una prueba.

Este es el código fuente de ese fichero:

Código
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>PRUEBA</title>
  6. </head>
  7.  
  8. <body>
  9. <?php
  10. echo "<div style='padding: 10px; background-color: #C8DBEA; border: 1px solid #5887C0;'>EN ESTE MOMENTO SE USA LA FUNCIÓN ISSET<br />";
  11. if(isset($_POST['nombre'])){
  12. echo "La variable nombre contiene algo";
  13. }else{
  14. echo "La variable nombre NO contiene nada";
  15. }
  16. echo "</div><br />";
  17. echo "<div style='padding: 10px; background-color: #C8DBEA; border: 1px solid #5887C0;'>EN ESTE MOMENTO SE USA LA FUNCIÓN EMPTY<br />";
  18. if(!empty($_POST['nombre'])){
  19. echo "La variable nombre contiene algo";
  20. }else{
  21. echo "La variable nombre NO contiene nada";
  22. }
  23. echo "</div><br /><br />";
  24. ?>
  25.  
  26. <form action="test.php" method="POST">
  27. <input type="text" name="nombre" /><br />
  28.    <input type="text" name="edad" /><br />
  29.    <input type="submit" value="Enviar" />
  30. </form>
  31. </body>
  32. </html>

Os pido que hagáis una prueba:

- Entrad en la web, y veréis que ambas funciones dicen que el campo nombre no contiene nada, luego NO RELLENÉIS ningún campo y pulsad en "Enviar". La función isset dirá que el campo SÍ contiene algo mientras que empty dirá que NO. No es que la función no funcione correctamente, ya que al pulsar a enviar el formulario efectivamente la variable $_POST['nombre'] ya no es NULL pero sin embargo está vacía por lo tanto no cumple nuestro propósito. Es por esta razón por la que aconsejo usar !empty, para este caso concreto, que como podéis ver sigue diciendo que el campo nombre está vacío.

- Si se escribe algo en el campo nombre obviamente ambas funciones dirán que el campo nombre contiene algo.

Si alguien no cree que este es el código escrito en el fichero test.php puede copiar y pegar y hacer la prueba por sí mismo.

Espero que así quede aclarado el por qué digo que para este propósito recomiendo encarecidamente usar empty() en lugar de isset().

Según yoya, isset comprueba que se encuentre alojada x variable en la memoria, no es asi?
Y empty comprueba si está vacía. Ahora que pasa si le paso a empty la variable x y esta no fue declarada (no existe).

Respondiendo a tu pregunta Castg!, como puedes ver en el ejemplo, no pasa nada. Si le pasas a empty una variable no declarada pues la dará como vacía, y si le pasas una declarada pues simplemente comprobará si efectivamente está vacía o no, creo que con el ejemplo queda claro.

Saludos.


« Última modificación: 19 Marzo 2011, 03:24 am por Spider-Net » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Como saber si un formulario se ha enviado
« Respuesta #22 en: 19 Marzo 2011, 12:54 pm »

Citar
Entrad en la web, y veréis que ambas funciones dicen que el campo nombre no contiene nada, luego NO RELLENÉIS ningún campo y pulsad en "Enviar". La función isset dirá que el campo SÍ contiene algo mientras que empty dirá que NO
Cita de: Yoya
isset() no tiene que fallar y no es una alias de empty ni nada similar. Los dos tienes propósitos diferentes, si dices que ah fallado es porque en realidad el fallo es lógico.


El error aquí esta, en que estas intentando comprobar con isset si $_POST['nombre'] contiene algún valor pero isset el propósito de isset es diferente.
El isset comprueba que $_POST['nombre'] esta definida, no comprueba que tenga algun valor.


Deberia ser asi:
Citar
EN ESTE MOMENTO SE USA LA FUNCIÓN ISSET
La variable nombre esta definida

EN ESTE MOMENTO SE USA LA FUNCIÓN EMPTY
La variable nombre NO contiene nada

Ej:
Código
  1. <?php
  2. $hola = false;
  3.  
  4. if(isset($hola))
  5. {
  6.   echo "Esta definida la variable";
  7. }
  8.  
  9. if(!empty($hola))
  10. {
  11.   echo "La variable contiene algun valor";
  12. }
  13. ?>

Salida:
Código:
Esta definida la variable

Pd: Si encuentras algún bug en alguna función puedes reportarla a php.net.

Saludos.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Como saber si un formulario se ha enviado
« Respuesta #23 en: 19 Marzo 2011, 14:26 pm »

Tienes toda la razón compañero Yoya, la función isset tiene otro propósito por eso cuando el compañero rob1104 ha dicho que "La solucion mas simple y correcta a tu problema es isset()" yo he dicho que no. Porque para este caso concreto no sirve la función isset, no cumple el propósito solicitado.

Hay que tener en cuenta que yo no he dicho que la función falle o no cumpla su propósito en general, sino que no es efectiva para hacer lo que se ha planteado en este post. Al menos eso es lo que he intentado expresar.
En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: Como saber si un formulario se ha enviado
« Respuesta #24 en: 19 Marzo 2011, 16:41 pm »

Pero segun lo que yo entendi, el quiere saber si se ha enviado un formulario para poder entrar a registrar.php y que no puedan entrar directo. Algo asi deberia bastar
Código
  1. //Si no esta definido aceptar es porque no entró a traves del index
  2. //redirigo al index para que de click en aceptar
  3. if(!isset($_POST['aceptar']))
  4.    header("Location:index.php");
  5. else
  6. {
  7.    //codigo
  8. }

Claro, el boton del submit debe tener por name aceptar y el method del formulario post


Saludos
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Como saber si un formulario se ha enviado
« Respuesta #25 en: 19 Marzo 2011, 19:32 pm »

Tengo 2 archivos, index.php y registrarse.php. Cuando paso de index a registrarse, el formulario de registrarse aun no ha interactuado. Como hago para saberlo, es como una validad que quiero hacer.

Yo creo que lo que quiere decir es que tiene un index con un enlace a registrarse.php y registrarse.php contiene tanto el formulario como los procesos que deben ejecutarse una vez el formulario es rellenado (igual que en el ejemplo que yo he puesto), por lo tanto para que los datos no se procesen antes de que se rellene el formulario se usa la comprobación if(!empty($_POST['var'])) para verificar que no está vacío y así proceder a procesar los datos.

Si usa isset y un usuario pulsa en enviar sin rellenar ningún campo entraría a procesar sin información, por lo tanto podría generar errores.

De cualquier manera, sea cual sea la situación, ya el usuario tiene respuestas para todas la situaciones, así que espero que se de por satisfecho XDDD
« Última modificación: 19 Marzo 2011, 19:47 pm por Spider-Net » En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
COMO SABER SI UN FORMULARIO ES VULNERABLE A SQL-INJECTION?
Nivel Web
competitivo 2 7,863 Último mensaje 30 Octubre 2004, 01:26 am
por el-brujo
Como saber el pais de un correo hotmail enviado
Mensajería
hunter18 1 4,203 Último mensaje 8 Octubre 2010, 10:57 am
por T0rete
Cómo saber qué formulario abrio a otro?
.NET (C#, VB.NET, ASP)
luison 2 3,862 Último mensaje 1 Julio 2016, 20:00 pm
por Eleкtro
MapsTube -> Para saber donde fue enviado un video a youtube.
Noticias
portaro 0 1,696 Último mensaje 18 Marzo 2012, 21:30 pm
por portaro
Saber quien me ha enviado un email
Dudas Generales
mazorca 1 5,108 Último mensaje 4 Mayo 2013, 14:55 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines