elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] Alternar dos banners en cada refresco de la página
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] Alternar dos banners en cada refresco de la página  (Leído 1,872 veces)
exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
[Resuelto] Alternar dos banners en cada refresco de la página
« en: 16 Enero 2015, 11:51 am »

Hola quería que me ayudarais con el siguiente problema,

Resulta que quiero que al refrescar/cargar la pagina web me alterne dos imágenes banners de modo que en cada carga muestre una distinta.

Ojo no la quiero random ya que de ese modo lo consigo hacer(efecto que no deseo ya que a lo mejor cada dos, tres... refrescos me la alterna). Se me ocurre guardar un flag en la BD como valor a 1 de modo que si recargo de nuevo compruebo el valor, si es igual a 1 cargo el siguiente banner y lo pongo a 2 el flag y así al revés poniéndolo de nuevo a 1. Pero no querría legar hacer este procedimiento...

También quiero hacerla sin necesidad de utilizar metodos alternativos donde almacenar un estado como pueden ser: sesiones, cookies, ficheros, localstorage etc...

Espero vuestra respuesta, saludos!


« Última modificación: 21 Enero 2015, 08:33 am por #!drvy » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Alternar dos banners en cada refresco de la página
« Respuesta #1 en: 16 Enero 2015, 14:22 pm »

Citar
También quiero hacerla sin necesidad de utilizar metodos alternativos donde almacenar un estado como pueden ser: sesiones, cookies, ficheros, localstorage etc...

Entonces... ¿ Como pretendes guardar el valor para que no sea random ? Guardar el flag en la BD es igual que guardarlo en un fichero.. es lo mismo de hecho.. Se me ocurre que quizás puedas modificar el nombre de la imagen.. pero es ineficiente y raro y ni me quiero imaginar el lio que crearía con mas de 10 requests simultáneos.

Código
  1. <?php
  2.  
  3. /**
  4.  * Rotar entre varios banners sin guardar temporales.
  5.  * @return [string] [El archivo a mostrar]
  6.  */
  7. function rotate_banner(){
  8.    $dir = 'banners/';
  9.    $files = array('img_1.png','img_2.png');
  10.    $used = 'used_';
  11.  
  12.    foreach($files as $i=>$file){
  13.  
  14.        $_file = $dir.$file;
  15.        $_used = $dir.$used.$file;
  16.        $_new = array();
  17.  
  18.        if(!file_exists($_file) && file_exists($_used)){
  19.  
  20.            rename($_used, $_file);
  21.  
  22.            if($i < count($files)-1){
  23.  
  24.                $_new['file'] = $dir.$files[$i+1];
  25.                $_new['used'] = $dir.$used.$files[$i+1];
  26.  
  27.            } else {
  28.  
  29.                $_new['file'] = $dir.$files[0];
  30.                $_new['used'] = $dir.$used.$files[0];
  31.  
  32.            }
  33.  
  34.            rename($_new['file'],$_new['used']);
  35.            return $_new['used'];
  36.        }
  37.    }
  38.  
  39.    rename($dir.$files[0], $dir.$used.$files[0]);
  40.    return $dir.$used.$files[0];
  41. }
  42.  
  43. echo '<img src="', rotate_banner(), '" alt="banner" />';
  44.  
  45. ?>

Me imagino que se puede optimizar bastante pero es para mostrar la idea.

Saludos


« Última modificación: 16 Enero 2015, 14:23 pm por #!drvy » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Alternar dos banners en cada refresco de la página
« Respuesta #2 en: 16 Enero 2015, 18:04 pm »

Hola quería que me ayudarais con el siguiente problema,

Resulta que quiero que al refrescar/cargar la pagina web me alterne dos imágenes banners de modo que en cada carga muestre una distinta.

Ojo no la quiero random ya que de ese modo lo consigo hacer(efecto que no deseo ya que a lo mejor cada dos, tres... refrescos me la alterna). Se me ocurre guardar un flag en la BD como valor a 1 de modo que si recargo de nuevo compruebo el valor, si es igual a 1 cargo el siguiente banner y lo pongo a 2 el flag y así al revés poniéndolo de nuevo a 1. Pero no querría legar hacer este procedimiento...

También quiero hacerla sin necesidad de utilizar metodos alternativos donde almacenar un estado como pueden ser: sesiones, cookies, ficheros, localstorage etc...

Espero vuestra respuesta, saludos!

¿Y donde pretendes guardar la flag? El código de drvy tecnicamente escribe la flag en el nombre del archivo que no se escribe en el archivo per se (dependiendo del sistema de archivos) pero igual se guarda en algun lado. Incluso la Base de Datos guarda la informacion en algun lado (como te dijeron).

Puedes pasar la ultima imagen por una peticion HTTP pero es modificable:
Código
  1. <?php
  2. $img = array('archivo1.jpg', 'archivo2.gif'); //array de imagenes
  3. $max = count($img);
  4. if(isset($_GET["last"]) && is_numeric($_GET["last"]) && $_GET["last"] < $max){
  5.   $last = $_GET["last"];
  6. } else {
  7.   $last = -1; //Cualquier valor de rand vale.
  8. }
  9.  
  10. do {
  11. $rand = mt_rand(0,$max-1);
  12. } while($rand == $last);
  13.  
  14. $img[$rand]; //imagen a desplegar

Tambien puedes hacer un desplegado en base al tiempo, pero no hay garantía que no se repita la imagen.

Código
  1. <?php
  2. $img = array('archivo1.jpg', 'archivo2.gif'); //array de imagenes
  3. $max = count($img);
  4. $step = '10'; //10 segundos.
  5.  
  6. $time = time();
  7. $ip = ip2long($_SERVER["REMOTE_ADDR"]);
  8.  
  9. $seed = $time + $ip;
  10. $hash = floor($seed % ($step * $max) / $step);
  11. $img[$hash]; //imagen a desplegar;
  12. ?>

Lo único es que si la persona hace el refresco de la pagina antes de lo que hayas puesto en $step, se muetra la misma imagen.
En línea

exploiterstack

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Re: Alternar dos banners en cada refresco de la página
« Respuesta #3 en: 19 Enero 2015, 08:31 am »

Muchísimas gracias #!drvy, me ha funcionado a la perfección. Y a ti MinusFour también gracias por el consejo, nunca viene mal saber otras alternativas.

Un saludo! ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines