Foros del Web » Programando para Internet » PHP »

Script da error

Estas en el tema de Script da error en el foro de PHP en Foros del Web. Bueno como ya habrán notado php y mysql me está matando de pero igual seguiré hasta lograrlo y si funciona prometo darselos a todos para ...
  #1 (permalink)  
Antiguo 28/07/2005, 19:11
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Script da error, pero empieza a funcionar

Bueno como ya habrán notado php y mysql me está matando de pero igual seguiré hasta lograrlo y si funciona prometo darselos a todos para que lo usen.Espero su ayuda como siempre, y gracias.

me da este error:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/polocba/domains/polopositivocba.com.ar/public_html/buscar.php on line 22

Código PHP:
<?php
//cadena de conexion
mysql_connect("localhost","usuario","pass");
// 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  marcas, productos FROM contenido WHERE VISIBLE =1
      AND marcas LIKE  '%$busqueda%' OR productos 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  marcas, productos, MATCH ( marcas, productos )
      AGAINST (  '$busqueda' ) AS Score FROM contenido WHERE
      MATCH ( marcas, productos ) 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->marcas;
    
$titulo=$row->productos;
    echo 
$referencia." - ".$titulo."<br>";
  }
}
?>
el formulario es:

[code+<FORM METHOD=POST ACTION="buscar.php">
Buscar: <INPUT TYPE="text" NAME="busqueda">
<input type="submit" name="Submit" value="Buscar">
</FORM>[/code]

la BD tiene 2 campos, marcas y productos, y escribí esta sentencia en phpmyadmin:
Código:
ALTER TABLE ARTICULOS ADD FULLTEXT(TITULO, DESARROLLO);

Código PHP:
 $result=mysql("teleformacion"$cadbusca); 
es así? que es teleformación?


esta línea es la del error:

Código PHP:
While($row=mysql_fetch_object($result)) 

Última edición por mvlsistemas; 31/07/2005 a las 16:00
  #2 (permalink)  
Antiguo 28/07/2005, 19:50
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
yo pienso que va asi..

Código PHP:
$result mysql_query($cadbusca
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #3 (permalink)  
Antiguo 28/07/2005, 20:17
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Prueba esto:

<?php
//cadena de conexion
$link=mysql_connect("localhost","usuario","pass");
mysql_select_db("teleinformacion");
// 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 marcas, productos FROM contenido WHERE VISIBLE =1
AND marcas LIKE '%$busqueda%' OR productos 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 marcas, productos, MATCH ( marcas, productos )
AGAINST ( '$busqueda' ) AS Score FROM contenido WHERE
MATCH ( marcas, productos ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql_query($cadbusca,$link);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->marcas;
$titulo=$row->productos;
echo $referencia." - ".$titulo."<br>";
}
}
?>
  #4 (permalink)  
Antiguo 28/07/2005, 20:39
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
bueno 1º gracias por responderme tan pronto.

claudio puse tu archivo pero igual me da error acá:

Código PHP:
While($row=mysql_fetch_object($result)) 
otra cosa este código lo subo sólo
Código:
<?php
//cadena de conexion
mysql_connect("localhost","usuario","pass");
// 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.....
o entre <html></html>
  #5 (permalink)  
Antiguo 28/07/2005, 20:46
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
por lo que dices abajo no copiaste el codigo igual.
si lo copiaste igual a como te indiqué entonces puede haber un error en tu consulta sql.
  #6 (permalink)  
Antiguo 28/07/2005, 20:58
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
El error te dice que no le fué asignado un argumento MySQL a la variable que le asignaste el resultado de una consulta... osease, no hubo consulta.

Te sugiero averigues por dónde están fluyendo tus datos (imprime mensajes) porque creo el problema esta en tus condicionales:
Código PHP:
if ($busqueda<>''){
.
.
.
} elseif (
$numero>1) { 
- En PHP para negar la igualdad de maneja '!=' no '<>' como lo tienes.
- Haz uso de la función empty(): www.php.net/empty
- No se ve que definas $busqueda ni $numero
- Si dichas variables las haz de recibir de un formulario haz uso de la variable superglobal $_POST ó $_GET
- mmm... para ejecutar la query necesitas la función mysql_query()
- Verifica que estés haciendo adecuada la conexión. Usa la función mysql_error() junto con un "or die" de esta manera:
Código PHP:
mysql_connect(....) or die (mysql_error()); // al conectar
mysql_select_db(....) or die (mysql_error()); // y aquí 
Espero te sirva de algo. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 28/07/2005, 21:00
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 7 meses
Puntos: 4
Respetuosamente, pregunto...
Cuando haces la consulta
$result=mysql("teleformacion", $cadbusca);
tinenes definida esta funcion en algun lado como algo especial? hecho por vos?
osea, mysql() no es una funcion que pueda ser interpretada.
en todo caso si la creaste antes, tipo:
function mysql($conexion;$consultonta);

deberias estar llamandola con

echo mysql(y la fruta qe definiste);

sino, coincido con la sabia respuesta del amigo este que dice
$result = mysql_query($cadbusca)

te comento otra:
Segun estube contando, la linea 22 es esta:
22 {
pero creo que al pedo te lo digo, no tiene que ver con el problema en si.

saludos
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #8 (permalink)  
Antiguo 28/07/2005, 21:04
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
si lo copie igual, puede ser lo de la consulta, pero donde?? la consulta no la hago dde el codigo que me pasaste?
  #9 (permalink)  
Antiguo 28/07/2005, 21:07
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
cambia esta linea: $result=mysql_query($cadbusca,$link);

por: $result=mysql_query($cadbusca,$link) or die(mysql_error());

para que mysql te diga si hay un error en la consulta sql.
  #10 (permalink)  
Antiguo 28/07/2005, 21:27
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Cita:
Iniciado por claudiovega
cambia esta linea: $result=mysql_query($cadbusca,$link);

por: $result=mysql_query($cadbusca,$link) or die(mysql_error());

para que mysql te diga si hay un error en la consulta sql.

asi me muestra la página sin error pero en blanco





Jam creo que tienes razón, que debería poner aqui?
Código PHP:
if ($busqueda<>' ??'){

$trozos=explode(" ??",$busqueda); 

Última edición por mvlsistemas; 06/08/2005 a las 08:59
  #11 (permalink)  
Antiguo 28/07/2005, 21:50
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Prueba esto:

[code]
<?php
//cadena de conexion
$link=mysql_connect("localhost","usuario","pass");
mysql_select_db("teleinformacion");

// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($_POST["busqueda"]!="")
{
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$_POST["busqueda"]);
$numero=count($trozos);

if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT marcas, productos FROM contenido WHERE VISIBLE =1
AND marcas LIKE '%".$_POST["busqueda"]."%' OR productos LIKE '%".$_POST["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 marcas, productos, MATCH ( marcas, productos )
AGAINST ( '$busqueda' ) AS Score FROM contenido WHERE
MATCH ( marcas, productos ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}

$result=mysql_query($cadbusca,$link) or die(mysql_error());
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->marcas;
$titulo=$row->productos;
echo $referencia." - ".$titulo."<br>";
}
}
?>
[code]
  #12 (permalink)  
Antiguo 28/07/2005, 21:52
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
vaya siempre lo mismo, que hay que colocar para que el codigo salga coloreado e indentado?
  #13 (permalink)  
Antiguo 28/07/2005, 22:18
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por claudiovega
que hay que colocar para que el codigo salga coloreado e indentado?
Aquí: http://forosdelweb.com/misc.php?do=bbcode#code
ó en la barra del editor:


... acabo de ver que sí se definife $numero, pero en lo demás mantengo lo dicho aunque parece no se leyó .

... agregar que en caso de que no se encontrasen resultados (que no es lo mismo a que no se ejecute la consulta) habría el mismo problema, para evitarlo habría que hacer uso de mysql_num_rows().

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 28/07/2005 a las 22:31
  #14 (permalink)  
Antiguo 29/07/2005, 07:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Si jam es así, ahora pregunto: yo necesito que me busque en las páginas del sitio ej: donde están lámparas y que me lleve a esa página o que me tire las páginas en donde está la palabra lámparas, entonces en la BD que debo poner? palabras claves que estén en cada meta de los head de cada página?
Por que me parece también que no sirve la BD como la tengo.

En sí no sé si es esto lo que necesito realmente, yo quiero con este script hacer un buscador interno para mi web.
Alguno de los campos de la tabla tiene que tener las palabras claves y la direccion de cada pagina del sitio para que me lleve a esa página?

Por último, en cada página debo poner algún archivo php? para que haga la búsqueda?


Claudio entre esas etiquetas te sale el código php coloreado

Gracias sinceramente a todos

Última edición por mvlsistemas; 29/07/2005 a las 07:35
  #15 (permalink)  
Antiguo 29/07/2005, 19:43
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
claudio probé tu último script pero no me da el error pero me muestra una página vacía.
la verdad esto de hacer un buscador interno pensé que era más sencillo.
  #16 (permalink)  
Antiguo 30/07/2005, 06:38
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por mvlsistemas
yo necesito que me busque en las páginas del sitio ej: donde están lámparas y que me lleve a esa página o que me tire las páginas en donde está la palabra lámparas, entonces en la BD que debo poner? palabras claves que estén en cada meta de los head de cada página?
.... ¿y cómo son esas páginas en las que debes buscar y de qué forma quieres obtener resultados????.

Si tu página es un HTML necesitas asignar su contenido a una variable y parsearlo para eliminar etiquetas HTML --si lo que quieres es buscar en su contenido-- ó identificar las que te importen --si quieres buscar en los metas--.

Puedes igual manejar palabras clave que relacionen a un archivo --url de tu página-- en especifico, pero entonces te atendrás a eso y no a el verdadero contenido de tu documento... todo depende de cómo es que quieres que se hayen resultados...

Ahora, si quieres buscar en su contenido y es generada dinámicamente y de tu propiedad... supongo haz de tener los contenidos en una BD ... entonces quizá te convendría hacer busquedas de texto completo. El tema se esta tratando acá: http://www.forosdelweb.com/f18/buscador-con-operadores-not-320844/

Y claro... las busquedas ofrecen mucho. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #17 (permalink)  
Antiguo 30/07/2005, 07:37
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Script, ahora funciona así

si la tengo una parte en html, y necesito que busque por palabras claves en cada documento, igual que en la parte php.

pregunto: el código que cité al principio del tema no me sirve? que le falta? o de donde puedo buscar un buscador para instalar?

haber: creo un formu, un archivo buscar y las bd. que más falta?

gracias jam, es que no programo ese es el kit de la cuestión. jajaj

Última edición por mvlsistemas; 31/07/2005 a las 15:42
  #18 (permalink)  
Antiguo 31/07/2005, 15:58
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Bueno les cuento, intentando hacer un buscador interno para mi web logré esto, ya funciona pero no es lo que buscaba, lo dejo por si les sirve.

La BD tiene 1 tabla llamada contenido, con 5 campos: id,palac, link, titulo, contenidos .Donde id es autonumérico, palac serían los productos o palabras claves(ahi me tildo), link sería la dirección o el archivo.htm que teorícamente contiene esas palac, en titulo ingresé la descripción del artículo y en comentarios algunas palabras relacionadas a la palac.

he cargado 5 registros solamente para probar.

el formulrio es el siguiente:
Código:
<FORM METHOD=POST ACTION="buscador.php">
Buscar: <INPUT TYPE="text" NAME="busqueda">
<input type="submit" name="Submit" value="Buscar">
</FORM>
y te devuelve:

cables - cables.htm

Lo que no puedo lograr es que al menos el cables.htm me lo tirara como www.midominio.com.ar/cables.htm y de ser posible que me redireccione a www.midominio.com.ar/cables.htm sería lo ideal


Este es el archicvo buscador.php que subí al servidor tal cual como está aquí:

Código PHP:
<?php
//cadena de conexion
$link=mysql_connect("localhost","us","pass");
mysql_select_db("name bd");

// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($_POST["busqueda"]!="")
{
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$_POST["busqueda"]);
$numero=count($trozos);

if (
$numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
 
$cadbusca="SELECT  palac, link FROM contenido WHERE palac =1
      AND titulo LIKE  '%$busqueda%' OR comentarios 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, comentarios, MATCH ( titulo, comentarios )
      AGAINST (  '$busqueda' ) AS Score FROM contenido WHERE
      MATCH ( titulo, comentarios ) AGAINST (  '$busqueda' ) ORDER  BY Score DESC LIMIT 50"
;
}

$result=mysql_query($cadbusca,$link) or die(mysql_error());
While(
$row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->palac;
$titulo=$row->link;
echo 
$referencia." - ".$titulo."<br>";
}
}
?>
Gracias a Jam y Claudio vega por el php

Por favor, acepto todas sugerencias y después que les sirva a los que como yo terminaron intentandoló.
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 05:16.