Foros del Web » Programando para Internet » PHP »

no entiendo comparacion ==, operador logico

Estas en el tema de no entiendo comparacion ==, operador logico en el foro de PHP en Foros del Web. Buenas, tengo una duda en como interpreta PHP el siguiente ejercicio, podes copiar el codigo se adaptara con facilidad para poder ver el problema con ...
  #1 (permalink)  
Antiguo 18/09/2009, 10:01
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 5 meses
Puntos: 7
no entiendo comparacion ==, operador logico

Buenas, tengo una duda en como interpreta PHP el siguiente ejercicio, podes copiar el codigo se adaptara con facilidad para poder ver el problema con mas claridad:

Código PHP:
<form name="form1" action="" method="get">
    <select name="cosa">
<?php
$OptionsTableShow 
= array(
    
'1-2-3-4-5-6' => 'Todos las opciones',
    
1              => 'Opcion 1',
    
2              => 'Opcion 2',
    
3              => 'Opcion 3',
    
4              => 'Opcion 4',
    
5              => 'Opcion 5',
    
6              => 'Opcion 6');

foreach(
$OptionsTableShow as $_value => $_name) {
    
$tmp = ($_value == $_REQUEST['cosa']) ? ' selected="selected"' NULL;
    echo 
'        <option value="' $_value '"' $tmp '>' htmlentities($_name) . "</option>\n";
}
?>
    </select>
    <input type="submit" name="submit">
</form>
El problema es que cuando se hace submit, el loop foreach va a revisar que options se ha seleccionado, el problema es que si selecciono el numero uno con valor: "1-2-3-4-5-6" me selecciona tambien el segundo con valor: "1". Evidentemente no hay ningun valor repetido, porque toma como true (1 == 1-2-3-4-5-6).

He probado lo siguiente, sustituyendo los guines por comas(,), puntos(.), dos puntos(:) y no funciona, he probado forzando a string la cadena ($_value == (string)$_REQUEST['cosa']), y no funciona, que sera??
  #2 (permalink)  
Antiguo 18/09/2009, 10:07
Avatar de djsos  
Fecha de Ingreso: septiembre-2007
Ubicación: Madrid-España
Mensajes: 374
Antigüedad: 16 años, 6 meses
Puntos: 14
Respuesta: no entiendo comparacion ==, operador logico

PHP es un lenguaje linela es decir el cosigo fuente lo interpreta de arriba has ta abajo. Un Sakudo
__________________
Es de bien nacidos ser agradecidos.
Desarrollo de software a medida | TPV Comercios
  #3 (permalink)  
Antiguo 18/09/2009, 10:14
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 5 meses
Puntos: 7
Respuesta: no entiendo comparacion ==, operador logico

gracias djsos, pero evidentemente ese no ha sido la pregunta ni mucho menos la solucion xD
  #4 (permalink)  
Antiguo 18/09/2009, 10:23
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 4 meses
Puntos: 69
Respuesta: no entiendo comparacion ==, operador logico

rudy, sucede que estás comparando un string "1" contra otro string "1-2-3-4-5-6", y hasta donde da el largo de los dos strings (1 caracter) ambos son iguales.

Para eso tenés que utilizar el signo de "identidad", que es ===-

Entonces, en tu código cuando compares, hazlo asi :
Código PHP:
Ver original
  1. ($_value === $_REQUEST['cosa']) ?
Y solo será cierto si ambos strings son EXACTAMENTE iguales.

Saludos !
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #5 (permalink)  
Antiguo 18/09/2009, 10:32
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 5 meses
Puntos: 7
Respuesta: no entiendo comparacion ==, operador logico

Webstudio, tambien probe con eso, pero no funciono, y no funciona ni con los demas, ese esta peor, entiendo bien como funciona el operador === y no funcionaria.
  #6 (permalink)  
Antiguo 18/09/2009, 10:40
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 4 meses
Puntos: 69
Respuesta: no entiendo comparacion ==, operador logico

Rudy, el problema es que estás comparando un string ($_REQUEST['cosa'] es un string) contra un integer (en el caso de los índices de tu array, 1, 2, 3, etc, son enteros).

Entonces '1' es != a '1-2-3-4-5-6', pero '1' también es != a 1, 2, 3, etc...
Asi que como lo veo, vas a tener que convertir todo a un mismo tipo. O castear lo que te devuelve $_REQUEST['cosa'] a un integer y chequear eso, o convertir todos los índices de tu array $OptionTableShow a strings.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 18/09/2009, 10:51
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 5 meses
Puntos: 7
Respuesta: no entiendo comparacion ==, operador logico

Si tenes razon, he dado con el clavo, la solucion es

Código PHP:
<?php ((string)$_value == (string)$_REQUEST['cosa'])?>
forzando ambos a ser un string, un tanto confuso y dificil de detectar un error asi, me tome la tarea de verificar con certeza que pasaba y realice unos ejemplos, ahi van:

Código PHP:
<?php 
$text 
'holaaaaaa'//es string
$text1 'hola'//es string
if($text == $text1) {
    echo 
'ejemp1: son iguales<br>'//no son iguales
}

$num 1234//es int
$num1 '1234,123'//es string
if($num1 == $num) {
    echo 
'ejemp2: son iguales<br>'//php dice que son iguales porque 
                                    //forza a ser int $num1 y solo toma 1234
}

$text2 'holaaaaaa';
$text3 'hola';
if(
$text2 === $text3) {
    echo 
'ejemp3: son iguales<br>'//no son iguales
}

$num2 1234;
$num3 '1234';
if(
$num2 === $num3) {
    echo 
'ejemp4: son iguales<br>'//no son iguales, el operador === verifica primero el tipo, 
                                    //uno es int el otro string, aunque a primera vista a 
                                    //nosotros nos parecen iguales, no lo es
}
?>
  #8 (permalink)  
Antiguo 18/09/2009, 10:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: no entiendo comparacion ==, operador logico

Verifica que esten en string los dos

Edito: ya habian resuelto el problema
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 06:13.