Cita:
Iniciado por Bugger
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<?php
// 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
// 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
// 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 '%$nombre%' ";
}
// Comprobamos Tercer parámetro
// 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
// 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 '%$nombre%' ";
}
// 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;
{
?>
<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{
echo "No hay Resultados";
}
?>
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!