- Home
- Categorie
- Coding e Sistemistica
- Coding
- Select php, renderla con estrazione ad ip unico ogni 24 ore
-
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
[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 IMPOSTATA, SE 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"];
}
?>
[/PHP]
-
Vi ricapitolo di cosa dispongo
- yob_ads tabella con id e url dei banner e stato (active) da selezionare
- yob_ip tabella con ip, timestamp, id del banner visualizzato
Un programmatore mi ha creato una query ma purtroppo mi seleziona banner ripetuti
[PHP]
$today = time();
$url = $_SERVER['HTTP_HOST'];
$ip = $_SERVER['REMOTE_ADDR'];
$country = file_get_contents('h ttp://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))
[/PHP]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
-
Ciao guadagnaeuro,
Potresti fare una query per estrarre (dato l'ip) un array dei banner che sono già stati visualizzati. A quel punto tutto si riduce a sottrarre gli elementi del primo array (banner già mostrati per quell'ip) dal secondo (tutti i banner) ed eseguire il random sull'array risultante.Ma cosa fai se i banner sono ad esempio 5 in totale e io visito la pagina 6 volte in un giorno? Un banner devi per forza mostrarlo più di una volta!
Ciao,
Luca Bartoli
-
Ciao Luca
Sto sperimentando varie soluzione tra cui la possibilità degli if per redirezionare se non sono disponbili risultati.
Ieri mi hanno sviluppato questa query ma purtroppo non estrae in maniera unica nelle 24 ore bensi noto che piu volte riappaiono gli stessi banner
Potresti aiutarmi, te ne saro davvero grato, mi interessa una soluzione
Questo è ultimo codice che mi hanno sviluppato in pratica prima controlla con if se sono disponibili banner della lingua del visitatore e dopo si occupa di paragonare i banner gia visitati (yob_ip) e mostrare solo i banner non visti.
Se non trova banner nelle lingua del visitatore mostra i banner generici tuttavia il paragone con i banner già visti non funziona infatti vengono mostrati più volte gli stessi banner (purtroppo) e non solo dopo 24 ore.
Ti ringrazio per i consigli
A presto
[php]
// 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");[/php]
-
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
-
Forse dovresti associare un banner all'IP al momento che l'utente con quel IP inizia a visualizzare i banner.
Così crei un riferimento di partenza e lo registri in una tabella "visti" nella quale poi resistri tutti i banners visualizzati in sequenza e termini la registrazione con l'inserimento dell'ultimo banner.
Mentre riempi la tabella "visti" confronti i dati contenuti in essa con quelli di yob_ads.
Quando l'ip X ha visto tutti i banner una prima volta termina lo script di inserimento dei banner nella tabella "visti".
Fai ricorso alla tabella "visti" per l'ip X e estrai data e ora del primo banner visto e lo riproponi alla stessa ora nel giorno seguente.
Spero di esserti stato di aiuto.