Foros del Web » Programando para Internet » PHP »

Utilizar Like para consulta con formulario

Estas en el tema de Utilizar Like para consulta con formulario en el foro de PHP en Foros del Web. Buenas!! Espero que puedan ayudarme con este problema relacionado con consulta SQL y PHP.... El tema es el siguiente: yo tengo un formulario en una ...
  #1 (permalink)  
Antiguo 26/09/2008, 21:51
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Utilizar Like para consulta con formulario

Buenas!! Espero que puedan ayudarme con este problema relacionado con consulta SQL y PHP....

El tema es el siguiente:

yo tengo un formulario en una web que al enviarse mediante POST, ejecuta una consulta... uno de los campos del mismo es un cuadro de texto donde se ingresa una/s palabra/s y se devuelven los resultados que coinciden en dicho campo con lo puesto en el formulario... buscador basico, no???

bueno.. la cosa es que solo funciona si ingreso la misma cantidad de palabras que contiene el campo, pero si ingreso mas, por mas que dentro de ella esten algunas que contiene el campo en la BD, no me lo muestra como un resultado de la consulta...

por ejemplo: si yo pongo "Juan Pedro" y el campo en la BD dice "Juan", no me devuelva la fila en que el campo es "Juan"... se entiende? Solo me lo devuelve si pongo Juan, o cualquier letra de la palabra que se encuentre en el campo de la BD...

es decir: no me da ningun resultado si en el formulario pongo mas palabras... pero si me devuelve si pongo menos palabras, o incluso, letras de esas palabras...

se entiende??

tendria que funcionar igual? o hay que hacer algo aparte?

un saludo!

muchas gracias!! pablo...

pd: http://www.forosdelweb.com/f18/simpl...ion-if-628588/ En el final de este post comentamos algo con David el grande, y el me comento una idea, y yo la trate de resolver, pero no pude... cualquier cosa vean el post para ver que es lo que me recomendo... decidi crear uno nuevo pues el titulo del mismo quizas alejaba a quienes puedan responderme esta pregunta en particular.... MUCHAS GRACIAS!!
  #2 (permalink)  
Antiguo 27/09/2008, 04:46
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Utilizar Like para consulta con formulario

Basicamente lo que tienes es que jugar un poquito con la consulta.

Primero separas la cadena entrada por el usuario en palabras separadas (Si quieres puedes hacer un filtro para eliminar las palabras mas comunes).
Luego dependiendo de el numero de palabras, vas creando tu consulta.
Un ejemplo con 2 palabras seria:

SELECT * FROM tabla WHERE ((campo1 LIKE %hola% OR campo2 LIKE %hola% OR campo3 LIKE %hola%) OR (campo1 LIKE %mundo% OR campo2 LIKE %mundo% OR campo3 LIKE %mundo%))

Te dejo un tutorial muy bueno:
http://www.roscripts.com/PHP_search_engine-119.html
*Esta en ingles
Sino sabes ingles trata usando el traductor de Google o pedirle a un amigo que te ayude.
  #3 (permalink)  
Antiguo 27/09/2008, 09:49
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Utilizar Like para consulta con formulario

Estimado:

Si, se ingles... Asique en ahora le voy a dar una leida para ver si puedo darme una idea...

Sin embargo el problema sigue siendo el mismo, desde mi punto de vista. Lo que logre hacer (bah, lo que hice) es con la función EXPLODE ver cuantas palabras hay en el cuadro de texto del formulario que envia el usuario, separadas por un espacio (" ") y luego lo comparo con el campo de la tabla en cuestion. Para que se entienda, aca va el codigo:

Código PHP:
$obsf explode (" "$obs);

$query= ... WHERE observaciones LIKE '%".$obsf[0]."%' OR observaciones LIKE '%".$obsf[1]."%'....
La cuestion es que yo no se cuantas palabras ingresará el usuario y, por ende, cuantos OR debo poner... se entiende mi problema??

Trate de solucionarlo con un for o un foreach, pero no logro resolverlo.....

alguna ayuda??

Desde ya, muchas gracias. Si no se entiende, tratare de explicarlo mejor.. Solo haganmelo saber!

Pablo.
  #4 (permalink)  
Antiguo 27/09/2008, 09:57
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Utilizar Like para consulta con formulario

Que tal locoxchacho, prueba utilizar MATCH AGAINST, ya que el operador LIKE es un poco limitado.




Saludos.
  #5 (permalink)  
Antiguo 27/09/2008, 10:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Utilizar Like para consulta con formulario

Cita:
La cuestion es que yo no se cuantas palabras ingresará el usuario y, por ende, cuantos OR debo poner... se entiende mi problema??
En la direccion que te di te muestran como hacerlo.

Y tambien sugieren usar MATCH AGAINST al final, pero solo si tu base de datos no es muy grande. Ya que consume mas que LIKE.
  #6 (permalink)  
Antiguo 27/09/2008, 11:32
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Utilizar Like para consulta con formulario

Bueno, muchas gracias!!! He encontrado la solucion...

He hecho una mezcla de las dos posibilidades que me han dado (ya que MATCH AGAINST no funciona bien cuando las frases son de una palabra..)

Asique he hecho lo siguiente. Pongo el codigo por si alguna vez alguien tiene mi misma duda, y asi no tiene que dar tantas vueltas como di yo! ;)

Muchas gracias a todos por la ayuda! Aca va el codigo!

Pablo

Código PHP:

$obs
$_POST['obs']; // lo que manda el formulario

$obsf explode (" "$obs); // separo los terminos de busqueda cuando haya un espacio entre ellos

if (!empty($obs)) { // si el cuadro de busqueda del formulario NO esta vacio, se ejecuta lo consulta....
   
if (empty($query)) {
        if(
count($obsf)==1){ // cuento los caracteres que ingrese con el explode.. si es igual a 1, utilizo like.. sino, utilizo el match against
        
$query="SELECT * FROM pagos01 WHERE OBSERVACIONES LIKE '%".$obs."%' ";}
        else {
        
$query="SELECT * FROM pagos01 WHERE MATCH(OBSERVACIONES) AGAINST ('%".$obs."%') ";
   }} else {
           if(
count($obsf)==1){
            
$query="SELECT * FROM pagos01 WHERE OBSERVACIONES LIKE '%".$obs."%' ";}
        else {
            
$query="SELECT * FROM pagos01 WHERE MATCH(OBSERVACIONES) AGAINST ('%".$obs."%') ";
   }
   }

Eso es todo! Espero que alguna vez le sirva a alguien como a mi me sirvio esta vez!!!

Pablo.
  #7 (permalink)  
Antiguo 06/10/2008, 13:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Utilizar Like para consulta con formulario

Hola:

Vi que tu resolviste el problema:

Yo soy nueva en esto y Estoy tratando de hacer algo similar, tome tu ejemplo pero no sale espero me puedas ayudar, este es mi código

$host="localhost";
$user="root";
$password="";
$db="copiaprueba";
$conexion=mysql_connect($host,$user,$password);
$select_db=mysql_select_db($db,$conexion);
include("conecta.php");

$autores=$_POST['autor'];


$autores= $_POST['autor']; // lo que manda el formulario

$textconsulta = explode (" ", $autores); // separo los terminos de busqueda cuando haya un espacio entre ellos

if (!empty($autores)) { // si el cuadro de busqueda del formulario NO esta vacio, se ejecuta lo consulta....
if (empty($consulta)) {
if(count($textconsulta)==1){ // cuento los caracteres que ingrese con el explode.. si es igual a 1, utilizo like.. sino, utilizo el match against
$consulta="SELECT * FROM info2000 WHERE aut LIKE '%".$autores."%' ";}
else {
$consulta="SELECT * FROM info2000 WHERE MATCH(aut) AGAINST ('%".$autores."%') ";
}} else {
if(count($textconsulta)==1){
$consulta="SELECT * FROM info2000 WHERE aut LIKE '%".$autores."%' ";}
else {
$consulta="SELECT * FROM info2000 WHERE MATCH(aut) AGAINST ('%".$autores."%') ";
}
}
}



echo("<br>".$textconsulta); //imprime consulta


$consulta=mysql_query($textconsulta,$conexion);
  #8 (permalink)  
Antiguo 10/10/2008, 22:36
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Utilizar Like para consulta con formulario

que es lo que no te sale? que error te da? o directamente no filtra la consulta?

te fijaste que todos los campos esten bien puestos? que la conexion este bien? (intenta imprir una consulta si esta filtro).

Fijate si podes ser mas especifica con el error, asi veo para donde encarar el problema, porque APARENTEMENTE, el codigo esta bien. Tratare de seguir buscando el error, pero si me das una mano.. MEJOR! ;)

Un saludo!

Pablo.
  #9 (permalink)  
Antiguo 11/10/2008, 10:01
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Utilizar Like para consulta con formulario

Que tal xoxo79, primero que todo bienvenida al foro, ahora como ya te dijeron cual es el error especifico que te dá?, aparte de esto dejame decirte que para utilizar MATCH AGAINST debes de utilizar indices FULLTEXT, estas ejecutando mal la consulta ya que le estas pasando un parametro erroneo a la función mysql_query(), debes indicarle el string que contiene la consulta en tu caso la variable $consulta.
Código PHP:
echo "<br>".$consulta//imprime consulta 
$query mysql_query($consulta,$conexion); 
.




Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #10 (permalink)  
Antiguo 11/10/2008, 10:37
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Utilizar Like para consulta con formulario

Gracias carlojas... ni me habia fijado en eso... Mire directamente el codigo de la consulta en si! ;)

Por otro parte... es cierto, fijate que tengas en el campo que buscas indices FULL TEXT. Al principio a mi me paso, pero en seguida lo modifique y la busqueda funciono perfectamente.

Este indice se puede modificar facilmente desde phpMyadmin (si trabajas con MySql..) Y no modifica en absoluto los datos que ya hayas ingresado en la tabla, es un paso facil y rapido... Cualquir consulta, no dudes en preguntar! ;)

pablo.
  #11 (permalink)  
Antiguo 20/10/2008, 16:18
 
Fecha de Ingreso: octubre-2008
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Utilizar Like para consulta con formulario

Muchas gracias por su ayuda locaxchacho y Carlojas, voy a probar con lo que me indicaron
  #12 (permalink)  
Antiguo 21/10/2008, 09:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Utilizar Like para consulta con formulario

Hola de nuevo

Realice el cambio que me indicaste pero aun así no me funciona

<?
$host="localhost";
$user="root";
$password="";
$db="copiaprueba";
$conexion=mysql_connect($host,$user,$password);
$select_db=mysql_select_db($db,$conexion);
include("conecta.php");


$autores= $_POST['autor']; // lo que manda el formulario

$textconsulta = explode (" ", $autores); // separo los terminos de busqueda cuando haya un espacio entre ellos

if (!empty($autores)) { // si el cuadro de busqueda del formulario NO esta vacio, se ejecuta lo consulta....
if (empty($consulta)) {
if(count($textconsulta)==1){ // cuento los caracteres que ingrese con el explode.. si es igual a 1, utilizo like.. sino, utilizo el match against
$consulta="SELECT * FROM info2000 WHERE aut LIKE '%".$autores."%' ";}
else {
$consulta="SELECT * FROM info2000 WHERE MATCH(aut) AGAINST ('%".$autores."%') ";
}} else {
if(count($textconsulta)==1){
$consulta="SELECT * FROM info2000 WHERE aut LIKE '%".$autores."%' ";}
else {
$consulta="SELECT * FROM info2000 WHERE MATCH(aut) AGAINST ('%".$autores."%') ";
}
}
}



echo("<br>".$consulta); //imprime consulta


$query=mysql_query($consulta,$conexion);

echo ("<h3 align=center>RESULTADO DE LA BÚSQUEDA:</h3>");
echo"<br>";
echo "<br><br>";

$numregistros=mysql_num_rows($consulta);
print ("Registros encontrados: ".""."$numregistros");

echo"<br>";
echo "<br><br>";

echo "<table align = center border=1>";

echo "<td align=center bgcolor=C1C2C6><b>","NO.","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","CÓDIGO","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","AÑO","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","MES","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","TÍTULO","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","AUTORES","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","E5 N° PAG.","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","E6 N° PAG.","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","E7 N° PAG.","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","E8 N° PAG.","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","ÁREA","</b></td>";
echo "<td align=center bgcolor=C1C2C6><b>","COLOR DEL SEMÁFORO","</b></td>";
echo "<tr>";

while($row=mysql_fetch_array($consulta)){

echo "<td align=center bgcolor=A2C3FF><b>",$row['no'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['codigo'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['aa'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['mm'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['titulo'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['aut'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['e5pag'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['e6pag'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['e7pag'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['e8pag'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['area'],"</b></td>";
echo "<td align=center bgcolor=A2C3FF><b>",$row['cs'],"</b></td>";
echo "<tr>";

}
echo "</table>";

echo "<br>";
echo "<br>";





?>
<hr size="3" color="808080" width="100%" align="left"> <!-- línea gris-->
<?
echo "<br>";
echo "<br>";


echo "<a href='info.php'>NUEVA CONSULTA</a>"

?>
</html>
  #13 (permalink)  
Antiguo 21/10/2008, 10:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Utilizar Like para consulta con formulario

estos son los errores que me arroja:


--------------------------------------------------------------------------------






Notice: Undefined index: autor in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 43

Notice: Undefined variable: consulta in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 64


Notice: Undefined variable: consulta in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 67

RESULTADO DE LA BÚSQUEDA:




Notice: Undefined variable: consulta in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 73

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 73
Registros encontrados:



Notice: Undefined variable: consulta in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 95

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\archivos de programa\easyphp1-8\www\copiaprueba\catalogo.php on line 95
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 14:27.