Programación Web y Scripting > PHP

 Mostrar Ofertas Aleatoriamente Cada X Tiempo

(1/2) > >>

saiory:
Hola, necesito mostrar un listado de ofertas que tengo guardada en mi DB mysql y que vayan cambiando cada 30segundos sin necesidad de refrescar la página.

Me han sugerido hacer lo siguiente:

Select campo1, campo2, campoN from tabla1WHERE 1
-->ORDER BY RAND() LIMIT 1 <--

pero de esta manera se cambiaría la oferta sólo al refrescar la página.

Gracias

RadicalEd:
Sin refrescar la página es difícil, yo lo pensaria más bien con un flash o con AJAX.

Lo malo es que no sé utilizar ninguna de las 2 :( 'tons no te podría dar un tip.

Mollense:

--- Cita de: "RadicalEd" --- Sin refrescar la página es difícil, yo lo pensaria más bien con un flash o con AJAX.

Lo malo es que no sé utilizar ninguna de las 2 :( 'tons no te podría dar un tip.
--- Fin de la cita ---
Si, opino que en este caso AJAX es muy buena opción.

saiory, usa el buscador del foro, me parece que hay algunos ejemplos sobre el tema.

Un saludo.

JrcsDev:
Con las siguientes funciones podrás utilizar AJAX:


--- Código: Text ---function nuevoAjax(){  var xmlhttp=false;  try {    xmlhttp = new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);  } catch (e) {    try {      xmlhttp = new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);    } catch (E) {      xmlhttp = false;    }  }   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {    xmlhttp = new XMLHttpRequest();  }  return xmlhttp;}function llamar(id,pagina,datos){  contenedor = document.getElementById(id);  ajax=nuevoAjax();  ajax.open(&#34;POST&#34;, pagina,true);  ajax.onreadystatechange=function() {    if (ajax.readyState==4) {      contenedor.innerHTML = ajax.responseText    }  }  ajax.setRequestHeader(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);  ajax.send(datos);} 
Para implementarlo, puedes usar un DIV para especificar la zona que se va a refrescar... por ejemplo:


--- Código: Text ---&#60;div id=&#34;div_publicidad&#34;&#62;&#60;/div&#62; 
y luego la llamada a AJAX la haces de la siguiente forma:


--- Código: Text ---llamar('div_publicidad','archivo_publicidad.php',''); 
el primer argumento de la función llamar es el CONTENEDOR donde piensas hacer la actualización asíncrona... en este caso es un DIV, y lo especificas a través de su ID.  El segundo argumento es el nombre del archivo que va a realizar las operaciones, y que va a imprimir la nueva publicidad. El tercer argumento es opcional, es para enviar valores por POST, y se implementa como el GET... extraño no? pero funciona.... Es decir, si quiero pasar un dato, seria:


--- Código: Text ---llamar('div_publicidad','archivo_publicidad.php','id='+id+'&nom='+nombre); 
y para recibir los datos en archivo_publicidad.php seria:


--- Código: Text ---&#036;id=&#036;_POST['id'];&#036;nom=&#036;_POST['nom']; 
En tu caso, como necesitas que la publicidad se actualize cada 30 segundos, por decir algo, puedes usar SETINTERVAL de javascript, que permite q una función se ejecute cada cierta cantidad de milisegundos:


--- Código: Text ---&#60;script language=&#34;javascript&#34;&#62;setinterval(&#34;act_public()&#34;,3000) //se ejecutara act_public() cada 3 segundosfunction act_public(){    llamar('div_publicidad','archivo_publicidad.php','')}&#60;/script&#62; 
Espero te sirva, a mi me ha servido bastante... Saludos!

saiory:
Gracias por tu ayuda pero no consigo que me refresque la página.

Lo he puesto de la siguiente manera:

En el archivo index.php al comienzo de la página:


<script language="javascript">
setinterval("act_public()",3000) //se ejecutara act_public() cada 3 segundos
function act_public()
{    
     llamar('div_publicidad','_PanelIzq.php','')
}
</script>

En la zona donde quiero que me haga el refresco en el archivo index.php:

<div id="div_publicidad">
   <?php include("_PanelIzq.php"); ?>
</div>


y en el archivo _PanelIzq.php

<script language="javascript">
function nuevoAjax(){
  var xmlhttp=false;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }

  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
function llamar(id,pagina,datos){
  contenedor = document.getElementById(id);
  ajax=nuevoAjax();
  ajax.open("POST", pagina,true);
  ajax.onreadystatechange=function() {
    if (ajax.readyState==4) {
      contenedor.innerHTML = ajax.responseText
    }
  }
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  ajax.send(datos);
}
</script>

<?php
aquí el código php con las sentencias sql para que muestre las ofertas que se encuentran en la bd mysql
?>


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

Hecho esto, no funciona el refresco y no se por dónde empezar a corregirlo.

Gracias.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa