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
| |||
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. |
| |||
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:
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
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... |
| |||
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. |
| |||
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? |
| |||
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:
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
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. |
| |||
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 |
| |||
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. |