Foros del Web » Programando para Internet » PHP »

De nuevo por yo por aca,es sobre un buscador de php+postgresql

Estas en el tema de De nuevo por yo por aca,es sobre un buscador de php+postgresql en el foro de PHP en Foros del Web. Tengo una gran duda por favor espero que me puedan ayudar de verdad quisiera ahora realizar una busqueda de muchos campos,estos son:nombres,apellidos,cedula,sexo,departamento,car go,tipo_de_usuario,asi estos son ...
  #1 (permalink)  
Antiguo 06/01/2012, 08:26
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
De nuevo por yo por aca,es sobre un buscador de php+postgresql

Tengo una gran duda por favor espero que me puedan ayudar de verdad quisiera ahora realizar una busqueda de muchos campos,estos son:nombres,apellidos,cedula,sexo,departamento,car go,tipo_de_usuario,asi estos son mis archivos:

filtro.php
<fieldset><br/>
<form name="filtro" method="post" action="?q=node/84"/>
<legend aling="center"><i><b><p align="center">Busqueda por informacion personal</p></b></legend>
Nombres: <input class="required" type="text" name="nombres" size="20" maxlength="30" /><br />
Apellidos: <input class="required" type="text" name="apellidos" size="20" maxlength="30" /><br />
Cedula: <input class="number" type="text" name="cedula" size="10" maxlength="30" /><br />
Sexo:
<input name="sexo" type="radio" value="M" />M
<input name="sexo" type="radio" value="F" />F
<fieldset>
<br />
<legend aling="center"><i><b><p align="center">Busqueda por informacion laboral</p></b></legend>
Departamento: <input class="required" type="text" name="departamento" size="20" maxlength="30" /><br />
Cargo: <input class="required" type="text" name="cargo" /><br />
<fieldset>
<br />
<legend aling="center"><i><b><p align="center">Busqueda por usuario</p></b></legend>
Tipo de usuario: <select name='tipo_de_usuario'>
<option value=' '>Seleccione</option>
<option value='Administrador'>Administrador</option>
<option value='Consultar'>Consultar</option>
<option value='Registrar'>Registrar</option>
</select><br />
<input type="submit" style="background-color:#A0EB2E" value="Buscar" />
</form>


Mi archivo pocesar
procesar_filtro.php
//conexion a la base de datos
//consulta sencilla
$palabra = $_POST['palabra'];
$buscar = $_POST['buscar'];
$query = "SELECT * from registro WHERE nombres LIKE '{$_POST['nombres']}%'AND apellidos LIKE '{$_POST['apellidos']}%'AND cedula LIKE '{$_POST['cedula']}%'AND sexo LIKE '{$_POST['sexo']}%'AND departamento LIKE '{$_POST['departamento']}%'AND cargo LIKE '{$_POST['cargo']}%'AND tipo_de_usuario LIKE '{$_POST['tipo_de_usuario']}%'";
$result = pg_query($query);
if ($_POST['nombres'] == null)
if ($_POST['apellidos'] == null)
if ($_POST['cedula'] == null)
if ($_POST['sexo'] == null)
if ($_POST['departamento'] == null)
if ($_POST['cargo'] == null)
if ($_POST['tipo_de_usuario'] == null)
echo "necesita escribir algo, para buscar";
else {
$total = pg_num_rows($result);
echo "<table border = '1'> \n";
echo "<tr> \n";
echo "<td><b>Nombres</b></td> \n";
echo "<td><b>Apellidos</b></td> \n";
echo "<td><b>Cedula</b></td> \n";
echo "<td><b>Sexo</b></td> \n";
echo "<td><b>Telefono celular</b></td> \n";
echo "<td><b>Telefono de habitacion</b></td> \n";
echo "<td><b>Fecha de nacimiento</b></td> \n";
echo "<td><b>Direccion de habitacion</b></td> \n";
echo "<td><b>Email</b></td> \n";
echo "<td><b>Departamento</b></td> \n";
echo "<td><b>Cargo</b></td> \n";
echo "<td><b>Nombre de usuario</b></td> \n";
echo "<td><b>Contrasena</b></td> \n";
echo "<td><b>Tipo de usuario</b></td> \n";
echo "</tr> \n";
if ($total != 0) {
while ($row = pg_fetch_array($result)) {
echo "<tr> \n";
echo "<td>$row[0]</td> \n";
echo "<td>$row[1]</td> \n";
echo "<td>$row[2]</td> \n";
echo "<td>$row[3]</td> \n";
echo "<td>$row[4]</td> \n";
echo "<td>$row[5]</td> \n";
echo "<td>$row[6]</td> \n";
echo "<td>$row[7]</td> \n";
echo "<td>$row[8]</td> \n";
echo "<td>$row[9]</td> \n";
echo "<td>$row[10]</td> \n";
echo "<td>$row[11]</td> \n";
echo "<td>$row[12]</td> \n";
echo "<td>$row[13]</td> \n";
echo "</tr> \n";
echo $total;
}
echo "</table> \n";
} else {
echo "No se encontraron resultados";
}
}

pg_free_result($result);
pg_close($dbconn4);
?>
Ahora bien mi filtro o busqueda se me ejecuta peroooo es la ultima la que ejecuta osea esta if ($_POST['tipo_de_usuario'] == null) ,y las de arriba las ingnora,Que error tengo,que me faltaa por fissssss?de verdad esto es lo que me falta
  #2 (permalink)  
Antiguo 06/01/2012, 10:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Eso es porque tienes un mal uso de llaves, cada if debe de ir con su respectivo juego de llaves para mayor claridad.

Aparte si lo que quieres es probar varias condiciones en un mismo if, usa el operador && and o el de || or.
  #3 (permalink)  
Antiguo 06/01/2012, 12:24
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Bueno mira lo hice tambien asi,pero el problema ahora q me surge es que el codigo ya lo ejecuta es decir me trae todos mis datos si yo ingresar una letra en la busqueda ni nada porque sucede esto?
<?php
//echo "entre"; die();
$conn_string = "host=localhost port=5432 dbname=taherys user=postgres password=123456";
$dbconn4 = pg_connect($conn_string);
if ($dbconn4) {
//echo "conexion exitosa";
}
//consulta sencilla
$palabra = $_POST['palabra'];
$buscar = $_POST['buscar'];
$query = "SELECT * from registro WHERE nombres LIKE '{$_POST['nombres']}%'AND apellidos LIKE '{$_POST ['apellidos']}%'AND cedula LIKE '{$_POST ['cedula']}%'AND sexo LIKE '{$_POST ['sexo']}%'AND departamento LIKE '{$_POST ['departamento']}%'AND cargo LIKE '{$_POST ['cargo']}%'";
$result = pg_query($query);

if (isset($_POST['nombres']) && isset($_POST['apellidos']) && isset($_POST['cedula']) && isset($_POST['sexo']) && isset($_POST['sexo']) && isset($_POST['departamento']) && isset($_POST['cargo']) && isset($_POST['tipo_de_usuario'])) {

echo "necesita escribir algo, para buscar";

}else {
$total = pg_num_rows($result);
echo "<table border = '1'> \n";
echo "<tr> \n";
echo "<td><b>Nombres</b></td> \n";
echo "<td><b>Apellidos</b></td> \n";
echo "<td><b>Cedula</b></td> \n";
echo "<td><b>Sexo</b></td> \n";
echo "<td><b>Telefono celular</b></td> \n";
echo "<td><b>Telefono de habitacion</b></td> \n";
echo "<td><b>Fecha de nacimiento</b></td> \n";
echo "<td><b>Direccion de habitacion</b></td> \n";
echo "<td><b>Email</b></td> \n";
echo "<td><b>Departamento</b></td> \n";
echo "<td><b>Cargo</b></td> \n";
echo "<td><b>Nombre de usuario</b></td> \n";
echo "<td><b>Contrasena</b></td> \n";
echo "<td><b>Tipo de usuario</b></td> \n";
echo "</tr> \n";

if ($total != 0) {
while ($row = pg_fetch_array($result)) {
echo "<tr> \n";
echo "<td>$row[0]</td> \n";
echo "<td>$row[1]</td> \n";
echo "<td>$row[2]</td> \n";
echo "<td>$row[3]</td> \n";
echo "<td>$row[4]</td> \n";
echo "<td>$row[5]</td> \n";
echo "<td>$row[6]</td> \n";
echo "<td>$row[7]</td> \n";
echo "<td>$row[8]</td> \n";
echo "<td>$row[9]</td> \n";
echo "<td>$row[10]</td> \n";
echo "<td>$row[11]</td> \n";
echo "<td>$row[12]</td> \n";
echo "<td>$row[13]</td> \n";
echo "</tr> \n";
echo $total;
}
echo "</table> \n";
} else {
echo "No se encontraron resultados";
}
}

pg_free_result($result);
pg_close($dbconn4);
?>
<a href='http://localhost/drupal/?q=node/68'>Regresar al listado de usuarios</a>
<a href='http://localhost/drupal/?q=node/82'>Regresar al filtro</a>
  #4 (permalink)  
Antiguo 06/01/2012, 13:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Eso es por tu consulta, al dejar los datos en blanco queda como: campo LIKE '%', y pues como estas comparando con like, te trae todos los registros.

Tienes que armar tu consulta paso a paso con cada if.

Saludos.
  #5 (permalink)  
Antiguo 06/01/2012, 13:37
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Holaaa
Mira lo hice asi pero me sigue ejecutando todos mis datos me los trae sin colocar nada,se que tengo un problema en el query peroo no entiendo como colocarlo,cuando me dices que lo realice cada consulta por cada if no es como lo puse en mi codigo,que esta malo por favor?
<?php
//echo "entre"; die();
$conn_string = "host=localhost port=5432 dbname=taherys user=postgres password=123456";
$dbconn4 = pg_connect($conn_string);
if ($dbconn4) {
//echo "conexion exitosa";
}
//consulta sencilla
$palabra = $_POST['palabra'];
$buscar = $_POST['buscar'];
$query = "SELECT * from registro WHERE nombres LIKE '{$_POST['nombres']}%'AND apellidos LIKE '{$_POST ['apellidos']}%'AND cedula LIKE '{$_POST ['cedula']}%'AND sexo LIKE '{$_POST ['sexo']}%'AND departamento LIKE '{$_POST ['departamento']}%'AND cargo LIKE '{$_POST ['cargo']}%'";
$result = pg_query($query);
if (isset($_POST['nombres'])) {

$nombres = "nombres LIKE '%{$_POST['nombres']}%'";

}

if (isset($_POST['apellidos'])) {

$apellidos = "apellidos LIKE '%{$_POST['apellidos']}%'";
}

if (isset($_POST['cedula'])) {

$cedula = "cedula LIKE '%{$_POST['cedula']}%'";
}

if (isset($_POST['sexo'])) {

$sexo = "sexo LIKE '%{$_POST['sexo']}%'";
}

if (isset($_POST['departamento'])) {

$departamento = "departamento LIKE '%{$_POST['departamento']}%'";
}

if (isset($_POST['cargo'])) {

$cargo = "cargo LIKE '%{$_POST['cargo']}%'";
}

if (isset($_POST['tipo_de_usuario'])) {

$tipo_de_usuario = "tipo_de_usuario LIKE '%{$_POST['tipo_de_usuario']}%'";

echo "necesita escribir algo, para buscar";

} else {
$total = pg_num_rows($result);
echo "<table border = '1'> \n";
echo "<tr> \n";

echo "<td><b>Nombres</b></td> \n";
echo "<td><b>Apellidos</b></td> \n";
echo "<td><b>Cedula</b></td> \n";
echo "<td><b>Sexo</b></td> \n";
echo "<td><b>Telefono celular</b></td> \n";
echo "<td><b>Telefono de habitacion</b></td> \n";
echo "<td><b>Fecha de nacimiento</b></td> \n";
echo "<td><b>Direccion de habitacion</b></td> \n";
echo "<td><b>Email</b></td> \n";
echo "<td><b>Departamento</b></td> \n";
echo "<td><b>Cargo</b></td> \n";
echo "<td><b>Nombre de usuario</b></td> \n";
echo "<td><b>Contrasena</b></td> \n";
echo "<td><b>Tipo de usuario</b></td> \n";
echo "</tr> \n";

if ($total != 0) {
while ($row = pg_fetch_array($result)) {
echo "<tr> \n";
echo "<td>$row[0]</td> \n";
echo "<td>$row[1]</td> \n";
echo "<td>$row[2]</td> \n";
echo "<td>$row[3]</td> \n";
echo "<td>$row[4]</td> \n";
echo "<td>$row[5]</td> \n";
echo "<td>$row[6]</td> \n";
echo "<td>$row[7]</td> \n";
echo "<td>$row[8]</td> \n";
echo "<td>$row[9]</td> \n";
echo "<td>$row[10]</td> \n";
echo "<td>$row[11]</td> \n";
echo "<td>$row[12]</td> \n";
echo "<td>$row[13]</td> \n";
echo "</tr> \n";
echo $total;
}
echo "</table> \n";
} else {
echo "No se encontraron resultados";
}
}

pg_free_result($result);
pg_close($dbconn4);
?>
  #6 (permalink)  
Antiguo 06/01/2012, 13:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Pues ahí lo que haces es solo generar variables, el problema lo tienes en tu query, tienes que crear tu query dependiendo de las opciones a buscar, no la puedes crear toda de una sola vez, algo así:
Código PHP:
Ver original
  1. $filters = array();
  2. if (!empty($_POST['nombre'])) {
  3.       $filters[] = "nombre LIKE '%".$_POST['nombre']."%'";
  4. }
  5.  
  6. if (count($filters) > 0) { // más de una opción para buscar
  7.        $query = "SELECT * FROM tabla WHERE " . implode(' AND ', $filters);
  8.        echo $query;
  9. } else {
  10.        echo "¡no hay opciones de búsqueda!";
  11. }
  #7 (permalink)  
Antiguo 06/01/2012, 14:13
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Holaaaa de nuevo,primero que nada de verdad te pido disculpa por las molestias ocasionadas,o si soy un poquito lenta en esta cuestion de verdad disculpa,llevo tiempo desarrollando este sistema,hice,mi modulo de editar,consultar,sin ningun problema pero de verdad que este de buscar me esta costando muchisimo
mira como realice mi codigo basado en el ejemplo que me colocastes,cuando lo pruebo en el netbeans me surge error en la ultima linea como si le faltara algo nose proble con llaves con todas clases de simbolos pero igual me da el error
<?php
//echo "entre"; die();
$conn_string = "host=localhost port=5432 dbname=taherys user=postgres password=123456";
$dbconn4 = pg_connect($conn_string);
if ($dbconn4) {
//echo "conexion exitosa";
}
//consulta sencilla
$palabra = $_POST['palabra'];
$buscar = $_POST['buscar'];
$query = "SELECT * from registro WHERE nombres LIKE '{$_POST['nombres']}%'AND apellidos LIKE '{$_POST ['apellidos']}%'AND cedula LIKE '{$_POST ['cedula']}%'AND sexo LIKE '{$_POST ['sexo']}%'AND departamento LIKE '{$_POST ['departamento']}%'AND cargo LIKE '{$_POST ['cargo']}%'";
$result = pg_query($query);
if (isset($_POST['nombres'])) {
$f = "nombres LIKE '%" . $_POST['nombres'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
if (isset($_POST['apellidos'])) {
$f = "apellidos LIKE '%" . $_POST['apellidos'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
if (isset($_POST['cedula'])) {
$f = "cedula LIKE '%" . $_POST['cedula'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
if (isset($_POST['sexo'])) {
$f = "sexo LIKE '%" . $_POST['sexo'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
if (isset($_POST['departamento'])) {
$f = "departamento LIKE '%" . $_POST['departamento'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
if (isset($_POST['cargo'])) {
$f = "cargo LIKE '%" . $_POST['cargo'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";

if (isset($_POST['tipo_de_usuario'])) {
$f = "tipo_de_usuario LIKE '%" . $_POST['tipo_de_usuario'] . "%'";
}
if (count($f) > 0) { // más de una opción para buscar
$query = "SELECT * from registro WHERE" . implode(' AND ', $f);
echo $query;
} else {
echo "¡no hay opciones de búsqueda!";
}

$total = pg_num_rows($result);
echo "<table border = '1'> \n";
echo "<tr> \n";
echo "<td><b>Nombres</b></td> \n";
echo "<td><b>Apellidos</b></td> \n";
echo "<td><b>Cedula</b></td> \n";
echo "<td><b>Sexo</b></td> \n";
echo "<td><b>Telefono celular</b></td> \n";
echo "<td><b>Telefono de habitacion</b></td> \n";
echo "<td><b>Fecha de nacimiento</b></td> \n";
echo "<td><b>Direccion de habitacion</b></td> \n";
echo "<td><b>Email</b></td> \n";
echo "<td><b>Departamento</b></td> \n";
echo "<td><b>Cargo</b></td> \n";
echo "<td><b>Nombre de usuario</b></td> \n";
echo "<td><b>Contrasena</b></td> \n";
echo "<td><b>Tipo de usuario</b></td> \n";
echo "</tr> \n";

if ($total != 0) {
while ($row = pg_fetch_array($result)) {
echo "<tr> \n";
echo "<td>$row[0]</td> \n";
echo "<td>$row[1]</td> \n";
echo "<td>$row[2]</td> \n";
echo "<td>$row[3]</td> \n";
echo "<td>$row[4]</td> \n";
echo "<td>$row[5]</td> \n";
echo "<td>$row[6]</td> \n";
echo "<td>$row[7]</td> \n";
echo "<td>$row[8]</td> \n";
echo "<td>$row[9]</td> \n";
echo "<td>$row[10]</td> \n";
echo "<td>$row[11]</td> \n";
echo "<td>$row[12]</td> \n";
echo "<td>$row[13]</td> \n";
echo "</tr> \n";
echo $total;
}
echo "</table> \n";
} else {
echo "No se encontraron resultados";
}
}

pg_free_result($result);
pg_close($dbconn4);
?>
<a href='http://localhost/drupal/?q=node/68'>Regresar al listado de usuarios</a>
<a href='http://localhost/drupal/?q=node/82'>Regresar al filtro</a>
//aqui me aparece mi error
  #8 (permalink)  
Antiguo 06/01/2012, 14:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Lo estas haciendo mal, no tienes que crear la query completa como te digo tienes que armarla de forma dinámica y almacenar todas tus opciones de búsqueda y al final las armas en tu query.

El ejemplo que te deje es con una opción pero hacerla con más opciones solo es cuestión de agregar más opciones al if:
Código PHP:
Ver original
  1. $filters = array();
  2. if (!empty($_POST['nombre'])) {
  3.       $filters[] = "nombre LIKE '%".$_POST['nombre']."%'";
  4. }
  5. if (!empty($_POST['apellido'])) {
  6.       $filters[] = "apellido LIKE '%".$_POST['apellido']."%'";
  7. }
  8.  
  9. if (count($filters) > 0) { // más de una opción para buscar
  10.        $query = "SELECT * FROM tabla WHERE " . implode(' AND ', $filters);
  11.        echo $query;
  12. } else {
  13.        echo "¡no hay opciones de búsqueda!";
  14. }

Con eso puedes ver como se arma el query y vas agregando los filtros que sean necesarios, por favor trata de entender el proceso porque así solamente haciendo copy & paste no vas a llegar muy lejos.
  #9 (permalink)  
Antiguo 06/01/2012, 14:24
 
Fecha de Ingreso: enero-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: De nuevo por yo por aca,es sobre un buscador de php+postgresql

Mejorrr dicho aun el codigo no me funciona nose que pasooo :( y lo hago tal cual como me lo explikstes pero con if (isset($_POST['nombres'])) {-->un ejemplo,porq si lo hago con el codigo que me sugeristes tampoco me devuelve nada :_(((,por fisss ayudamee tengo ya dia en esto y no es corta y pegar como dices tu ni te imaghinas como la he pasado haciendo todos lo modulos que tenmgo hasta los momentos

Última edición por melisatita; 11/01/2012 a las 12:39

Etiquetas: registro, buscadores, usuarios
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 12:28.