Foros del Web » Programando para Internet » PHP »

Verificar si existen varios registros en una BD

Estas en el tema de Verificar si existen varios registros en una BD en el foro de PHP en Foros del Web. Estimados amigos, necesito hacer una colsuta "multiple" a una base de datos y ver si las variables recogidas por un formulario existen en alguna parte ...

  #1 (permalink)  
Antiguo 17/04/2012, 11:05
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Pregunta Verificar si existen varios registros en una BD

Estimados amigos, necesito hacer una colsuta "multiple" a una base de datos y ver si las variables recogidas por un formulario existen en alguna parte de mi base de datos.

Tengo el siguiente codigo:

Código PHP:
$sql "SELECT * FROM proyecto WHERE integrante1='$correo1' OR integrante2='$correo2' OR integrante3='$correo3' OR integrante4='$correo4' OR integrante5='$correo5'"
    
$res mysql_query($sql) or die(mysql_error()); 

    if (
mysql_num_rows($res) > 0

  echo 
"Ya existe"; return;

else 

  echo 
"No existe";

Pero resulta que siempre me dice que existe (y en la base de datos no existe).
Alguien me puede ayudar porfavor?

La idea de esta consulta es que las personas deben poner varios correos para inscribir un proyecto en una web, entonces si algun correo pertenece a otro proyecto debe tirar un error!.

gracias por su tiempo!.

Saludos!

D:
  #2 (permalink)  
Antiguo 17/04/2012, 12:12
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Verificar si existen varios registros en una BD

No existe que?

si alguno de todos los correos existe la consulta traerá resultados.
  #3 (permalink)  
Antiguo 17/04/2012, 12:31
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Se supone que cuando dice "No existe" se refiere que los correos ingresados por la persona no están inscritos ya y se puede realizar la inscripción.

Y cuando existe un correo en otro proyecto, tira error y se detiene todo.

El problema es que si en la base de datos NO HAY NADA e intento inscribir un proyecto, siempre me dice que ya existe.. y la bd esta vacia =/.

Saludos!
  #4 (permalink)  
Antiguo 17/04/2012, 12:37
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Verificar si existen varios registros en una BD

primero mira de poner las comillas correctamente en la consulta:

Código PHP:
'$var' mal

"$var" ok

'".$var."' ok 
lego haces un

Código PHP:
echo $sql//para ver si los valores son corerectos 
saludos
__________________
Tu álbum de cromos online!!
  #5 (permalink)  
Antiguo 17/04/2012, 13:03
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Ya lo arregle a como me detallaste:

Código PHP:
$sql "SELECT * FROM proyecto WHERE 
    
    integrante1=' "
.$correo1." ' OR integrante1=' ".$correo2." ' OR integrante1=' ".$correo3." ' OR integrante1=' ".$correo4." ' OR integrante1=' ".$correo5." ' OR
    
    integrante2=' "
.$correo1." ' OR integrante2=' ".$correo2." ' OR integrante2=' ".$correo3." ' OR integrante2=' ".$correo4." ' OR integrante2=' ".$correo5." ' OR

    integrante3=' "
.$correo1." ' OR integrante3=' ".$correo2." ' OR integrante3=' ".$correo3." ' OR integrante3=' ".$correo4." ' OR integrante3=' ".$correo5." ' OR
    
    integrante4=' "
.$correo1." ' OR integrante4=' ".$correo2." ' OR integrante4=' ".$correo3." ' OR integrante4=' ".$correo4." ' OR integrante4=' ".$correo5." ' OR
    
    integrante5=' "
.$correo1." ' OR integrante5=' ".$correo2." ' OR integrante5=' ".$correo3." ' OR integrante5=' ".$correo4." ' OR integrante5=' ".$correo5." ' ";
    
    
$res mysql_query($sql) or die(mysql_error());  

    if (
mysql_num_rows($res) > 0)  
{  
  echo 
"Ya existe Correo en otro proyecto"; return; 
}  
else  
{  
  echo 
"No existe Correos en otro proyecto "; return;

Y sigue el problema, pongo un correo que NO esta en la base de datos y me dice que existe :(.

Saludos y Gracias.
  #6 (permalink)  
Antiguo 17/04/2012, 13:12
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Verificar si existen varios registros en una BD

Puedes hacer un:

Código PHP:
echo $sql
y nos muestras el resultado??
__________________
Tu álbum de cromos online!!
  #7 (permalink)  
Antiguo 17/04/2012, 13:12
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

Veo que no controlas los valores nulos. Si alguien no ha ingresado, p.ej, integrante5 y hay algun nuevo correo(1-5) vacio, lo va a dar como igual.
  #8 (permalink)  
Antiguo 17/04/2012, 13:24
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por santris Ver Mensaje
Puedes hacer un:

Código PHP:
echo $sql
y nos muestras el resultado??
Este es el $sql que me da:

Código PHP:
Ya existe Correo en otro proyecto SELECT FROM proyecto WHERE integrante1=[email protected] ' OR integrante1=[email protected] ' OR integrante1=' ' OR integrante1=' ' OR integrante1=' ' OR integrante2=[email protected] ' OR integrante2=[email protected] ' OR integrante2=' ' OR integrante2=' ' OR integrante2=' ' OR integrante3=[email protected] ' OR integrante3=[email protected] ' OR integrante3=' ' OR integrante3=' ' OR integrante3=' ' OR integrante4=[email protected] ' OR integrante4=[email protected] ' OR integrante4=' ' OR integrante4=' ' OR integrante4=' ' OR integrante5=[email protected] ' OR integrante5=[email protected] ' OR integrante5=' ' OR integrante5=' ' OR integrante5=' ' 
  #9 (permalink)  
Antiguo 17/04/2012, 13:32
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
Veo que no controlas los valores nulos. Si alguien no ha ingresado, p.ej, integrante5 y hay algun nuevo correo(1-5) vacio, lo va a dar como igual.
La verdad no entiendo, primera vez que intento hacer esto y me complique mucho!.
Podrias explicarme de lo que me hablas?.

Gracias.
  #10 (permalink)  
Antiguo 17/04/2012, 13:33
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

Disculpa que insista, pero si en cualquir registro de la db, integrante(n)='' y cualquier variable $correo(n)='', te va a dar el where como bueno.
  #11 (permalink)  
Antiguo 17/04/2012, 13:36
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Verificar si existen varios registros en una BD

con esa disyuntiva es normal que te devuelva siempre algo, solo que cualquiera de los integrantes tengan uno de los correos que envias o que cualquiera de los integrantes esté vacio te devolverá que ya existe.

saludos,
__________________
Tu álbum de cromos online!!
  #12 (permalink)  
Antiguo 17/04/2012, 13:39
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
Disculpa que insista, pero si en cualquir registro de la db, integrante(n)='' y cualquier variable $correo(n)='', te va a dar el where como bueno.
Y es posible que si me devuelve "vacío" lo tome como tal y no me de como bueno?.

Gracias.
  #13 (permalink)  
Antiguo 17/04/2012, 13:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por santris Ver Mensaje
con esa disyuntiva es normal que te devuelva siempre algo, solo que cualquiera de los integrantes tengan uno de los correos que envias o que cualquiera de los integrantes esté vacio te devolverá que ya existe.

saludos,
Claro, entiendo... y es posible evitar eso? =S

Gracias.
  #14 (permalink)  
Antiguo 17/04/2012, 13:56
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

Código PHP:

$correo1
="cor1";
$correo2="cor2";
$correo3="cor3";
$correo4="";
$correo5="acor5";

    
$filt=" concat(integrante1,integrante2,integrante3,intgrante4,integrante5) like ";
    for(
$ii=1;$ii<6;$ii++){
        eval(
'$correo=$correo'.$ii.';');
        if(
$correo<>""){$where=($where==""?$filt."'%$correo%'":$where." or $filt"."'%$correo'%");}
    }
    
$sql "SELECT * FROM proyecto WHERE "+$where
$where tiene que valer algo asi como:
concat(integrante1,integrante2,integrante3,intgran te4,integrante5) like '%cor1%' or concat(integrante1,integrante2,integrante3,intgran te4,integrante5) like '%cor2'% or concat(integrante1,integrante2,integrante3,intgran te4,integrante5) like '%cor3'% or concat(integrante1,integrante2,integrante3,intgran te4,integrante5) like '%acor5'%




A ver si te sirve! Cualquir duda, aqui estamos.
  #15 (permalink)  
Antiguo 17/04/2012, 14:52
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

wow, no entendi mucho el codigo que me pasaste.

Podrías explicarme como obtengo un resultado de eso? para poder hacer la condicional?

gracias! :S
  #16 (permalink)  
Antiguo 17/04/2012, 15:16
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

Código PHP:

$correo1
="cor1"//<---esto, son ejemplos de los valores que recibiras.
$correo2="cor2";
$correo3="cor3";
$correo4="";
$correo5="acor5";

    
//esta variable, prepara el filtro a aplicar
    //concat(a,b,c) agrupa los campos a b y c en una cadena
    //loquesea like '%pato%'  va a buscar el valor 'pato' dentro de la cadena loquesea
    
$filt=" concat(integrante1,integrante2,integrante3,intgrante4,integrante5) like ";
    
//este bucle, es para ahorrarnos escribir lo mismo 5 veces
    
for($ii=1;$ii<6;$ii++){
        
//este eval, asigna a la variable $correo, los valores $correo1,2,3,4 y 5 para cada itercaccion
        
eval('$correo=$correo'.$ii.';'); 
        
//si el correo no es nulo, aplica el filtro
        
if($correo<>""){$where=($where==""?$filt."'%$correo%'":$where." or $filt"."'%$correo'%");}
        
//este if de abajo, es el equivalente al de arriba. Lo pongo a modo de explicacion. NO USES LOS DOS!!!
        
if($correo<>""){
            if(
$where==""){
                
$where=$filt."'%$correo%'"//si $where esta vacio...
            
}else{
                
$where=$where." or ".$filt."'%$correo'%"//si ya existe,lo sumo y le pongo el or
            
}
        }
        
    }
    
$sql "SELECT * FROM proyecto WHERE "+$where//aqui, añado el filtro ya construido a tu select. 


espero haberme explicado.
Cualquier duda, aquí estamos.
  #17 (permalink)  
Antiguo 17/04/2012, 15:33
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Verificar si existen varios registros en una BD

Quizas este lo entiendas mejor:

Evalua cada $correo(n) y si no está vacio crea las condiciones de la consulta.

Pero me pregunto porqué quieres evaluar 5 correos por cada integrante?
Código PHP:
<?php
$condiciones 
" 1 = 2"
if(!empty(trim($correo1)))
  
$condiciones .= " OR  integrante1 = '".$correo1."' OR integrante2 = '".$correo1."' OR integrante3 = '".$correo1."' OR integrante4 = '".$correo1."' OR  integrante5 = '".$correo1."'";
if(!empty(
trim($correo2)))
  
$condiciones .= " OR  integrante1 = '".$correo2."' OR integrante2 = '".$correo2."' OR integrante3 = '".$correo2."' OR integrante4 = '".$correo2."' OR  integrante5 = '".$correo2."'";

//etc...

$sql "select * from proyecto where $condiciones";
?>
__________________
Tu álbum de cromos online!!
  #18 (permalink)  
Antiguo 17/04/2012, 15:46
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Ajam ya comprendo como funciona, pero el SQL me da 0 cuando pongo

Código PHP:
 echo "$sql"
Me podrias explicar por favor como agregarle el "if" que tenia de que si existe haga tanto y si no existe haga otra cosa?!.

Te lo agradeceria mucho.

gracias.
  #19 (permalink)  
Antiguo 17/04/2012, 15:52
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

para quien va la pregunta?
  #20 (permalink)  
Antiguo 17/04/2012, 15:57
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
para quien va la pregunta?
Para ti oscartt67, no había visto la respuesta de santris!.

Gracias ambos, toy viendo como hacer funcionar esto...
  #21 (permalink)  
Antiguo 17/04/2012, 16:01
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

..y a que if te refieres? hay varios...
  #22 (permalink)  
Antiguo 17/04/2012, 16:03
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
..y a que if te refieres? hay varios...
cuando pongo:

Código PHP:
$sql "SELECT * FROM proyecto WHERE "+$where//aqui, añado el filtro ya construido a tu select. 
Eso me debería devolver un "existe el correo en otro proyecto" o un "no existe el proyecto", pero no entiendo como poner esa condiciones
  #23 (permalink)  
Antiguo 17/04/2012, 16:08
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

Mira, así te queda el codigo entero.


Código PHP:
<?php
    $filt
=" concat(integrante1,integrante2,integrante3,intgrante4,integrante5) like ";
    for(
$ii=1;$ii<6;$ii++){
        eval(
'$correo=$correo'.$ii.';'); 
        if(
$correo<>""){$where=($where==""?$filt."'%$correo%'":$where." or $filt"."'%$correo'%");}
    }
    
$sql "SELECT * FROM proyecto WHERE "+$where;

    
$res mysql_query($sql) or die(mysql_error());   

    if (
mysql_num_rows($res) > 0)   
    {   
      echo 
"Ya existe Correo en otro proyecto"; return;  
    }   
    else   
    {   
      echo 
"No existe Correos en otro proyecto "; return; 
    }  
?>
venga va, que ya lo tienes!!
  #24 (permalink)  
Antiguo 17/04/2012, 16:08
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Verificar si existen varios registros en una BD

Mira prueba este tal cual haber si te sirve:

Código PHP:
<?php
$correo1
='[email protected]';
$correo2='';
$condiciones " 1 = 2";
if(!empty(
$correo1))
  
$condiciones .= " OR  integrante1 = '".$correo1."' OR integrante2 = '".$correo1."' OR integrante3 = '".$correo1."' OR integrante4 = '".$correo1."' OR  integrante5 = '".$correo1."'";
if(!empty(
$correo2))
  
$condiciones .= " OR  integrante1 = '".$correo2."' OR integrante2 = '".$correo2."' OR integrante3 = '".$correo2."' OR integrante4 = '".$correo2."' OR  integrante5 = '".$correo2."'";
$sql "select * from proyecto where $condiciones";
echo 
$sql;
?>
Lo he probado y el resultado es este:

Código PHP:
select from proyecto where 1 OR integrante1 '[email protected]OR integrante2 '[email protected]OR integrante3 '[email protected]OR integrante4 '[email protected]OR integrante5 '[email protected]
__________________
Tu álbum de cromos online!!
  #25 (permalink)  
Antiguo 17/04/2012, 16:16
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
Mira, así te queda el codigo entero.


Código PHP:
<?php
    $filt
=" concat(integrante1,integrante2,integrante3,intgrante4,integrante5) like ";
    for(
$ii=1;$ii<6;$ii++){
        eval(
'$correo=$correo'.$ii.';'); 
        if(
$correo<>""){$where=($where==""?$filt."'%$correo%'":$where." or $filt"."'%$correo'%");}
    }
    
$sql "SELECT * FROM proyecto WHERE "+$where;

    
$res mysql_query($sql) or die(mysql_error());   

    if (
mysql_num_rows($res) > 0)   
    {   
      echo 
"Ya existe Correo en otro proyecto"; return;  
    }   
    else   
    {   
      echo 
"No existe Correos en otro proyecto "; return; 
    }  
?>
venga va, que ya lo tienes!!
Uff!! esto me da "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0' at line 1"

porque sera?
  #26 (permalink)  
Antiguo 17/04/2012, 16:28
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

$sql = "SELECT * FROM proyecto WHERE "+$where; mal!!!
$sql = "SELECT * FROM proyecto WHERE $where"; bien!!!

  #27 (permalink)  
Antiguo 17/04/2012, 16:29
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por santris Ver Mensaje
Mira prueba este tal cual haber si te sirve:

Código PHP:
<?php
$correo1
='[email protected]';
$correo2='';
$condiciones " 1 = 2";
if(!empty(
$correo1))
  
$condiciones .= " OR  integrante1 = '".$correo1."' OR integrante2 = '".$correo1."' OR integrante3 = '".$correo1."' OR integrante4 = '".$correo1."' OR  integrante5 = '".$correo1."'";
if(!empty(
$correo2))
  
$condiciones .= " OR  integrante1 = '".$correo2."' OR integrante2 = '".$correo2."' OR integrante3 = '".$correo2."' OR integrante4 = '".$correo2."' OR  integrante5 = '".$correo2."'";
$sql "select * from proyecto where $condiciones";
echo 
$sql;
?>
Lo he probado y el resultado es este:

Código PHP:
select from proyecto where 1 OR integrante1 '[email protected]OR integrante2 '[email protected]OR integrante3 '[email protected]OR integrante4 '[email protected]OR integrante5 '[email protected]
En este código si me funciono (al parecer jeje), filtra las variables que bienen vacías para que no me devuelve siempre que si existen cierto?.
  #28 (permalink)  
Antiguo 17/04/2012, 16:36
 
Fecha de Ingreso: agosto-2010
Mensajes: 156
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Verificar si existen varios registros en una BD

Cita:
Iniciado por oscartt67 Ver Mensaje
$sql = "SELECT * FROM proyecto WHERE "+$where; mal!!!
$sql = "SELECT * FROM proyecto WHERE $where"; bien!!!

Si exactamente probe eso! pero me siguió dando un error de:

Código HTML:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% or concat(integrante1,integrante2,integrante3,intgrante4,integrante5) like '%2' at line 1
Que raro? no entiendo el error.
  #29 (permalink)  
Antiguo 17/04/2012, 16:43
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

if($correo<>""){$where=($where==""?$filt."'%$corre o%'":$where." or $filt"."'%$correo'%");} mnal!!!

if($correo<>""){$where=($where==""?$filt."'%$corre o%'":$where." or $filt"."'%$correo%'");} bien!!!



lo siento....
  #30 (permalink)  
Antiguo 17/04/2012, 16:44
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Verificar si existen varios registros en una BD

if($correo<>""){$where=($where==""?$filt."'%$corre o%'":$where." or $filt"."'%$correo%'");} bien!!!



...llevo demasiado frente al ordenador.....

Etiquetas: bd, formulario, mysql, registros, sql, verificar, variables
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 04:50.