Foros del Web » Programando para Internet » PHP »

ayuda con cadena en una busqueda

Estas en el tema de ayuda con cadena en una busqueda en el foro de PHP en Foros del Web. Hola a todos, tengo un problema para un buscador que tengo en php Tengo dos criterios de busqueda: 1. Por numero de identificacion de la ...
  #1 (permalink)  
Antiguo 17/01/2011, 14:21
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
ayuda con cadena en una busqueda

Hola a todos, tengo un problema para un buscador que tengo en php
Tengo dos criterios de busqueda:
1. Por numero de identificacion de la persona
2,. Por nombres y apellidos

Y aca viene mi problema, en el criterio de nombres y apellidos tengo que unir dos campos de una tabla de mi base de datos:

NOM_EGR + APE_EGR

Como puedo hacer eso en mi criterio?..Acontinuacion mi buscador

Buscar.php

Código PHP:
Ver original
  1. <form action="resultados.php" method="post" name="form1" id="form1" onSubmit="return validarCampos()">
  2.                                                
  3.                                
  4.                                        
  5.    
  6.  select name="searchtype">
  7.   <option value="NUM_CED_EGR">Numero de cedula del egresado</option>
  8.     <option value="NOM_EGR">Nombres y apellidos</option>
  9.      </select>
  10.                                
  11.  Escriba la busqueda que desea realizar
  12.   <input name="buscar" type="text" id="buscar" size="90" maxlength="90">
  13.                                
  14.                                  
  15. <label>
  16. <input type="submit" name="buscar2" id="buscar2" value="Buscar" />
  17.  </label>
  18.  
  19. </form>

y resultados.php

Código PHP:
Ver original
  1. <?
  2. //se recibe criterio de busqueda seleccionado
  3. $searchtype = $_POST['searchtype'];
  4. //se recibe texto ingresado en caja de texto de busqueda
  5. $searchterm = $_POST['buscar'];
  6.  
  7. $searchterm= trim($searchterm);
  8. // Devuelve el valor que esta en el php.ini para usar magic_quotes. Que es si PHP debe de usar addslashes automáticamente en las cadenas de entrada (GET, POST y COOKIE)
  9.  
  10.   {
  11.   // agrega una barra invertida en una cadena de texto, donde hay comillas dobles o simples.
  12.  
  13.     $searchtype = addslashes($searchtype);
  14.     $searchterm = addslashes($searchterm);
  15.   }
  16. //conexion con mySQL y con base de datos
  17. @ $db = new mysqli('localhost', 'root', 'root', 'egresados');
  18.  
  19.  {
  20.      echo ' Error: No se pudo conectar a la base de datos, consulte a su administrador.  Por favor intente de nuevo!!.';
  21.      exit;
  22.  }
  23. // consulta
  24. $query = "select e.NUM_CED_EGR, e.NOM_EGR, e.APE_EGR, e.FEC_NAC_EGR, e.NUM_LIB_MIL, e.DIR_EGR, e.TEL_FIJ_EGR, e.TEL_MOV_EGR, e.EMA_EGR from egresado e  where e.".$searchtype." like '%".$searchterm."%'";
  25. $result = $db->query($query);
  26. $num_results = $result->num_rows;
  27. // si no hay resultas
  28.  
  29. if($num_results==0){
  30.    
  31.     echo '<h2>No se encontraron resultados de busqueda</h2>';
  32.    
  33.     echo "<a href='buscar.php' a style='text-decoration:none;' > <p><b> REALIZAR UNA NUEVA BUSQUEDA DE EGRESADO</b>.</a></p>";
  34.     exit;
  35.     }
  36.  
  37.  
  38. echo '<p><br>';
  39.  
  40.  
  41.  
  42.  
  43. for ($i=0; $i <$num_results; $i++)
  44.   {
  45.      $row = $result->fetch_assoc();
  46.      //se muestran los resultados
  47.    
  48.    
  49.      echo ' <center> <table width=100% border=1>';
  50.      echo '<tr>
  51.           <td align = "center">';
  52.      echo  '<b>No Identificacion';
  53.      echo '    
  54.           </td>';
  55.      echo '<td align = "center">';
  56.      echo $row['NUM_CED_EGR'];
  57.      echo '    
  58.           </td>';
  59.      echo ' </tr>';
  60.      echo '<tr>
  61.           <td align = "center">';
  62.      echo '<b>Nombres';
  63.      echo '    
  64.           </td>';
  65.      echo '<td align = "center">';
  66.      echo $row['NOM_EGR'];
  67.      echo '    
  68.           </td>';
  69.      echo ' </tr>';
  70.      echo '<tr>
  71.           <td align = "center">';
  72.      echo '<b>Apellidos';
  73.      echo '    
  74.           </td>';
  75.      echo '<td align = "center">';
  76.      echo $row['APE_EGR'];
  77.      echo '    
  78.           </td>';
  79.      echo ' </tr>';
  80.      echo '<tr>
  81.           <td align = "center">';
  82.      echo '<b>Fecha Nacimiento';
  83.      echo '    
  84.           </td>';
  85.      echo '<td align = "center">';
  86.      echo $row['FEC_NAC_EGR'];
  87.      echo '    
  88.           </td>';
  89.      echo ' </tr>';
  90.      echo '<tr>
  91.           <td align = "center">';
  92.      echo '<b>Numero de libreta';
  93.      echo '    
  94.           </td>';
  95.      echo '<td align = "center">';
  96.      echo $row['NUM_LIB_MIL'];
  97.      echo '    
  98.           </td>';
  99.      echo ' </tr>';
  100.      echo '<tr>
  101.           <td align = "center">';
  102.      echo '<b>Direccion';
  103.      echo '    
  104.           </td>';
  105.      echo '<td align = "center">';
  106.      echo $row['DIR_EGR'];
  107.      echo '    
  108.           </td>';
  109.      echo ' </tr>';
  110.      echo '<tr>
  111.           <td align = "center">';
  112.      echo '<b>Telefono fijo';
  113.      echo '    
  114.           </td>';
  115.      echo '<td align = "center">';
  116.      echo $row['TEL_FIJO_EGR'];
  117.      echo '    
  118.           </td>';
  119.      echo ' </tr>';
  120.      echo '<tr>
  121.           <td align = "center">';
  122.      echo '<b>Telefono Movil';
  123.      echo '    
  124.           </td>';
  125.      echo '<td align = "center">';
  126.      echo $row['TEL_MOV_EGR'];
  127.      echo '    
  128.           </td>';
  129.      echo ' </tr>';
  130.      echo '<tr>
  131.           <td align = "center">';
  132.      echo '<b>Correo electronico';
  133.      echo '    
  134.           </td>';
  135.      echo '<td align = "center">';
  136.      echo $row['EMA_EGR'];
  137.      echo '    
  138.            </center></td>';
  139.      echo ' </tr>';
  140.      
  141.   }
  142.  
  143. echo '</table>';
  144. $db->close();
  145.  
  146. ?>

Lo que quiero es que en el
Código HTML:
Ver original
  1. select name="searchtype"
de mi archivo buscar.php en la opcion
Código HTML:
Ver original
  1. <option value="NOM_EGR">Nombres y apellidos</option>

Pueda incluir tambien el campo APE_EGR

Como puedo hacer esto?..Agradezco me puedan colaborar
  #2 (permalink)  
Antiguo 17/01/2011, 14:39
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: ayuda con cadena en una busqueda

Lo más fácil es separar nombre y apellidos.

Si por cojones tienes que unirlos, deberás cambiar la extructura bastante.
La consulta para buscar en tablas con campos unidos es así:

SELECT id, CONCAT(nombre,' ',apellidos) as nombre_completo, edad FROM clientes HAVING nombre_completo LIKE '%alberto martinez%'
  #3 (permalink)  
Antiguo 17/01/2011, 14:39
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: ayuda con cadena en una busqueda

Creo que no te entendí, quieres concatenar los valores??? o incluir "APE_EGR" en donde?
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #4 (permalink)  
Antiguo 17/01/2011, 14:44
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: ayuda con cadena en una busqueda

Me jodieron la edición, así que termino aquí:
Como puedes ver, para filtrar por campos concatenados se utiliza HAVING en vez del WHERE, asi que tu forma genérica de construir la consulta ya no te vale. Piensa cómo cambiarlo, hay muchas soluciones posibles.
  #5 (permalink)  
Antiguo 17/01/2011, 15:02
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

Es que cuando yo selecciono el criterio de busqueda Nombres y apellidos:

Solo tengo ahi NOM_EGR, como concateno en ese select NOM_EGR y APE_EGR?

La consulta me devuelve bien los valores pero en el criterio de busqueda Nombres y apellidos solo me funciona con NOM_EGR, mas no con APE_EGR, porque es ahi donde creo que debo concatenar la busqueda
Como lo hago?

es decir, debo concatenar antes de buscar en el

Código HTML:
Ver original
  1. select name="searchtype">
  2.   <option value="NUM_CED_EGR">Numero de cedula del egresado</option>
  3.     <option value="NOM_EGR">Nombres y apellidos</option>
  4.      </select>

Pense que podia hacerlo asi :

<option value="NOM_EGR, ' '. APE_EGR">Nombres y apellidos</option>

Pero no me funciona..la concatenacion es antes de la busqueda
Los nombres y apellidos los muestro por separados en la respuesta
  #6 (permalink)  
Antiguo 17/01/2011, 15:08
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

Por ejemplo:
Una persona se llama Pedro Perez
Cuando ingreso como busquea Pedro, me trae los resultados
Pero si ingreso Pedro Perez no me trae resultados
  #7 (permalink)  
Antiguo 17/01/2011, 16:36
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: ayuda con cadena en una busqueda

Si ya decía yo, que tu conflicto iba en la concatenación.. Pero igual creo que sigo sin entender del todo, porque ahí solo estas poniendo un "tipo" de busqueda, o sea le das la opción de buscar por ID o por nombre y apellido.. es decir el usuario selecciona, porque criterio buscar..

De todas maneras, a ver si te esto te ayuda, intenta asi, en el valor de cada option:

<?php echo $NOM_EGR." ".$APE_EGR; ?>

Checa como se llaman las variables, NOM_EGR o APE_EGR, o que es realmente lo que quieres concatenar.. porque segun el ejemplo que pusiste, debes recuperar lo que contiene el campo de texto, y toma en cuenta lo que te dijo marlanga, por ahí debe ser tu consulta para buscar..

o bien agrega otro criterio de busqueda que se llame apellido.. igual te facilitaria mas las cosas.. incluso si no te recibe las dos palabras juntas en el campo de búsqueda, usa htmlentities o alguno semejante que te ayude a leer bien la cadena..

bueh! no se, son varias opciones, y siento que aún no te entiendo del todo..

saludos! ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #8 (permalink)  
Antiguo 17/01/2011, 18:22
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

Es precisamente esos dos campos los que necesito concatenar antes de realizar la busqueda

ya que en mi base de datos son campos por separado
NOM_EGR es el campo 1
APE_EGR es el campo 2

Lo probe asi:

Código PHP:
Ver original
  1. <select name="searchtype">
  2. <option value="NUM_CED_EGR">Numero de cedula del egresado</option>
  3.  <option value="<?php echo $NOM_EGR." ".$APE_EGR; ?>">Nombres y apellidos</option>
  4. </select>

Pero no me funciona

De que otra forma podria hacerlo?...gracias por la colaboración

Última edición por oscarbt; 17/01/2011 a las 18:30
  #9 (permalink)  
Antiguo 18/01/2011, 10:46
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: ayuda con cadena en una busqueda

Creo que estas confundido, en el combo en que tienes el "searchtype", es solo eso, por que elemento de búsqueda vas a buscar (que redundante.. ), por ID o por "nombre y apellido".. no tienes nada que concatenar en si..

Si esos dos son campos de la Base de Datos, entonces necesitas hacer una consulta, y lo que te regrese, es lo que debes usar... y concatenar como te mencione, entonces, es acaso que tienes un combo por cada registro de tu tabla??

Acuérdate que lo que pongas en ese option, es solo el nombre que tiene ese campo y como lo vas a recibir, le puedes poner el nombre que quieras...

sigo perdida u.u', en fin, saludos!
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #10 (permalink)  
Antiguo 18/01/2011, 18:38
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

La estructura de mi tabla es la siguiente:
Código MySQL:
Ver original
  1. /*==============================================================*/
  2. /* Table: EGRESADO                                              */
  3. /*==============================================================*/
  4. create table EGRESADO
  5. (
  6.    NUM_CED_EGR          int not null,
  7.    
  8.    NOM_EGR              char(25),
  9.    APE_EGR              char(25),
  10.    FEC_NAC_EGR          date,
  11.    NUM_LIB_MIL          char(11),
  12.    DIR_EGR              varchar(70),
  13.    TEL_FIJ_EGR          char(13),
  14.    TEL_MOV_EGR          char(10),
  15.    
  16.    EMA_EGR              varchar(70),
  17.    primary key (NUM_CED_EGR)
  18. );

Pero como le paso a mi select option los dos campos (NOM_EGR y APE_EGR), para que los tenga en cuenta en mi busqueda?
En el query no tengo problema ya que los muestro por separado
Gracias
  #11 (permalink)  
Antiguo 19/01/2011, 09:42
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: ayuda con cadena en una busqueda

@.@' ...

Justo cuando estaba respondiéndote y analizando lo que has escrito, creo que te entendí.

Imagino que lo que quieres, es darle un nombre al option, que tome en cuenta directamente el hecho de que el usuario escribió un nombre con un apellido.. sin necesidad de cambiar la consulta, cierto???

Sin embargo, aquí vas a tener conflictos, principalmente porque no sabes si realmente el usuario te va a escribir dos palabras en el campo de búsqueda cuando elija la opción de nombre y apellido..

Y sobre todo la consulta no puede ser la misma porque son búsquedas diferentes, cuando buscas por id, que cuando buscas por nombre y apellido, es decir, debes tomar en cuenta que valores son los que recibes para poder saber como buscar..

Entonces te recomiendo que tomes en cuenta lo que desde un principio te escribió Marlanga.. ese tipo de consulta te puede servir.. el caso es que verifiques que tipo de searchtype llega, y de ahí con un if, cuantas palabras realmente tienes, y confirmes cual es la consulta que debes usar..

Espero haberme explicado..

Suertesita!! ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #12 (permalink)  
Antiguo 19/01/2011, 15:16
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

Cita:
Iniciado por silvanha Ver Mensaje
@.@' ...



Sin embargo, aquí vas a tener conflictos, principalmente porque no sabes si realmente el usuario te va a escribir dos palabras en el campo de búsqueda cuando elija la opción de nombre y apellido..
Si realmente no habia tenido en cuenta este aspecto, voy a tener en cuenta la consulta, ahora me surge una pregunta, recomiendas en la base de datos dejar aparte los nombres de los apellidos?...Porque podria en lugar de tener dos campos (NOM_EGR y APE_EGR), tener uno solo que tenga los nombres y apellidos

Podria tambien dejarlo asi?
  #13 (permalink)  
Antiguo 19/01/2011, 16:16
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: ayuda con cadena en una busqueda

Eso es más conveniencia tuya, no se que te sea más útil, si deseas poder consultar en tu Base, por apellidos, es más fácil así, pero si crees que siempre será por nombre completo, pues entonces junta lo en un solo campo, cuestión de que veas que es lo que necesitas.. también ve el número de registros, sin son demasiados, y por cuestiones de espacio y esas cosas en la BD..

Me alegra saber que si te entendí jajajaj, saludos! ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #14 (permalink)  
Antiguo 20/01/2011, 06:02
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con cadena en una busqueda

jejeje, si, y a ti muchas gracias por la ayuda.....saludos...

Etiquetas: busquedas, cadenas
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 11:55.