Ver Mensaje Individual
  #21 (permalink)  
Antiguo 20/05/2013, 02:05
Avatar de the_sheriff_pino
the_sheriff_pino
 
Fecha de Ingreso: abril-2013
Ubicación: Córdoba
Mensajes: 118
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: error If y else <fácil>

Cita:
Iniciado por Bugger Ver Mensaje
yo he copiado tú código tal cual estaba!

el caso es que debes, sacar tu SELECT * FROM tabla_X fuera de donde creas las cláusulas WHERE, donde pones los parámetros. Entonces sino hay parámetros te cargará todos los resultados - si hay parámetros entrará en tú IF y creará la cláusula WHERE.

algo así debería irte! es tu código algo modificado y optimizado, para comprobar las variables no debes poner tantos else if -

Código PHP:
Ver original
  1. <?php
  2. // Inicializamos la variable
  3. $clausula_where = "";
  4. // Esta funcion te devuelve WHERE o AND para montar tu clausula WHERE de la sentencia SQL
  5. function FWhere($clausula_where) { return ($clausula_where == '') ? ' WHERE ' : "$clausula_where AND "; }
  6.  
  7. // Comprobamos primer parámetro
  8. if(!empty($nombre)){
  9.     // Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
  10.     $clausula_where = Fwhere($clausula_where) ." tb1.Nombre LIKE '%".$nombre."%' ";
  11. }
  12. // Comprobamos Segundo parámetro
  13. if(!empty($localidad)){
  14.     // Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
  15.     // En este caso si existiera la variable anterior la funcion FWHERE te devolveria un AND
  16.      $clausula_where = Fwhere($clausula_where) ." tb1.Localidad LIKE '%$nombre%' ";
  17. }
  18. // Comprobamos Tercer parámetro
  19. if( !empty($provincia)){
  20.     // Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
  21.     // En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
  22.      $clausula_where =  Fwhere($clausula_where) ." tb1.Provincia LIKE '%$provincia%' ";
  23. }
  24. // Comprobamos Cuarto parámetro
  25. if(!empty($cif)){
  26.     // Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
  27.      // En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
  28.      $clausula_where =  Fwhere($clausula_where) ." tb1.CIF LIKE '%$nombre%' ";
  29. }
  30.  
  31.  // En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
  32. $clausula_where =  Fwhere($clausula_where)."  tb2.nom_usuario = '".$user."'";
  33. $clausula_where .= "  ORDER BY Nombre ASC";
  34.  
  35. // Creamos la Sentencia SQL  y le pasamos la variable clausula_where
  36. $sql= " SELECT * FROM lista_clientes as tb1 INNER JOIN usuario_zona as tb2  
  37.        ON tb1.Zona = tb2.Zona ".$clausula_where;
  38. // Para provar el codigo puedes imprimir la sentencia por pantalla para ver que sale
  39. echo $sql;
  40. $consulta = mysql_query($sql) or die("Error en la sentencia SQL: ".$sql." - ".mysql_error());
  41.  
  42. if(mysql_num_rows($consulta)!=0)  
  43. {
  44. ?>
  45. <form action="index.php" name="form2" method="post">  
  46. <input type="submit" name="nuevo" value="Crear Nuevo Cliente" style="border-radius:15px" class="button large orange" />
  47. </form>
  48. <?php
  49. }else{
  50.     echo "No hay Resultados";
  51. }
  52. ?>

espero que te sirva!

Saludos
Amigo Bugger, perfectísimo, ya decía yo que estaba escribiendo demasiado código con la consulta.
Ahora está todo más claro, he reparado un par de fallos que tenía como que en la parte de la consulta de localidad y cif habías dejado $nombre, he metido la sesión para que reconozca el usuario y me ha quedado esto.
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>San Lorenzo</title>
</head>

<body>

<?php
$link 
mysql_connect('localhost''root','') or die("Error, no se ha conectado B.D.");
$bd=mysql_select_db('clientes'$link) or die("Error, no se ha seleccionado B.D.");
session_start();
    
$user        =    $_SESSION['nom_usuario'];

$nombre        =    isset($_POST['nombre'])        ? $_POST['nombre']        : NULL;
    
$localidad    =    isset($_POST['localidad'])    ? $_POST['localidad']    : NULL;
    
$provincia    =    isset($_POST['provincia'])    ? $_POST['provincia']    : NULL;
    
$cif        =    isset($_POST['cif'])         ? $_POST['cif']         : NULL;
    
$user        =    $_SESSION['nom_usuario'];
    
$sql        =    isset($sql)                 ? $sql                    NULL;
    
$consulta    =    isset($consulta)            ? $consulta                NULL;
// Inicializamos la variable
$clausula_where "";
// Esta funcion te devuelve WHERE o AND para montar tu clausula WHERE de la sentencia SQL
function FWhere($clausula_where) { return ($clausula_where == '') ? ' WHERE ' "$clausula_where AND "; }
 
// Comprobamos primer parámetro 
if(!empty($nombre)){
    
// Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
    
$clausula_where Fwhere($clausula_where) ." tb1.Nombre LIKE '%".$nombre."%' ";
}
// Comprobamos Segundo parámetro 
if(!empty($localidad)){
    
// Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
    // En este caso si existiera la variable anterior la funcion FWHERE te devolveria un AND
     
$clausula_where Fwhere($clausula_where) ." tb1.Localidad LIKE '%".$localidad."%' ";
}
// Comprobamos Tercer parámetro
if( !empty($provincia)){
    
// Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
    // En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
     
$clausula_where =  Fwhere($clausula_where) ." tb1.Provincia LIKE '%".$provincia."%' ";
}
// Comprobamos Cuarto parámetro
if(!empty($cif)){
    
// Si existe miramos la funcion FWhere - para saber si hay que poner un WHERE o un AND a la clausula
     // En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
     
$clausula_where =  Fwhere($clausula_where) ." tb1.CIF LIKE '%".$cif."%' ";
}
 
 
// En este caso si existiera alguna de las variables anteriores la funcion FWHERE te devolveria un AND
$clausula_where =  Fwhere($clausula_where)."  tb2.nom_usuario = '".$user."'"
$clausula_where .= "  ORDER BY Nombre ASC";
 
// Creamos la Sentencia SQL  y le pasamos la variable clausula_where
$sql" SELECT * FROM lista_clientes as tb1 INNER JOIN usuario_zona as tb2  
        ON tb1.Zona = tb2.Zona "
.$clausula_where;
// Para provar el codigo puedes imprimir la sentencia por pantalla para ver que sale
//echo $sql;
$consulta mysql_query($sql) or die("Error en la sentencia SQL: ".$sql." - ".mysql_error()); 
  
if(
mysql_num_rows($consulta)!=0)  
{
?>
<form action="index.php" name="form2" method="post">  
<input type="submit" name="nuevo" value="Crear Nuevo Cliente" style="border-radius:15px" class="button large orange" />
</form>
<?php
}else{
    
?>
    <form action="index.php" name="form2" method="post">  
<input type="submit" name="nuevo" value="Crear Nuevo Cliente" style="border-radius:15px" class="button large orange" />
</form>
    
    <?php
}
?>
<select name='clientes' size="5px" style="width:80%; font-size:22px;">

    <?php 
        
while($registro=mysql_fetch_assoc($consulta))
            {
?>
            <option value="<?php echo $registro['Nombre']; ?>"><?php echo $registro['Nombre']," ",$registro['Direccion']," ",$registro['Localidad']," ",$registro['Provincia'];  ?></option>
    
        <?php 
            
}
        
?>
    
   </select>

<?php //generaClientes();
        
exit();
        
?>


</body>
</html>
Problemas que tengo ahora:
1.- Cuando escribo algo en algún campo y luego lo borro manualmente, letra a letra y no queda ningún valor en ningún campo me aparece el siguiente error.
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/busqueda2.php on line 81

Se supone que si borro todos los campos debería de volver a salir la lista completa de clientes, pero no me aparece ningún cliente, además del error anterior.
2.- Que si se presiona INTRO que no haga nada, porque si estoy en el navegador y escribo algo en los campos, al presionar intro se va la consulta y me sale también el error de antes.

Un saludo y espero tu respuesta amigo!