Foros del Web » Programando para Internet » PHP »

problema con buscador mysql con varios patrones

Estas en el tema de problema con buscador mysql con varios patrones en el foro de PHP en Foros del Web. Hola estoy intentado realizar una búsqueda por varios tipos (titulo, autor, año, etc). Además utilizo un paginador para mostrar los resultados. He probado poner una ...
  #1 (permalink)  
Antiguo 03/12/2004, 12:06
 
Fecha de Ingreso: junio-2004
Mensajes: 101
Antigüedad: 19 años, 10 meses
Puntos: 0
problema con buscador mysql con varios patrones

Hola estoy intentado realizar una búsqueda por varios tipos (titulo, autor, año, etc). Además utilizo un paginador para mostrar los resultados.
He probado poner una lista desplegable como la siguiente, y luego con un switch elegir la consulta:

<select name="by" size=1>
<option value="nada">--------------------</option>
<option value="title">Title</option>
<option value="reference">Reference</option>
<option value="author">Author</option>
<option value="year">Year</option>
<option value="month">Month</option>
<option value="web">Url</option> </select>


y el switch es el siguiente


*switch($HTTP_POST_VARS["by"])
{
case "title": $_sql="Select * From referencia where titulo like '%".$titulo."%'"; break;
case "reference": $_pagi_sql="Select * From referencia where referencia like '%".$ref."%'"; break;
case "author": $_pagi_sql="Select * From referencia where autor like '%".$author."%'"; break;
case "year": $_pagi_sql="Select * From referencia where año like '%".$year."%'"; break;
case "month": $_pagi_sql="Select * From referencia where mes like '%".$month."%'"; break;
case "web": $_pagi_sql="Select * From referencia where url like '%".$url."%'"; break;
}


El problema es que al darle a buscar, me dice que by no está definida por lo que salen errores al ejecutar la consulta.

Voy bien encaminado? o hay alguna otra manera para buscar por varios patrones, lo digo por que en el formulario tengo varios campos de texto.

Alguien puede indicarme como solucionarlo?

El metodo que utilizo en el formulario es post
Gracias
  #2 (permalink)  
Antiguo 03/12/2004, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa estructuras tipo:

Código PHP:
if (isset($_POST['by'])){

  switch(
$_POST['by']){
     
// etc ...
  
}


Es decir . antes de usar una variable "externa" como son tus $HTTP_xxx_VARS o mejor usar los arrays superglobales $_XXX (POST, GET, SESSION, etc ...) verificas con isset() si está definida ..

El resto de variables que usas en las sentencias SQL que muestars de los "case" del switch() .. si son externas al script (si vienen de tu formulario) tendrías que hacer lo mismo que con tu "by".

Por lo demás .. el "aviso" de variable no definida es para que "aprendamos" a programar "bien" .. Ese tipo de mensajes (avisos) se puede quitar usando la función:

error_reporting() o su equivalente en la configuración de PHP (php.ini) bajando el nivel de errores.

Un saludo,
  #3 (permalink)  
Antiguo 04/12/2004, 02:27
 
Fecha de Ingreso: junio-2004
Mensajes: 101
Antigüedad: 19 años, 10 meses
Puntos: 0
las variables del switch no son del formulario

Hola, gracias por responder. Al final conseguí resolver lo del by como tu dijiste, pero lo de las variables del switch que dices no entiendo lo que dices. Son variables que me he declarado en la página donde se muestran los resultados de la búsqueda. No entiendo porque me dice que $_pagi_sql no está definida.

Si algo lo del isset que dices no saldrá bien, no? xq esas variables no se definen hasta que se hace el switch.

Gracias.

Hay algun script de este tipo por la web? Gracias, hasta ahora solo he visto de búsqueda en un campo de texto, pero no en varios.
  #4 (permalink)  
Antiguo 04/12/2004, 04:00
 
Fecha de Ingreso: junio-2004
Mensajes: 101
Antigüedad: 19 años, 10 meses
Puntos: 0
he probado otro sistema, pero....

Hola, al final he decidido dejar de lado lo del switch, y probar lo siguiente. Este codigo lo he encontrado aqui en forosdelweb, pero me da error en el vector busca.

if (!empty($_POST["ref"]))
{
$referencia=$_POST["ref"];
//vector donde almaceno las querys
$busca[]=" AND referencia like '%$referencia%'";

}
if (!empty($_POST["autor"]))
{
$autor=$_POST["autor"];
//vector donde almaceno las querys
$busca[]=" AND autor like '%$autor%'";

}

if (!empty($_POST["año"]))
{
$año=$_POST["año"];
//vector donde almaceno las querys
$busca[]=" AND año like '%$año%'";

}

if (!empty($_POST["mes"]))
{
$mes=$_POST["mes"];
//vector donde almaceno las querys
$busca[]=" AND mes like '%$mes%'";

}

if (!empty($_POST["titulo"]))
{
$titulo=$_POST["titulo"];
//vector donde almaceno las querys
$busca[]=" AND titulo like '%$titulo%'";

}

if (!empty($_POST["url"]))
{
$url=$_POST["url"];
//vector donde almaceno las querys
$busca[]=" AND url like '%$url%'";

}

$query="Select * from referencia where 1 ";
$elemBusc=count($busca);
//añadimos a la query las condiciones de búsqueda
$i=0;
while($i<$elemBusc)
{
$query.=$busca[$i];
$i++;
}

$_pagi_sql=$query;

......................


Concretamente, me da el error en la linea $elemBusc=count($busca);, y me dice que $busca no esta definido. Como tendría que declarar el vector? Si no recuerdo mal, en php se podia hacer como lo estoy haciendo yo, no?


gracias
  #5 (permalink)  
Antiguo 04/12/2004, 19:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Puedes usar:

$busca=array();

Al principo de tu código para definir un array vacío al cual le vas a ir creando elementos de forma secuencial (porque usas tu [] ..).

Creo que con eso no tendrás problemas. Pero, si eso te ha sucedido es por què ninguna de tus anteriores if() se ha complido .. por eso ha llegado el código a tu count() $busca sin ser un array .. por eso serìa recomendable inciarlo vacio como te comento.

Un saludo,
  #6 (permalink)  
Antiguo 05/12/2004, 03:40
 
Fecha de Ingreso: junio-2004
Mensajes: 101
Antigüedad: 19 años, 10 meses
Puntos: 0
hola, gracias

Hola, ya no sale lo de que no esta definidio, pero he puesto un echo para ver el valor de del count del vector, y me pone que es cero. No entiendo porque, si tan sólo son instrucciones if muy simples.


Gracias
  #7 (permalink)  
Antiguo 05/12/2004, 09:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Haz un:

Código PHP:
echo "<pre>";
print_r($busca);
echo 
"</pre>"
así veras que estructura tiene tu varaible "busca" .. segùn parece no está coincidiendo ningún IF() .. por ende nunca se llega a crear ni un elemento de tu array $busca. Repasa los condicionales.

Puedes aplicar la misma estructura a tu $_POST entero y asì ver si te llegan todas las variables que esperas por su nombre y con los valores que esperas.

El "print_r()" va muyyy bien para evaluar problemas con valores o existencias de variables o de tipos de esta. Usalo.

Un saludo,
  #8 (permalink)  
Antiguo 06/12/2004, 11:26
 
Fecha de Ingreso: junio-2004
Mensajes: 101
Antigüedad: 19 años, 10 meses
Puntos: 0
gracias cluster por tu comentario

Hola, tras ver que no conseguia resolver el proble, decidi quitar el vector, e ir añadiendo a una variable, las posibles querys de cada campo del formulario. Pero no se porque no me entra en los if's.
Te pongo el código a continuación:


if ((empty($author)) && (empty($year)) && (empty($title)) && (empty($pages)) && (empty($url)))
{

echo '<table width="95%" align="center" border="0" cellpadding="3" cellspacing="1" >';
echo '<tr>';
echo '<td>';
echo '<font class="text">';
echo "You must especify some data<br><br>";
echo "<a href='search_1024.php'>Go back</a>";
echo "<br><br><br><br><br><br><br><br><br><br><br><br>< br><br><br><br><br><br><br><br><br>";
}

else
{

conectar();

$_pagi_sql="Select * From reference where 1 ";

if (!empty($_POST["author"]))
{
$_pagi_sql.= "AND Author like '%$author%'";

}

if (!empty($_POST["title"]))
{
$_pagi_sql.= "AND Title like '%$title%'";

}

...............


AQUI VA EL RESTO DE CODIGO QUE ME MUESTRA LOS RESULTADOS


}
He hecho pruebas, y no entra a ningún if, debe ser que no hago bien lo del else desues del primer if, pero no entiendo porque

También he probao a poner if(isset(..)), pero ocurre exactamente lo mismo

Alguién me podría indicar como hacerlo funcionar....

Gracias
  #9 (permalink)  
Antiguo 06/12/2004, 12:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. de tu formulario .. que método usas ? .. GET/POST (method= ...). Te lo comento por qué por un lado estás tomando tus variables de forma "global":

if ((empty($author)) && (empty($year)) && (empty($title)) && (empty($pages)) && (empty($url)))

Si usas "register_globals" a ON .. eso te funcionará tanto si tus variables llegan por POST o GET . .(lo cual no es Seguro!!!!!). Pero luego ... más adelante en tu código "discriminas" y sólo aceptas lo que llega por $_POST en tus if() (condicionales) .. A todo esto .. para usar esos arrays $_POST, $_GET .. etc .. debes usar PHP versión 4.1.0 en adelante .. revisa todo esto.

Un saludo,
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 10:03.