Foros del Web » Programando para Internet » PHP »

Imposible if

Estas en el tema de Imposible if en el foro de PHP en Foros del Web. O yo estoy haciendo algo fatal o mi PHP se ha vuelto loco. Me ocurre lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original if ( ...
  #1 (permalink)  
Antiguo 04/12/2010, 20:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Imposible if

O yo estoy haciendo algo fatal o mi PHP se ha vuelto loco.
Me ocurre lo siguiente:
Código PHP:
Ver original
  1. if ($_POST['categoria'] == 0) {
  2.         echo '<script type="text/javascript">alert("Error: no has seleccionado categoria.") </script>'};

Pues esto siempre me da que es TRUE.
Me dirigi a comprobar que pasaba con la variable asique hice un:
Código PHP:
Ver original
  1. echo $_POST['categoria']
antes del IF, y mi sorpresa llega cuando eso me dice que es: Cervezas

Osea: me esta diciendo que CERVEZAS == 0 es TRUE

Como se come esto?
  #2 (permalink)  
Antiguo 04/12/2010, 20:32
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Imposible if

Cita:
Iniciado por mariomon17 Ver Mensaje
O yo estoy haciendo algo fatal o mi PHP se ha vuelto loco.
Me ocurre lo siguiente:
Código PHP:
Ver original
  1. if ($_POST['categoria'] == 0) {
  2.         echo '<script type="text/javascript">alert("Error: no has seleccionado categoria.") </script>'};

Pues esto siempre me da que es TRUE.
Me dirigi a comprobar que pasaba con la variable asique hice un:
Código PHP:
Ver original
  1. echo $_POST['categoria']
antes del IF, y mi sorpresa llega cuando eso me dice que es: Cervezas

Osea: me esta diciendo que CERVEZAS == 0 es TRUE

Como se come esto?
Cambia esto:
Código PHP:
Ver original
  1. if ($_POST['categoria'] == 0) {
  2.         echo '<script type="text/javascript">alert("Error: no has seleccionado categoria.") </script>'};

Por esto:
Código PHP:
Ver original
  1. if (empty($_POST['categoria'])) {
  2. echo '<script type="text/javascript">alert("Error: no has seleccionado categoria.") </script>';
  3. }
  #3 (permalink)  
Antiguo 04/12/2010, 20:38
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

Ok, voy a probar y te cuento.
  #4 (permalink)  
Antiguo 04/12/2010, 20:40
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

Me sigue pasando lo mismo,
te cuento el POST-CATEGORIA viene de un formulario en una lista multiple de varias opciones y la predeterminada es 0.
  #5 (permalink)  
Antiguo 04/12/2010, 20:41
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Imposible if

y estas seguro que es categoria? has un echo antes de hacer el if a ver que te muestra xq es extraño el condicional esta bien
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 04/12/2010, 20:44
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Imposible if

Verifica que no se te haya repetido el mismo nombre de campo, puede que por eso te lo mande como Cerveza.
  #7 (permalink)  
Antiguo 04/12/2010, 20:51
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

Captura del codigo y resultado (como veis hay un die() el resto de codigo no se ejecuta)

http://www.imaxenes.com/imagen/dibujo1ps48k9.jpg.html
  #8 (permalink)  
Antiguo 04/12/2010, 20:55
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

De hecho en el propio formulario tengo un script que se produce onclick, que si categoria es = 0 te avisa y ese funciona bien, solo me da error con el php.
Pero ademas no es la primera vez que me pasa... es un poco raro!
  #9 (permalink)  
Antiguo 04/12/2010, 21:12
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

¬¬ Cada vez mas cabreado!
Ahora resulta que eso es SIEMPRE, he puesto GET en vez de POST para comprobar y simplemente abriendo la pagina ya me ocurre. ya si que no lo entiendo
  #10 (permalink)  
Antiguo 04/12/2010, 21:13
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Imposible if

Si es un formulario déjalo en POST, si es un link, déjalo en GET.
  #11 (permalink)  
Antiguo 04/12/2010, 21:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Imposible if

A ver...

Tienes un error de concepto. ¿Contra qué quieres hacer la comparación del valor de $_POST['categoria']?

Mira esta página: http://www.php.net/manual/es/types.comparisons.php . Te darás cuenta de los resultados que obtendrás de una comparación dependiendo del tipo de elementos que está comparando (strings, enteros, booleanos, etc); y además, del tipo de comparación que estás realizando (flexible o estricta). En una comparación flexible (Usando el operador ==), El valor cero (0) es igual a un string. Es decir, la sentencia ("texto" == 0) siempre evaluará como verdadero (true).

Otro punto que estás pasando por alto es que los valores que obtienes de un formulario, y por ende, que accesa a través de la superglobal $_POST, siempre serán de tipo string. Por lo tanto, una comparación flexible con 0 siempre te dará true.

La solución con empty entonces tampoco te servirá pues tu valor "cero" es el string "0". Por lo tanto, teóricamente $_POST['categoria'] nunca será empty.

Puedes comparar strings usando la comparación flexible, es decir, ($_POST['categoria'] == "0"), pero lo recomendable en todo caso sería usar una función de PHP que está hecha justo para eso: strcasecmp():

Código PHP:
Ver original
  1. if( strcasecmp($_POST['categoria'], "0") == 0) {
  2.     // ...
  3. }

Con eso debería funcionar como quieres,

Saludos,
  #12 (permalink)  
Antiguo 04/12/2010, 21:40
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Imposible if

Muchisimas gracias, comprobe que con las dos me funciona bien.
Un saludo!

Etiquetas: imposible
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 01:19.