Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    select php, renderla con estrazione ad ip unico ogni 24 ore

    Buonasera

    Vi chiedo una modifica ad uno script per una funzione select, mi interessa rendere estrazione con la select unica per ip ogni 24 ore (come un contatore visite che conteggia ip unici ogni 24 ore).

    In pratica lo script estrae a caso (random) dei banner da mostrare, attualmente li estrae in modo casuale (dunque capita che lo stesso utente con lo stesso ip veda a rotazione più volte lo stesso banner) a me invece interessa estrarli in modo casuale ma solo 1 volta nelle 24 ore basandosi sull’ip (dunque vorrei che 1 visitatore col suo ip possa vedere a rotazione solo 1 volta un preciso tipo di banner e lo possa rivedere dopo 24 ore).

    Ho a parte una tabella che salva tutti gli ip, i timestamp e il numero della pubblicita visitata.

    Ho effettuato varie modifiche ma non sono riuscito a imporre la condizione che 1 ip puo visitare solo 1 volta ogni 24 ore ogni pubblicita.

    Dunque 1 ip potra visitare 1 volta ogni 24 ore ogni pubblicita (pubblicita 1, pubblicita 2, pubblicita 3 ma non dovra rivisitare prima delle 24 ore novamente la pubblicita 1).

    Vi allego il codice e lo commento per spiegarlo.

    Spero possiate aiutarmi, posso aggiungere qualsiasi colonna all’sql per creare questa condizione dell’ip ogni 24 ore.

    Vi ringrazio per l’aiuto

    Buonasera

    Codice PHP:

    <? include('includes/config.inc.php');

    $today time();
    $url $_SERVER['HTTP_HOST'];
    $ip $_SERVER['REMOTE_ADDR'];
    $paese “Italia”;


    // ESTRAZIONE DALLA TABELLA BANNER IN MODO CASUALE LE PUBBLICITA IN STATO ATTIVO NELLA
    LINGUA IMPOSTATASE NON SONO DISPONIBILI LO SCRIPT VA ALLA SECONDA PARTE//

    $myDb->connect();
    $ad_result=mysql_query("SELECT * FROM tabella_banner WHERE paese LIKE '%$paese%' AND stato='attivo'");
    $ad_row=mysql_fetch_array($ad_result);
    $myDb->close();

    if (
    mysql_num_rows($ad_result) >= 1) {

    $myDb->connect();
    $tabla mysql_query("SELECT * FROM tabella_banner WHERE paese LIKE '%$paese%' AND stato = 'attivo' ORDER BY RAND() LIMIT 0, 1");

    echo 
    ""$registro["indirizzo_web"];


    // SE LO SCRIPT NON TROVA PUBBLICITA NELLA LINGUA IMPOSTATA ESTRAE LE ALTRE PUBBLICITA
    IN STATO ATTIVO //

    } else {

    $myDb->connect();
    $tabla mysql_query("SELECT * FROM tabella_banner WHERE stato = 'attivo' ORDER BY RAND() LIMIT 0, 1");

    echo 
    ""$registro["indirizzo_web"];

    }

    ?>

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    quindi alle 23.59 e alle 0.01 posso rivedere lo stesso banner perchè è passata la mezzanotte?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    NO

    vorrei che il banner riappaia random solo dopo 24 ore (1 giorno intero) di attesa.

    Mi serve questa funzione per mostrare agli utenti sempre banner nuovi (a rotazione) e non ripetuti.

    Spero che qualcuno possa darmi una mano

    Ho gia una tabella a parte che mi indica ip, timestamp di ogni visualizzazione.



    Originariamente inviato da dottwatson
    quindi alle 23.59 e alle 0.01 posso rivedere lo stesso banner perchè è passata la mezzanotte?

  4. #4
    per fare una cosa semplice io farei con i cookies...

    dopo aver visualizzato il "bannerA" gli invii un cookies con il nome del banner e scadenza 24 ore...

    idem per il bannerB, bannerC... etc etc...

  5. #5
    Ciao

    A me con i cookie andrebbe benissimo

    dovrei impostare come nome del cokie ID del banner e la scadenza dopo 24 ore

    Pero non so come integrare una simile funzione e sopratutto non saprei fare il controllo sul cokie salvato nel pc (in modo che lo stesso visitatore se continua a visitare il sito vedra altri banner e non piu lo stesso)

    Puoi darmi qualche indicazione per fare una cosa simile?

    Ti ringrazio per aiuto


    Originariamente inviato da oly1982
    per fare una cosa semplice io farei con i cookies...

    dopo aver visualizzato il "bannerA" gli invii un cookies con il nome del banner e scadenza 24 ore...

    idem per il bannerB, bannerC... etc etc...

  6. #6
    Codice PHP:
    <?php
    if(!isset($_COOKIE['bannerA']))
       {
       
    $banner 'A';
       
    setcookie('bannerA''wewe'time()+(3600*24), '/');
       }
    else if(!isset(
    $_COOKIE['bannerA']))
       {
       
    $banner 'B';
       
    setcookie('bannerB''wewe'time()+(3600*24), '/');
       }
    // etc etc sempre else if
    ?>
    <html>
    <body>
    <?php
    switch($banner)
       {
       case 
    'A': echo 'banner A'; break;
       case 
    'B': echo 'banner B'; break;
       
    // etc etc
       
    }
    ?>
    </body>
    </html>

  7. #7
    Vi ricapitolo di cosa dispongo

    1) yob_ads tabella con id e url dei banner e stato (active) da selezionare
    2) yob_ip tabella con ip, timestamp, id del banner visualizzato

    Un programmatore mi ha creato una query ma purtroppo mi seleziona banner ripetuti


    Codice PHP:

    $today 
    time();
    $url $_SERVER['HTTP_HOST'];
    $ip $_SERVER['REMOTE_ADDR'];
    $country file_get_contents('http://api.wipmania.com/'.$ip);
    $status "active";


    SELECT FROM yob_ads WHERE
    ads_type LIKE 
    '%visits%' AND country LIKE '%$country%' AND status '$status' AND
    id IN (SELECT ad_id FROM yob_ip WHERE ip NOT IN (SELECT ip FROM yob_ip WHERE ip '$ip' AND UNIX_TIMESTAMP()-timestamp 86400)
    AND 
    id NOT IN (SELECT ad_id FROM yob_ip WHERE ip '$ip' AND UNIX_TIMESTAMP()-timestamp 86400)) 

    ads_type LIKE '%visits%' indica il tipo di pubblicita è solo un modo per differenziare diversi tipi di pubblicita


    Spero che esista una soluzione per questa funzione

    Vi ringrazio

  8. #8
    ultima modifica apportata ha portato a questo risultato tuttavia ancora una volta vengono mostrati banner ripetuti

    Spero che qualcuno posso consigliarmi per migliorare queste query

    Vi ringrazio per i consigli

    Codice PHP:
    <? include('includes/config.inc.php');

    $now time();
    $url $_SERVER['HTTP_HOST'];
    $ip $_SERVER['REMOTE_ADDR'];
    $country file_get_contents('http://api.wipmania.com/'.$ip);
    $status "active";




    // CHECK AND SHOW AVAILABLE ADS FOR COUNTRY BY VISITOR IP //

    $myDb->connect();
    $ad_result=mysql_query("SELECT * FROM yob_ads WHERE country LIKE '%$country%' AND visitip <> '$ip' AND status = '$status'");
    $ad_row=mysql_fetch_array($ad_result);

    if (
    mysql_num_rows($ad_result) >= 1) { 

    $tabla mysql_query("SELECT * FROM yob_ads WHERE
    (ads_type LIKE '%visits%' OR ads_type LIKE '%all_inclusive%') AND 
    country LIKE '%
    $country%' AND
    status = '
    $status' AND
    id NOT IN (SELECT ad_id FROM yob_ip WHERE ip = '
    $ip' AND timestamp < ($now - 86400))
    ORDER BY RAND()
    LIMIT 1"
    ); 

    while (
    $registro mysql_fetch_array($tabla)) {

    $clean_https preg_replace("/^(https:\/\/)+(www\.)?/i"''$registro['url']);
    $clean_http preg_replace("/^(http:\/\/)+(www\.)?/i"''$clean_https);
    $clean_text preg_replace("[\/(.+)]"''$clean_http);
    $clean_slash preg_replace("[\/]"''$clean_text);

    echo 
    "<frameset rows='*,1' frameborder='NO' border='0' framespacing='0'>";
    echo 
    " "
    echo 
    "<frame name='main_frame' src='";
    echo 
    "http://"
    echo 
    "$url"
    echo 
    "/traffic.php?ad=".""
    echo 
    ""$registro["id"];


    }



    $tabla mysql_query("SELECT * FROM tags
    WHERE status='
    $status'
    ORDER BY RAND()
    LIMIT 1"
    );

    while (
    $registro mysql_fetch_array($tabla)) {

    echo 
    "&tag=";
    echo 
    $registro["tag"];
    echo 
    "&site=";
    echo 
    "$clean_slash";
    echo 
    "' 
     "
    ;
    echo 
    "<frame name='ad_frame' scrolling='NO' noresize src=''>";
    echo 
    "</frameset>";



    }



    // CHECK AND SHOW AVAILABLE ADS FOR COUNTRY BY VISITOR IP //









    // SHOW AVAILABLE WORLD ADS //

    } else { 

    $tabla mysql_query("SELECT * FROM yob_ads WHERE
    (ads_type LIKE '%visits%' OR ads_type LIKE '%all_inclusive%') AND 
    country = '' AND
    status = '
    $status' AND
    id NOT IN (SELECT ad_id FROM yob_ip WHERE ip = '
    $ip' AND timestamp < ($now - 86400))
    ORDER BY RAND()
    LIMIT 1"
    ); 

    while (
    $registro mysql_fetch_array($tabla)) {

    $clean_https preg_replace("/^(https:\/\/)+(www\.)?/i"''$registro['url']);
    $clean_http preg_replace("/^(http:\/\/)+(www\.)?/i"''$clean_https);
    $clean_text preg_replace("[\/(.+)]"''$clean_http);
    $clean_slash preg_replace("[\/]"''$clean_text);

    echo 
    "<frameset rows='*,1' frameborder='NO' border='0' framespacing='0'>";
    echo 
    " "
    echo 
    "<frame name='main_frame' src='";
    echo 
    "http://"
    echo 
    "$url"
    echo 
    "/traffic.php?ad=".""
    echo 
    ""$registro["id"];


    }



    $tabla mysql_query("SELECT * FROM tags
    WHERE status='
    $status'
    ORDER BY RAND()
    LIMIT 1"
    );

    while (
    $registro mysql_fetch_array($tabla)) {

    echo 
    "&tag=";
    echo 
    $registro["tag"];
    echo 
    "&site=";
    echo 
    "$clean_slash";
    echo 
    "' 
     "
    ;
    echo 
    "<frame name='ad_frame' scrolling='NO' noresize src=''>";
    echo 
    "</frameset>";

    $myDb->close(); 

    }

    }



    // SHOW AVAILABLE WORLD ADS //



    ?>

  9. #9
    Probabilmente andrebbe usata una select col comando join per ricercare in 2 diverse tabella (tabella banner -> you_ads e tabella ip -> yob_ip)

    Tuttavia ancora non sono riuscito spero qualcuno possa consigliarmi

    Saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.