Foros del Web » Programando para Internet » PHP »

url aleatoria

Estas en el tema de url aleatoria en el foro de PHP en Foros del Web. Hola quisiera que me explicarais como hacer una llamada a una base de datos que tiene dos campos: id, url de forma que eliga una ...
  #1 (permalink)  
Antiguo 09/09/2003, 07:18
MMU
Invitado
 
Mensajes: n/a
Puntos:
url aleatoria

Hola quisiera que me explicarais como hacer una llamada a una base de datos que tiene dos campos: id, url de forma que eliga una url y redirija la pagina hacia esa url.

¿Es posible no?

Un saludo
  #2 (permalink)  
Antiguo 09/09/2003, 07:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Usa esta SQL:

SELECT * FROM tabla ORDER BY RANDOM() LIMIT 1

con esto obtienes el primer registro (LIMIT 1) de la tabla cuyos registros han sido ordenados aleatoriamente (ORDER BY RANDOM()).

Y para redireccionar, usa el header("Location: url") (www.php.net/header), poniendo detras exit;.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 09/09/2003, 07:26
MMU
Invitado
 
Mensajes: n/a
Puntos:
ok, usare esto:

SELECT * FROM tabla ORDER BY url RANDOM() LIMIT 1

Ahora defino la variable $direccion

$direccion=array[url];

y redireccion

header (location: $direcion);

se puede hacer asi?
  #4 (permalink)  
Antiguo 09/09/2003, 07:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
No es 'url RANDOM()', es simplemente 'RANDOM()'. No es ordenar por url aleatoriamente, sino que se crea un campo "fantasma" al que se le asigna un valor aleatorio y se ordena por ese campo.

Luego, no entiendo lo que quieres hacer para asignar valor a $direccion. Yo usaria mysql_result() (www.php.net/mysql_result) si tu base de datos es MySQL. Aunque lo puedes hacer con mysql_fetch_array() y demas.

Y si la redireccion seria:
Código PHP:
header("Location: $direccion");
exit; 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 09/09/2003, 07:43
MMU
Invitado
 
Mensajes: n/a
Puntos:
bueno, he usado este codigo:

[PHP]

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);
mysql_select_db($db, $link);

//Enviamos la consulta a la base de datos

$query = "SELECT * FROM tgp ORDER BY RANDOM() LIMIT 1";
$resultado = mysql_db_query ($db, $query, $link);

//redireccion
header("Location: $resultado[url]");
exit;

//cerramos la conexion

mysql_close ($link);

?>

[\PHP]

Pero lo que hace es mostrarme la pagina principal del web, no la url que esta en el campo url de la bd...
  #6 (permalink)  
Antiguo 09/09/2003, 07:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bien, es que mysql_query() (o mysql_db_query() que no te recomiendo usar) no devuelve el registro, sino un "puntero" a donde se almacenan esos registros. Para leer el registro, debes usar la funcion mysql_fetch_array() (www.php.net/mysql_fetch_array) pasandole como parametro ese "puntero".

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 09/09/2003, 08:03
MMU
Invitado
 
Mensajes: n/a
Puntos:
bueno... sigo con problemas


//Enviamos la consulta a la base de datos

$query = "SELECT * FROM tgp ORDER BY RANDOM() LIMIT 1";
$resultado = mysql_db_query ($db, $query, $link);
$row = mysql_fetch_array($resultado);

//Busca resultados en la base de datos

header("Location: $row[url]");
exit;


y sigue sin funcionar...

¿que esta mal josemi?
  #8 (permalink)  
Antiguo 09/09/2003, 08:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Esto, ¿te da algun error? ¿Que hace exactamente? Porque puede ser un error de MySQL u otra cosa. Mira a ver como tienes configurado el display_errors en tu php.ini o en phpinfo(). Por cierto, antes del header() no debes enviar nada al navegador, ni HTML, ni texto, ni espacios en blanco. Nada. Asi que si tienes el <html> ... por delante, eliminalo. Con la redireccion con header() no puedes mostrar nada.

Para comprobar que se ejecuta bien la consulta haz:
Código PHP:
$resultado mysql_db_query ($db$query$link) or die("Fallo $query .<br>MySQL dice: ".mysql_error()); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 09/09/2003, 08:47
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 20 años, 7 meses
Puntos: 0
comando

Q diferencia hay entre "TOP 1" y "LIMIT 1"???
Pq estaba acostumbrado a restringir la cantidad de campos con TOP, no conocia LIMIT.
adios

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book

Última edición por sktrpunk; 09/09/2003 a las 08:49
  #10 (permalink)  
Antiguo 09/09/2003, 08:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
LIMIT es para MySQL. TOP creo que es para MSSQL SERVER. Ademas, LIMIT acepta 2 parametros, primer registro y numero de registros. Si solo se pasa 1 es el de numero de registros.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 09/09/2003, 12:23
MMU
Invitado
 
Mensajes: n/a
Puntos:
El error es este:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/virtual/site236/fst/var/www/html/es/o.php on line 20

Warning: Cannot add header information - headers already sent by (output started at /home/virtual/site236/fst/var/www/html/es/o.php:20) in /home/virtual/site236/fst/var/www/html/es/o.php on line 24

Y el codigo este:

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);
mysql_select_db($db, $link);

//Enviamos la consulta a la base de datos

$query = "SELECT * FROM tgp ORDER BY RANDOM() LIMIT 1";
$resultado = mysql_db_query ($db, $query, $link);
$row = mysql_fetch_array($resultado);

//Busca resultados en la base de datos

header("Location: $row[url]");
exit;

//cerramos la conexion

mysql_close ($link);

?>


Linea 20:
$row = mysql_fetch_array($resultado);

Ejecutando el error de mysql me sale:

Fallo SELECT * FROM tgp ORDER BY RANDOM() LIMIT 1 .
MySQL dice: You have an error in your SQL syntax near '() LIMIT 1' at line 1

Alguna idea?

Un saludo
  #12 (permalink)  
Antiguo 09/09/2003, 13:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, con esto queria enseñar la gran leccion de estos foros: nunca des por sentado que el codigo que te dan no contiene erratas. Busca por tu cuenta las funciones que te comentan. No es que lo hagan a proposito, pero daos cuenta que mucha gente contesta a las preguntas sin el manual al lado (o durante el trabajo), y las respuestas, mas que codigo exacto, es una guia que debeis seguir para el autodescubrimiento de la solucion.

¿A quedado convincente? Ahora en serio, ha sido una metedura de pata mio. La funcion MySQL para generar numeros aleatorios es RAND(), RANDOM() como puse. Puedes encontrar mas funciones matematicas en http://www.mysql.com/doc/en/Mathematical_functions.html . Lo siento.

Pero parte del primer parrafo es cierto. Revisad el codigo, aprende del manual las cosas nuevas del codigo. Y revisalo otra vez. Las erratas existen.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 07:14.