Foros del Web » Programando para Internet » PHP »

Uso se &&

Estas en el tema de Uso se && en el foro de PHP en Foros del Web. Hola gente, tengo la siguiente función, la cual necesito que devuelva 1 si $total es mayor a 0 y $dni es distinto de 11111111; no ...
  #1 (permalink)  
Antiguo 12/07/2012, 07:05
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años, 6 meses
Puntos: 0
Uso se &&

Hola gente, tengo la siguiente función, la cual necesito que devuelva 1 si $total es mayor a 0 y $dni es distinto de 11111111; no se que esta mal, porque no esta funcionando de esta manera..

Código PHP:
Ver original
  1. <?php require_once('conectar.php');
  2. $dni=$_POST['dni'];
  3. mysql_select_db($base, $conectar);
  4. $query = "SELECT * FROM control where dni='$dni'";
  5. $Resultado = mysql_query($query, $conectar) or die(mysql_error());
  6. $total = mysql_num_rows($Resultado);
  7. if($total > 0 && $dni != 11111111)
  8. {echo"1";}
  9. ?>

Alguna corrección???
  #2 (permalink)  
Antiguo 12/07/2012, 07:15
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 14 años
Puntos: 7
Respuesta: Uso se &&

Cita:
Iniciado por majo_83 Ver Mensaje
Hola gente, tengo la siguiente función, la cual necesito que devuelva 1 si $total es mayor a 0 y $dni es distinto de 11111111; no se que esta mal, porque no esta funcionando de esta manera..

Código PHP:
Ver original
  1. <?php require_once('conectar.php');
  2. $dni=$_POST['dni'];
  3. mysql_select_db($base, $conectar);
  4. $query = "SELECT * FROM control where dni='$dni'";
  5. $Resultado = mysql_query($query, $conectar) or die(mysql_error());
  6. $total = mysql_num_rows($Resultado);
  7. if($total > 0 && $dni != 11111111)
  8. {echo"1";}
  9. ?>

Alguna corrección???
Prueba esto:

Código PHP:
$query "SELECT * FROM control where dni='".$dni."'"
Saludos,
  #3 (permalink)  
Antiguo 12/07/2012, 07:17
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Uso se &&

usa intval($_POST['dni']) para convertir explícitamente la cadena a número.

consulta la tabla de precedencia de operadores para no tener dudas al respecto de como hacer la expresión: http://www.php.net/manual/es/languag...precedence.php
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #4 (permalink)  
Antiguo 12/07/2012, 07:20
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 14 años
Puntos: 7
Respuesta: Uso se &&

Cita:
Iniciado por jeixuxspn Ver Mensaje
Prueba esto:

Código PHP:
$query "SELECT * FROM control where dni='".$dni."'"
Por que lo que está haciendo tu consulta, es buscar un dni que sea igual a '$dni' (como si fuera una cadena) y no al valor que contiene la variable.

Saludos,
  #5 (permalink)  
Antiguo 12/07/2012, 07:20
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Uso se &&

OK.. muchas gracias...
__________________
Majo
  #6 (permalink)  
Antiguo 12/07/2012, 07:26
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Uso se &&

@jeixuxspn, PHP puede analizar variables dentro de cadenas con comillas dobles, por lo tanto:

Código PHP:
Ver original
  1. $query = "SELECT * FROM control where dni='$dni'";
  2. //es igual a:
  3. $query = "SELECT * FROM control where dni='".$dni."'";

de igual forma MySQL el error puede deberse a que trata de comparar un string con un integer, por lo que debería eliminar las comillas simples del SQL:

Código PHP:
Ver original
  1. $query = "SELECT * FROM control where dni=$dni";

y con la conversión explícita que le indique:

Código PHP:
Ver original
  1. $dni = intval($_POST['dni']);

debería funcionar, además de que lo recomendable seria validar si dicho $_POST['dni'] es realmente un número, por el cual podría usar is_numeric().

No hace falta que repitas el mensaje si el usuario quien pregunta no ha respondido, puede que su problema sea otro.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 12/07/2012, 07:29
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 5 meses
Puntos: 20
Respuesta: Uso se &&

Código PHP:
$query "SELECT * FROM control where dni='$dni'"
faltan los apostrofes en los nombres de tablas y campos, sin eso mysql los toma como valores en vez de nombres.

Código PHP:
$query "SELECT * FROM `control` where `dni`='$dni'"
  #8 (permalink)  
Antiguo 12/07/2012, 07:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Uso se &&

@topo_bionico: realmente no es necesario a no ser que se usen espacios o nombres reservados en las tablas o campos, cada SDBMS tiene sus peculiaridades, por ejemplo en PostgreSQL se usan las comillas dobles
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #9 (permalink)  
Antiguo 12/07/2012, 07:34
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 5 meses
Puntos: 20
Respuesta: Uso se &&

Cita:
Iniciado por maycolalvarez Ver Mensaje
@topo_bionico: realmente no es necesario a no ser que se usen espacios o nombres reservados en las tablas o campos, cada SDBMS tiene sus peculiaridades, por ejemplo en PostgreSQL se usan las comillas dobles
Pero vos estas usando mysql, o no?

Hace la prueba, no cuesta nada
  #10 (permalink)  
Antiguo 12/07/2012, 07:40
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Uso se &&

Ok y por que no hacer esto

Código PHP:
Ver original
  1. $query = "SELECT * FROM control where dni='$dni' and dni <> '11111111' ";
  2. $Resultado = mysql_query($query,  $conectar) or die(mysql_error());
  3. if (mysql_num_rows($Resultado)) {
  4. /* ... */
  5. }

Saludos!
  #11 (permalink)  
Antiguo 12/07/2012, 07:42
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 14 años
Puntos: 7
Respuesta: Uso se &&

Bueno si vamos a un caso real un dni no es ni muchos menos un entero, ya que este se compone de 8 números y una letra, por lo que estará obligado a hacer una comparación de cadenas.

Tienes razón en esto:

Código PHP:
    $query "SELECT * FROM control where dni='$dni'";
    
//es igual a:
    
$query "SELECT * FROM control where dni='".$dni."'"

Última edición por jeixuxspn; 12/07/2012 a las 07:48
  #12 (permalink)  
Antiguo 12/07/2012, 07:57
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 5 meses
Puntos: 20
Respuesta: Uso se &&

Cita:
Iniciado por jeixuxspn Ver Mensaje
Bueno si vamos a un caso real un dni no es ni muchos menos un entero, ya que este se compone de 8 números y una letra, por lo que estará obligado a hacer una comparación de cadenas.

Código PHP:
    $query "SELECT * FROM control where dni='$dni'"// ---> Pues esto a veces falla
    //es igual a:
    
$query "SELECT * FROM control where dni='".$dni."'"
No tiene sentido concatenar variables usando comillas dobles, ya que PHP sabe que adentro de la cadena entre comillas dobles tiene que buscar los nombres de las variables declaradas.

Si el código es muy extenso se traduce en alta carga para el servidor.

Lo correcto seria usar comillas simples y concatenar las variables

Código PHP:
$query 'SELECT * FROM `control` where `dni`=\''.$dni.'\''
  #13 (permalink)  
Antiguo 12/07/2012, 08:07
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Uso se &&

bueno, pasamos de una simple pregunta a una discusión sobre rendimiento .
en el caso del tipo de datos del $dni como indica @jeixuxspn que se compone de letras con números depende de la lógica y/o reglas de negocio por que bien podría un DNI (sea lo que sea) ser diferente de un país a otro, por ejemplo en Venezuela tenemos entre otros el RIF y no se si es lo mismo o sea otra cosa .

@majo_83 es por eso lo importante de aclarar esos puntos para ofrecerte la respuesta precisa, el tema de rendimiento es importante, como no, pero lo fundamental es que se cumplan las reglas de negocio sobre los datos que manipules.
saludos
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: mysql, sql
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 22:11.