Foros del Web » Programando para Internet » PHP »

Incovenientes

Estas en el tema de Incovenientes en el foro de PHP en Foros del Web. Amigazos: Estoy desarrollando un buscador de palabras con sugerencias (Tipo mercado libre), en la cual se conecta a la base de datos mysql. Tengo unos ...
  #1 (permalink)  
Antiguo 18/11/2011, 21:48
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Incovenientes

Amigazos:
Estoy desarrollando un buscador de palabras con sugerencias (Tipo mercado libre), en la cual se conecta a la base de datos mysql. Tengo unos pequeños conflictos erroneos que me sale al ejecutar, soy nuevo en esto y me gustaria que me lo resuelvan explicandome que hice mal, o bien diganme que tengo que hacer para asi puedo aprender junto a ustedes:

El codigo de la funcion es:

<td width="612" height="28" align="right"><form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
&iquest;Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
</form>
<?php
//cadena de conexion
mysql_connect("localhost","root","lipo");
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
} elseif ($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacion", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";
}
}
?>

El error que me sale esta en:
if ($busqueda<>''){

Gracias.
  #2 (permalink)  
Antiguo 19/11/2011, 01:55
 
Fecha de Ingreso: noviembre-2011
Ubicación: Morelia, Mich, México
Mensajes: 95
Antigüedad: 12 años, 5 meses
Puntos: 18
Respuesta: Incovenientes

hola! .. El 'diferente de' en php es con != no con <>, saludos

Última edición por quedecosas; 19/11/2011 a las 02:05
  #3 (permalink)  
Antiguo 19/11/2011, 18:33
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Igualmente en el editor me sale el codigo en negro (En el cual significa que algo esta mal)

php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
</body>
<td width="612" height="28" align="right"><form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
&iquest;Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
</form>
<?php
//cadena de conexion
mysql_connect("localhost","root","lipo");
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda != ''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
} elseif ($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacion", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";
}
)
?>
</html>

Soy nuevo en esto por eso tantas preguntas
  #4 (permalink)  
Antiguo 19/11/2011, 18:49
Avatar de Antonio_España  
Fecha de Ingreso: mayo-2007
Mensajes: 58
Antigüedad: 16 años, 10 meses
Puntos: 4
Respuesta: Incovenientes

Bueno, mi editor tambien colorea lo que quiere cuando mezclo, y el codigo funciona bien, la clave que te da la solucion es, reportar el mensaje de error que te da la ejecucion del codigo.

Siempre, siempre, siempre, observa el mensaje de error que lanza, porque ahi esta la solucion ^^
__________________
Aprendiz autodidacta
  #5 (permalink)  
Antiguo 19/11/2011, 19:12
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por Antonio_España Ver Mensaje
Bueno, mi editor tambien colorea lo que quiere cuando mezclo, y el codigo funciona bien, la clave que te da la solucion es, reportar el mensaje de error que te da la ejecucion del codigo.

Siempre, siempre, siempre, observa el mensaje de error que lanza, porque ahi esta la solucion ^^
Amigo cuando lo ejecuto me sale el buscador y abajo esto:
1) { //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST //BUSQUEDA DE FRASES CON MAS DE UNA PALABRA Y UN ALGORITMO ESPECIALIZADO $cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50"; } $result=mysql("teleformacion", $cadbusca); While($row=mysql_fetch_object($result)) { //MOSTRAMOS LOS TITULOS DE LOS ARTICULOS O LO QUE DESEEMOS $referencia=$row->REFERENCIA; $titulo=$row->TITULO; echo $referencia." - ".$titulo."
"; } ) ?>
pero no funciona las sugerencias, estoy con bd todo pero nada. Te agradecia si me podes dar una maño ya que soy nuevo en esto
  #6 (permalink)  
Antiguo 19/11/2011, 19:18
Avatar de Antonio_España  
Fecha de Ingreso: mayo-2007
Mensajes: 58
Antigüedad: 16 años, 10 meses
Puntos: 4
Respuesta: Incovenientes

Cuando la pagina te imprime codigo php, es que no se ha "traducido" a php el codigo, sino que ha sido considerado como html.

Me explico, si tu codigo es
Código:
<? echo "hola"; ?>
y en lugar de hola, ves el codigo, es que no ha sido tratado como php.

Bueno, me he tomado la libertad de probar tu codigo para dar una respuesta mas concreta.
He visto un ) en lugar de } ordenando el codigo (dichosa mi mania de ordenar las cosas ^^) y ahora no me da error (el error que me mostraba era, inesperado fin en linea 43):
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  <html xmlns="http://www.w3.org/1999/xhtml">
  3.  <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5.  <title>Untitled Document</title>
  6.  </head>
  7.  
  8.  <body>
  9.  
  10.  <td width="612" height="28" align="right"><form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
  11.  &iquest;Que estas buscando?
  12.  <input type="text" name="busqueda" size="50" />
  13.  <input name="Submit2" type="submit" class="botones1" value="Buscar" />
  14.  </form>
  15.  <?php
  16.     //cadena de conexion
  17.     mysql_connect("localhost","root","");
  18.     // DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
  19.     if ($busqueda != ''){
  20.         //CUENTA EL NUMERO DE PALABRAS
  21.         $trozos=explode(" ",$busqueda);
  22.         $numero=count($trozos);
  23.             if ($numero==1) {
  24.                 //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
  25.                 $cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
  26.                     AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
  27.             } elseif ($numero>1) {
  28.                 //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
  29.                 //busqueda de frases con mas de una palabra y un algoritmo especializado
  30.                 $cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
  31.                     AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
  32.                     MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
  33.             }
  34.         $result=mysql("teleformacion", $cadbusca);
  35.         While($row=mysql_fetch_object($result))
  36.         {
  37.             //Mostramos los titulos de los articulos o lo que deseemos...
  38.             $referencia=$row->REFERENCIA;
  39.             $titulo=$row->TITULO;
  40.             echo $referencia." - ".$titulo."<br>";
  41.         }
  42.     }
  43.  // 1.- este simbolo, parece que sobra: ")"
  44.  ?>
  45.  </body> <!-- 2.- me traigo el body a su sitio -->
  46.  </html>
__________________
Aprendiz autodidacta

Última edición por Antonio_España; 19/11/2011 a las 19:30 Razón: Probando tu codigo
  #7 (permalink)  
Antiguo 19/11/2011, 19:34
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por Antonio_España Ver Mensaje
Cuando la pagina te imprime codigo php, es que no se ha "traducido" a php el codigo, sino que ha sido considerado como html.

Me explico, si tu codigo es
Código:
<? echo "hola"; ?>
y en lugar de hola, ves el codigo, es que no ha sido tratado como php.

Bueno, me he tomado la libertad de probar tu codigo para dar una respuesta mas concreta.
He visto un ) en lugar de } ordenando el codigo (dichosa mi mania de ordenar las cosas ^^) y ahora no me da error (el error que me mostraba era, inesperado fin en linea 43):
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  <html xmlns="http://www.w3.org/1999/xhtml">
  3.  <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5.  <title>Untitled Document</title>
  6.  </head>
  7.  
  8.  <body>
  9.  
  10.  <td width="612" height="28" align="right"><form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
  11.  &iquest;Que estas buscando?
  12.  <input type="text" name="busqueda" size="50" />
  13.  <input name="Submit2" type="submit" class="botones1" value="Buscar" />
  14.  </form>
  15.  <?php
  16.     //cadena de conexion
  17.     mysql_connect("localhost","root","");
  18.     // DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
  19.     if ($busqueda != ''){
  20.         //CUENTA EL NUMERO DE PALABRAS
  21.         $trozos=explode(" ",$busqueda);
  22.         $numero=count($trozos);
  23.             if ($numero==1) {
  24.                 //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
  25.                 $cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
  26.                     AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
  27.             } elseif ($numero>1) {
  28.                 //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
  29.                 //busqueda de frases con mas de una palabra y un algoritmo especializado
  30.                 $cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
  31.                     AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
  32.                     MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
  33.             }
  34.         $result=mysql("teleformacion", $cadbusca);
  35.         While($row=mysql_fetch_object($result))
  36.         {
  37.             //Mostramos los titulos de los articulos o lo que deseemos...
  38.             $referencia=$row->REFERENCIA;
  39.             $titulo=$row->TITULO;
  40.             echo $referencia." - ".$titulo."<br>";
  41.         }
  42.     }
  43.  // 1.- este simbolo, parece que sobra: ")"
  44.  ?>
  45.  </body> <!-- 2.- me traigo el body a su sitio -->
  46.  </html>
Amigazo ahora que mas prolijo y me colorea, es decir que esta bien. El tema es que me sale error linea 50 que es la ultima, borro para ver que pasa y me sale la 49, despues 48 y asi

El codigo quedo asi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Cabecera</title>
</head>
<body>
<td width="612" height="28" align="right">
<form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
<form id="form3" name="form3" method="post" align="center" action="busquedaavanzada.php">
<div align="center">¿Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
<input name="Submit3" type="submit" class="botones1" value="Busqueda avanzada" />
</div>
</form>
<?php
//CADENA DE CONEXION
mysql_connect("localhost","root","lipo");

//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR (SI LA CADENA EXISTE)
if ($busqueda != ''){

//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {

//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
} elseif ($numero>1) {

//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//BUSQUEDA DE FRASES CON MAS DE UNA PALABRA Y UN ALGORITMO ESPECIALIZADO
$cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacion", $cadbusca);
While($row=mysql_fetch_object($result))
{
//MOSTRAMOS LOS TITULOS DE LOS ARTICULOS O LO QUE DESEEMOS
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";
}
?>
</body>
</html>
Talves es una llave, algun cierre mal y no me doy cuenta
  #8 (permalink)  
Antiguo 19/11/2011, 20:58
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por Antonio_España Ver Mensaje
Cuando la pagina te imprime codigo php, es que no se ha "traducido" a php el codigo, sino que ha sido considerado como html.

Me explico, si tu codigo es
Código:
<? echo "hola"; ?>
y en lugar de hola, ves el codigo, es que no ha sido tratado como php.

Bueno, me he tomado la libertad de probar tu codigo para dar una respuesta mas concreta.
He visto un ) en lugar de } ordenando el codigo (dichosa mi mania de ordenar las cosas ^^) y ahora no me da error (el error que me mostraba era, inesperado fin en linea 43):
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  <html xmlns="http://www.w3.org/1999/xhtml">
  3.  <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5.  <title>Untitled Document</title>
  6.  </head>
  7.  
  8.  <body>
  9.  
  10.  <td width="612" height="28" align="right"><form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
  11.  &iquest;Que estas buscando?
  12.  <input type="text" name="busqueda" size="50" />
  13.  <input name="Submit2" type="submit" class="botones1" value="Buscar" />
  14.  </form>
  15.  <?php
  16.     //cadena de conexion
  17.     mysql_connect("localhost","root","");
  18.     // DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
  19.     if ($busqueda != ''){
  20.         //CUENTA EL NUMERO DE PALABRAS
  21.         $trozos=explode(" ",$busqueda);
  22.         $numero=count($trozos);
  23.             if ($numero==1) {
  24.                 //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
  25.                 $cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
  26.                     AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
  27.             } elseif ($numero>1) {
  28.                 //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
  29.                 //busqueda de frases con mas de una palabra y un algoritmo especializado
  30.                 $cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
  31.                     AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
  32.                     MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
  33.             }
  34.         $result=mysql("teleformacion", $cadbusca);
  35.         While($row=mysql_fetch_object($result))
  36.         {
  37.             //Mostramos los titulos de los articulos o lo que deseemos...
  38.             $referencia=$row->REFERENCIA;
  39.             $titulo=$row->TITULO;
  40.             echo $referencia." - ".$titulo."<br>";
  41.         }
  42.     }
  43.  // 1.- este simbolo, parece que sobra: ")"
  44.  ?>
  45.  </body> <!-- 2.- me traigo el body a su sitio -->
  46.  </html>
AHORA NINGUN TIPO DE ERROR PERO TAMPOCO ME APARECE LA SUGERENCIAS CUANDO EMPIEZO A TRIPEAR, ES DECIR QUE EL BUSCADOR ESTA FUNCIONANDO COMO ANTES SIN SUGERENCIAS.

NECESITO QUE VEA UNA TABLA.

POR EJEMPLO YO TENGO EN MI BD MYSQL (TABLA ARTICULOS, SUBRUBROS, MARCAS)

EN LA BASE DE DATOS LA TENGO ASI:
TITULO VARCHAR (45)
DESARROLLO TEXT

EN LA EDICION DE LA TABLA:
TITULO
NOTEBOOK
IMPRESORA
TELEVISOR

DESARROLLO
IBM
HP
LENOVO
PHILIPS

CONEXION DESDE PHP A LA BD
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'lipo';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error de conexion con la base de datos, a la brevedad sera solucionado');

$dbname = 'openlatino';
mysql_select_db($dbname);

COMO LO PUEDO HACER?

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Cabecera</title>
</head>
<body>
<td width="612" height="28" align="right">
<form id="busqueda" name="busqueda" method="post" align="center" action="publicaciones.php">
<form id="form3" name="form3" method="post" align="center" action="busquedaavanzada.php">
<div align="center">¿Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
<input name="Submit3" type="submit" class="botones1" value="Busqueda avanzada" />
</div>
</form>
<div align="center">
<?php
//cadena de conexion
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'lipo';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error de conexion con la base de datos, a la brevedad sera solucionado');

$dbname = 'openlatino';
mysql_select_db($dbname);
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda != ''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT DESARROLLO, TITULO FROM ARTICULOS WHERE VISIBLE =1
AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
} elseif ($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("openlatino", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$desarrollo=$row->DESARROLLO;
$titulo=$row->TITULO;
echo $desarrollo." - ".$titulo."<br>";
}
}
//)
?>
</div>
</body> <!-- 2.- el body al sitio -->
</html>

Última edición por lokoguille2005; 19/11/2011 a las 22:23 Razón: Agregado
  #9 (permalink)  
Antiguo 19/11/2011, 23:06
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Alguien que me ayuden porfavor
  #10 (permalink)  
Antiguo 20/11/2011, 00:13
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Incovenientes

Cita:
Iniciado por lokoguille2005 Ver Mensaje
Alguien que me ayuden porfavor
Hola amigo. No se si sea este el problema, pero de hecho hay un problema. Mira:

En esta SQL:

"SELECT DESARROLLO, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50"

Me parece que debería ser así:

"SELECT DESARROLLO, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND (DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%') LIMIT 50"

Ves? Los operandos del OR entre paréntesis, para que haga la operación OR primero y el resultado de la misma lo lo compare mediante AND con VISIBLE.

Pienso que es así, porque si no, te haría:

VISIBLE AND DESARROLLO OR TITULO

Y debe ser:

VISIBLE AND ( DESARROLLO OR TITULO )

A ver si esto te ayuda. Saludos.
  #11 (permalink)  
Antiguo 20/11/2011, 00:38
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por jorgelpadronb Ver Mensaje
Hola amigo. No se si sea este el problema, pero de hecho hay un problema. Mira:

En esta SQL:

"SELECT DESARROLLO, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50"

Me parece que debería ser así:

"SELECT DESARROLLO, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND (DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%') LIMIT 50"

Ves? Los operandos del OR entre paréntesis, para que haga la operación OR primero y el resultado de la misma lo lo compare mediante AND con VISIBLE.

Pienso que es así, porque si no, te haría:

VISIBLE AND DESARROLLO OR TITULO

Y debe ser:

VISIBLE AND ( DESARROLLO OR TITULO )

A ver si esto te ayuda. Saludos.

Amigo como me dijiste me sale un error en la linea 36

la linea 36 es:
} elseif ($numero>1) {

me dice que hay un error de sintaxis ) pero no se que hice mal

Gracias por ayudame

Última edición por lokoguille2005; 20/11/2011 a las 00:56 Razón: Aclaro
  #12 (permalink)  
Antiguo 20/11/2011, 16:48
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Amigos me sigue sin funcionar ¿Que hago?, necesito que al escribir lo que estoy buscando me salga sugerencia abajo (Igual a mercado libre), para eso necesito que me lea la tabla (Articulos) de mi base de datos mysql (openlatino)

Aca les dejo el php entero:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Cabecera</title>
</head>
<body>
<td width="612" height="28" align="right">
<form id="busqueda" name="busqueda" method="post" align="center" action="publicaciones.php">
<form id="form3" name="form3" method="post" align="center" action="busquedaavanzada.php">
<div align="center">¿Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
<input name="Submit3" type="submit" class="botones1" value="Busqueda avanzada" />
</div>
</form>
<div align="center">
<?php
//CADENA DE CONEXION
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'lipo';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error de conexion con la base de datos, a la brevedad sera solucionado');

$dbname = 'openlatino';
mysql_select_db($dbname);

//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR (SI EXISTE LA CADENA)
if ($busqueda != ''){

//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {

//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCCION CON LIKE
$cadbusca="SELECT TITULO FROM ARTICULOS WHERE VISIBLE =1
AND (TITULO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%') LIMIT 50";
} elseif ($numero>1) {

//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//BUSQUEDA DE FRASES CON MAS DE UNA PALABRA Y UN ALGORITMO ESPECIALIZADO
$cadbusca="SELECT TITULO, MATCH ( TITULO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("openlatino", $cadbusca);
While($row=mysql_fetch_object($result))
{

//MOSTRAMOS LOS TITULOS DE LOS ARTICULOS O LO QUE DESEEMOS
$titulo=$row->TITULO;
$titulo=$row->TITULO;
echo $titulo." - ".$titulo."<br>";
}
}
?>
</div>
</body> <!-- 2.- el body al sitio -->
</html>

Última edición por lokoguille2005; 20/11/2011 a las 16:55 Razón: Extra
  #13 (permalink)  
Antiguo 20/11/2011, 18:09
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Incovenientes

Si lo que te falla es la consulta FULLTEXT, quizas esto te pueda ayudar
Generador de Consulta MySQL FullText para un buscador

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #14 (permalink)  
Antiguo 20/11/2011, 18:36
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por portalmana Ver Mensaje
Si lo que te falla es la consulta FULLTEXT, quizas esto te pueda ayudar
[URL="http://objetivophp.com/?p=104"]Generador de Consulta MySQL FullText para un buscador[/URL]

Saludos
Ahora me conecta a la base pero sigue sin mandar las sugerencia, para mi el poblema esta aqui:

Centro del conflicto:
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCCION CON LIKE
$cadbusca="SELECT TITULO FROM ARTICULOS WHERE VISIBLE =1
AND (TITULO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%') LIMIT 50";
} elseif ($numero>1) {

//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//BUSQUEDA DE FRASES CON MAS DE UNA PALABRA Y UN ALGORITMO ESPECIALIZADO
$cadbusca="SELECT TITULO, MATCH ( TITULO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("openlatino", $cadbusca);
While($row=mysql_fetch_object($result))
{

//MOSTRAMOS LOS TITULOS DE LOS ARTICULOS O LO QUE DESEEMOS
$titulo=$row->TITULO;
$titulo=$row->TITULO;
echo $titulo." - ".$titulo."<br>";
}
}
Si bien se me conecta, no puede ver la tabla ARTICULOS o bien no encuentra donde imprimilos ¿Que me decis?
  #15 (permalink)  
Antiguo 20/11/2011, 18:47
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Incovenientes

Cita:
Iniciado por lokoguille2005 Ver Mensaje
Amigo como me dijiste me sale un error en la linea 36

la linea 36 es:
} elseif ($numero>1) {

me dice que hay un error de sintaxis ) pero no se que hice mal

Gracias por ayudame
Hola. Puedes publicar el texto del error que te da en la linea 36?
  #16 (permalink)  
Antiguo 20/11/2011, 19:16
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

Cita:
Iniciado por jorgelpadronb Ver Mensaje
Hola. Puedes publicar el texto del error que te da en la linea 36?
me daba un error de sintaxis pero ya lo resolvi, el tema es que sigue sin dar las sugerencias cuando voy escribiendo en el buscador
  #17 (permalink)  
Antiguo 20/11/2011, 22:51
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Mensajes: 133
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Incovenientes

AMIGOS ESTOY LOCO CON ESTO, NOSE LO QUE PASA, NO ME SALE NINGUN ERROR PERO NO FUNCIONA LAS SUGERENCIAS, ES DECIR AL TRIPEAR NO SALE NADA POR ABAJO (POR EJEMPLO ESCRIBO NOT Y ME TIENE QUE SALIR NOTEBOOK O MAS OPCIONES SEGUN LO QUE ESTOY BUSCANDO, EN SINTESIS EL FUNCIONAMIENTO SERIA IGUAL COMO EL QUE TIENE MERCADO LIBRE). AQUI LE DEJO DETALLADO DE COMO HICE LAS COSAS:

BASE DE DATOS MYSQL (LINUX):
NOMBRE DE LA TABLA: ARTICULOS
COLUM NAME DATA TYPE NOT NULL AUTO IMC FLAGS DEFAULT VALUE
REFERENCIA INTREGER SI SI UNSIGNED ZEROFILL NULL
TITULO VARCHAR (100) SI BINARY NULL
DESARROLLO TEXT SI NULL
AUTOR VARCHAR (50) SI BINARY NULL

Y EL FORMULARIO PHP QUEDO ASI:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Cabecera</title>
</head>
<body>
<td width="612" height="28" align="right">
<form id="form2" name="form2" method="post" align="center" action="publicaciones.php">
<form id="form3" name="form3" method="post" align="center" action="busquedaavanzada.php">
<div align="center">¿Que estas buscando?
<input type="text" name="busqueda" size="50" />
<input name="Submit2" type="submit" class="botones1" value="Buscar" />
<input name="Submit3" type="submit" class="botones1" value="Busqueda avanzada" />
</div>
<div align="center">
<?php
//CADENA DE CONEXION
mysql_connect("localhost","root","lipo");

//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR (SI LA CADENA EXISTE)
if ($busqueda != ''){

//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {

//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCCION CON LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1
AND (DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%') LIMIT 50";
} elseif ($numero>1) {

//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//BUSQUEDA DE FRASES CON MAS DE UNA PALABRA Y UN ALGORITMO ESPECIALIZADO
$cadbusca="SELECT REFERENCIA, TITULO, MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE
MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("openlatino", $cadbusca);
While($row=mysql_fetch_object($result))
{

//MOSTRAMOS LOS TITULOS DE LOS ARTICULOS O LO QUE DESEEMOS
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";
}
}
// 1.- este simbolo, parece que sobra: ")"
?>
</div>
</body> <!-- 2.- me traigo el body a su sitio -->
</html>

AUN NO FUNCIONA ¿QUE PUEDE SER?
  #18 (permalink)  
Antiguo 20/11/2011, 23:33
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Incovenientes

Cita:
Iniciado por lokoguille2005 Ver Mensaje
me daba un error de sintaxis pero ya lo resolvi, el tema es que sigue sin dar las sugerencias cuando voy escribiendo en el buscador
AYYYY ESPERATE UN MOMENTO. Ahora vengo a entender lo que te pasa.

O sea lo que tu quieres es que vayan saliendo sugerencias mientras escribes? Y con PHP? No hermano, eso no se puede.

Creo que te van a salir raices esperando que funcione hermano. PHP es un lenguaje de servidor, no de cliente. O sea desde PHP no puedes controlar eventos de usuario como: click, mouseover o "mientras escribes".

Te explico:

El script PHP se ejecuta en el servidor. Cuando el código PHP se ejecuta genera un resultado en HTML, que es el que llega al navegador del usuario. Quiere decir que tus sentencias PHP se ejecutan secuencialmente una vez, y generan HTML. Para que el script PHP se ejecute de nuevo tienes que recargar la página.

De esta forma es imposible controlar eventos del lado del cliente con PHP, como "hacer algo mientras escribes"

PHP funciona así:

1) Se ejecuta el código PHP en el servidor.
2) Se genera el resultado HTML y se envia al navegador del cliente.
3) Una vez que el HTML está cargado en el navegador del cliente es que comienzan a funcionar los eventos (click, mouseover, keypress, etc).

Para hacer algo mientras escribes tienes que usar un lenguaje de cliente como JavaScript por ejemplo, que corre en el navegador del cliente, mientras este interactúa con el HTML que ya generó PHP. No se exactamente como está hecho en Mercadolibre, pero te aseguro que con PHP solamente no es. tiene que haber algo más en el asunto.

No te rompas más la cabeza y busca otras alternativas. Algo que puedas combinar con tu PHP para que puedas detectar cuando el usuario va escribiendo.

Lo más extraño de todo es que nadie de los que te hemos respondido nos hayamos dado cuenta antes de algo tan evidente.

Saludos.

Etiquetas: mysql
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 15:10.