Foros del Web » Programando para Internet » PHP »

creando un buscador ¡LOGRADO! pero...

Estas en el tema de creando un buscador ¡LOGRADO! pero... en el foro de PHP en Foros del Web. Hola a todos, he conseguido crear un buscador para recuperar datos de una base de datos que tengo en mysql. Es una base de datos ...
  #1 (permalink)  
Antiguo 29/11/2005, 05:39
Avatar de refineriaweb  
Fecha de Ingreso: junio-2004
Ubicación: Palma de Mallorca
Mensajes: 196
Antigüedad: 13 años, 6 meses
Puntos: 1
creando un buscador ¡LOGRADO! pero...

Hola a todos,

he conseguido crear un buscador para recuperar datos de una base de datos que tengo en mysql.

Es una base de datos de incidencias (tickets). De momento me busca el termino en la base de datos.

Me gustaría poder buscar entre una fecha determinada y otra.
El campo de mi base de datos es 'fecha' el tipo es datetime y me la crea en este formato: 2005-11-25 11:04:21

El codigo que consegui hacer funcionar para la busqueda del termino es:

if ($db->db_connected)
{
if (isset($_GET['search_in_tickets']))
{
// mostrar resultados
$tickets_output = join ('', file (SCRIPT_PATH.'/search/templates/functions/search_results_tickets.tpl'));
$this->query_result = $db->db_query('SELECT id,subject,content FROM tickets WHERE (subject LIKE "%'.$_GET['search'].'%") OR (content LIKE "%'.$_GET['search'].'%")');
$numrows = $db->db_num_rows($this->query_result);
$i = 0;
while ($row = $db->db_fetch_array($this->query_result))
{
$row['subject'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['subject']);
$row['content'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['content']);

$tickets_results[$i] = $tickets_output;
$tickets_results[$i] = str_replace('{SUBJECT}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='. $row['id'].'">'.$row['subject'].'</a>',$tickets_results[$i]);
$tickets_results[$i] = str_replace('{CONTENT}',$row['content'],$tickets_results[$i]);
$i++;
}
if ($numrows == 0)
{
$tickets_results = array();
}
$output = str_replace('{RESULTS_TICKETS}',$numrows.' {LANG_SEARCH_TICKETS_RESULTS}<br>'.implode('',$tic kets_results),$output);
}

El select a la base de datos es: ('SELECT id,subject,content FROM tickets WHERE (subject LIKE "%'.$_GET['search'].'%") OR (content LIKE "%'.$_GET['search'].'%")');

pero para la fecha no consigo...

Seria algo asi: ('SELECT id,fecha FROM tickets WHERE ... algo, pero no me sale.

Alguien ha hecho algo igual?

Muchas gracias!
  #2 (permalink)  
Antiguo 29/11/2005, 05:55
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
¿Cómo pensas pasa los datos de las fechas? Te pongo un ejemplo de como hacerlo


SELECT id,subject,content FROM tickets WHERE ((subject LIKE "%'.$_GET['search'].'%") OR (content LIKE "%'.$_GET['search'].'%")) AND (fecha >= '".$_GET['fechadesde']."' AND fecha <= '".$_GET['fechahasta']."');

por supuesto tienes q pasar las variables fechadesde y fechahasta con formato Y-m-d. También deberías chequear que se pasen con formato válido.

Código PHP:
$check1 explode("-",$_GET['fechadesde']);
$check2 explode("-",$_GET['fechahasta']);
if (!
checkdate($check1[1],$check1[2],$check1[0]) OR !checkdate($check2[1],$check2[2],$check2[0])) {
  echo 
"Error en formato de las fechas";

  #3 (permalink)  
Antiguo 30/11/2005, 03:58
Avatar de refineriaweb  
Fecha de Ingreso: junio-2004
Ubicación: Palma de Mallorca
Mensajes: 196
Antigüedad: 13 años, 6 meses
Puntos: 1
conseguido a medias... :D

Conseguido con:
Código PHP:
('SELECT id,user,category,subject,sentdate FROM tickets WHERE (sentdate >= "%'.$_GET['search'].'%") OR (sentdate <= "%'.$_GET['search'].'%")'); 
Luego en el form de busqueda tengo:
Código PHP:
<input type="checkbox" class="checkbox" name="search_in_sentdate" value="yes" {SEARCH_IN_SENTDATE}> 
Ahí marco la pestañita y luego en el input type text del submit escribo la fecha en formato ingles 2005-11-30.

Esto me consigue buscar las incidencias. Lo hace bien a medias. Lo que hace es me las lista todas como resultado, pero las que concuerda con el $_GET['search'] en este caso (2005-11-30) me las marca en rojo. Y las que no concuerdan las lista pero sin estar en rojo.

La verdad es que no soy ningun experto en php y solo hago mis experimentos modificando codigo y ultimamente estoy aprendiendo sobre recuperar datos de la DB. No he entendido el codigo:
Código PHP:
$check1 explode("-",$_GET['fechadesde']);
$check2 explode("-",$_GET['fechahasta']);
if (!
checkdate($check1[1],$check1[2],$check1[0]) OR !checkdate($check2[1],$check2[2],$check2[0])) {
  echo 
"Error en formato de las fechas";

Supongo que es la creación de las variables: $_GET['fechadesde'] y $_GET['fechahasta']

pero tampoco se donde colocarlo. Que deberia colocarlo justo antes del codigo que describo a continuación ??

Es que lo he intentado muchas veces, pero con la unica que me funciona es con la GET[search]. Y eso lo entiendo pq se que la variable search es lo que busca. De ahí que modificara ligeramente tu codigo Seppo.

El codigo total es:

Código PHP:
if (isset($_GET['search_in_sentdate']))
            {
                
// show user results
                
$sentdate_output join (''file (SCRIPT_PATH.'modules/admin/search/templates/functions/search_results_sentdate.tpl'));
                
$this->query_result $db->db_query('SELECT id,user,category,subject,sentdate FROM tickets WHERE (sentdate >= "%'.$_GET['search'].'%") OR (sentdate <= "%'.$_GET['search'].'%")');
                
$numrows $db->db_num_rows($this->query_result);
                
$i 0;
                while (
$row $db->db_fetch_array($this->query_result))
                {
                    
$row['user'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['user']);
                    
$row['subject'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['subject']);
                    
$row['sentdate'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['sentdate']);
                    
$row['category'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['category']);
                    
                    
                    
$sentdate_results[$i] = $sentdate_output;
                    
$sentdate_results[$i] = str_replace('{ID}',$row['id'],$sentdate_results[$i]);
                    
$sentdate_results[$i] = str_replace('{USER}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['user'].'</a>',$sentdate_results[$i]);
                    
$sentdate_results[$i] = str_replace('{SUBJECT}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['subject'].'</a>',$sentdate_results[$i]);
                    
$sentdate_results[$i] = str_replace('{CATEGORY}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['category'].'</a>',$sentdate_results[$i]);
                    
$sentdate_results[$i] = str_replace('{SENTDATE}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['sentdate'].'</a>',$sentdate_results[$i]);
                    
$i++;
                }
                if (
$numrows == 0)
                {
                    
$sentdate_results = array();
                }
                
$output str_replace('{RESULTS_SENTDATE}',$numrows.' {LANG_SEARCH_SENTDATE_RESULTS}<br>'.implode('',$sentdate_results),$output); 
}

Muchas gracias a todos y en especial a Seppo que gracias a el consegui la mitad de mi reto :D

Un saludo!!

Última edición por Cluster; 30/11/2005 a las 05:52
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 23:11.