Foros del Web » Programando para Internet » PHP »

No doy con la consulta

Estas en el tema de No doy con la consulta en el foro de PHP en Foros del Web. Hola a tod@s otra vez, Tengo una página con un formulario en el que se escriben datos y hay unos checkbox, se puede rellenar simplemente ...
  #1 (permalink)  
Antiguo 08/05/2008, 05:36
 
Fecha de Ingreso: julio-2007
Mensajes: 75
Antigüedad: 16 años, 9 meses
Puntos: 0
No doy con la consulta

Hola a tod@s otra vez,

Tengo una página con un formulario en el que se escriben datos y hay unos checkbox, se puede rellenar simplemente un dato, por ejemplo el nombre y luego se accede a la base de datos y hace la consulta con ese nombre. Pero tengo un problema ya que en el WHERE del SELECT tengo puesto OR, como muestro a continuación:

$condiciones = "FROM Clientes where nombre='$nombre' OR devpaq='$devpaq' OR pendiente='$pendiente' OR apellido1='$apellidos' OR apellido2='$apellidos' OR calle='$calle' OR numero='$numero' OR localidad='$localidad' OR ciudad='$ciudad' OR cp='$cp' OR pais='$pais' OR telefono='$telefono' OR movil='$movil' OR email='$email' OR edad='$edad' OR pendiente='$pendiente' OR devpaq='$devpaq' OR contacto='$contacto' OR leidoguion='$leidoguion' OR envpresen='$envpresen' OR distribuidor='$distribuidor' OR compaq='$compaq' OR diremal='$diremal' OR pagadopaq='$pagadopaq' OR correomal='$correomal' ORDER BY nombre";



Así me saldría cualquier registro que cumpliese una condición de las que están, al haber checkbox vacios pues también se cumplirían........ si pongo AND en las condiciones nunca se cumplen porque no hay en la base de datos ningún registro que cumpla todas las condiciones. Por ejemplo, pongo en nombre Pepito y Pendiente tachado, sólo quiero que me muestre los que se llamen Pepito y estén Pendientes, no los que tienen los otros checkbox no marcados........


Para hacer esto tendría que comprobar campo por campo, si está marcado o no, antes de hacer el select?? y si no están marcados hacer el select con los campos que no estén vacios??? o habría hacer alguna forma de que se hiciera bien la consulta sin tener que hacer esa comprobación..... Es decir, que buscase sólamente por los campos que están completos??


A ver si me podéis echar un cable.......... Muchas gracias!!!!!!
  #2 (permalink)  
Antiguo 08/05/2008, 07:21
 
Fecha de Ingreso: febrero-2008
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: No doy con la consulta

Buenas Marta

Yo te recomiendo que escribas el sql con php, me explico

Código PHP:
$condiciones "FROM Clientes where 0=0";
if (isset(
$nombre)){$condiciones.= " AND nombre='".$nombre."'";}
if (isset(
$devpaq)){$condiciones.= " AND devpaq='".$devpaq."'";}

//y asi con todos los campos. 
De esta forma consigues que si introducen 2 campos, tenga encuenta los 2, y no cualquiera de ellos, ya que usas OR.

Espero haberte ayudado, un saludo :)
  #3 (permalink)  
Antiguo 10/05/2008, 07:39
 
Fecha de Ingreso: julio-2007
Mensajes: 75
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: No doy con la consulta

Cita:
Iniciado por Floody Ver Mensaje
Buenas Marta

Yo te recomiendo que escribas el sql con php, me explico

Código PHP:
$condiciones "FROM Clientes where 0=0";
if (isset(
$nombre)){$condiciones.= " AND nombre='".$nombre."'";}
if (isset(
$devpaq)){$condiciones.= " AND devpaq='".$devpaq."'";}

//y asi con todos los campos. 
De esta forma consigues que si introducen 2 campos, tenga encuenta los 2, y no cualquiera de ellos, ya que usas OR.

Espero haberte ayudado, un saludo :)
Hola Floody,

he puesto todos los campos como me has indicado, y de momento no me encuentra ningún resultado, como si no hubiera datos.... es raro, ya que los hay. Voy a seguir "pegandome" y te cuento. Aquí está el select que hago:

$condiciones = "FROM Clientes WHERE 0=0";
if (isset($nombre)){$condiciones.= " AND nombre='".$nombre."'";}
if (isset($apellidos)){$condiciones.= " AND apellido1='".$apellidos."'";}
if (isset($domicilio)){$condiciones.= " AND calle='".$domicilio."'";}
if (isset($localidad)){$condiciones.= " AND localidad='".$localidad."'";}
if (isset($cp)){$condiciones.= " AND cp='".$cp."'";}
if (isset($pais)){$condiciones.= " AND pais='".$pais."'";}
if (isset($telefono)){$condiciones.= " AND telefono='".$telefono."'";}
if (isset($movil)){$condiciones.= " AND movil='".$movil."'";}
if (isset($email)){$condiciones.= " AND email='".$email."'";}
if (isset($pendiente)){$condiciones.= " AND pendiente='".$pendiente."'";}
if (isset($devpaq)){$condiciones.= " AND devpaq='".$devpaq."'";}
if (isset($contacto)){$condiciones.= " AND contacto='".$contacto."'";}
if (isset($leidoguion)){$condiciones.= " AND leidoguion='".$leidoguion."'";}
if (isset($envpresen)){$condiciones.= " AND envpresen='".$envpresen."'";}
if (isset($distribuidor)){$condiciones.= " AND distribuidor='".$distribuidor."'";}
if (isset($compaq)){$condiciones.= " AND compaq='".$compaq."'";}
if (isset($diremal)){$condiciones.= " AND diremal='".$diremal."'";}
if (isset($pagadopaq)){$condiciones.= " AND pagadopaq='".$pagadopaq."'";}
if (isset($correomal)){$condiciones.= " AND correomal='".$correomal."'";}

$subquery = "SELECT * ".$condiciones;
$subresult=mysql_query($subquery);
$num_registros = mysql_num_rows($subresult);


Muchas gracias, un saludo!!!

Última edición por MartaMad; 10/05/2008 a las 07:46
  #4 (permalink)  
Antiguo 10/05/2008, 07:56
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: No doy con la consulta

asi si no vas a conseguir ninguno o todos los registros.....

la forma LEGAL de hacer seria

Código PHP:
SELECT FROM Clientes WHERE nombre='$nombre'
y las comparaciones las haces a base de PHP, osea, dices que trabajas con checkbox...

Código PHP:

<input type="checkbox" name="opcion" value="email" 
<?php
   
if ($row[email])
      {
            echo 
"checked";
      }
?>
> // este cierra la etiqueta input
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #5 (permalink)  
Antiguo 11/05/2008, 14:54
 
Fecha de Ingreso: julio-2007
Mensajes: 75
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: No doy con la consulta

Cita:
Iniciado por el cirujano Ver Mensaje
asi si no vas a conseguir ninguno o todos los registros.....

la forma LEGAL de hacer seria

Código PHP:
SELECT FROM Clientes WHERE nombre='$nombre'
y las comparaciones las haces a base de PHP, osea, dices que trabajas con checkbox...

Código PHP:

<input type="checkbox" name="opcion" value="email" 
<?php
   
if ($row[email])
      {
            echo 
"checked";
      }
?>
> // este cierra la etiqueta input
elcirujano, en el checkbox no tengo problemas es al coger los campos y tengo que comprobar si vienen vacíos para hacer el select solo con los que vengan rellenos...

No sé si me explico bien...
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 09:19.