Contatore di click su link con redirect ogni 24 ore

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
Premetto che me la cavo con Mysql, ho mischiato quest'altro linguaggio ma ke non conosco bene, ho scopiazzato qualche pezzo, un casino.. Se qualcuno legge attentamente capirà quello che voglio fare, solo che non riesco a farlo solo con mysql.. Mi manca un pezzo

Codice:
<?php

// include our configuration file
require '../mysql/configcounter.php';
$msg = "Sorry i was unable to find that link in my Database!"; // Message to show when link is not found
$URL_2 = "link"; // Column to look in
$Tbl_2 = "contatorepunti"; // Table to look in
$Clicks_2 = "punti"; // Column to update
$ip = $_SERVER['REMOTE_ADDR'];
$ora = time(); //momento visita

$connect = new PDO(DB_TYPE . ":host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $connect->prepare("SELECT link FROM articoli WHERE id = :id");
$stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$URL_db = $stmt->fetch(PDO::FETCH_ASSOC);
$link = $URL_db[$URL_2];
if (empty($URL_db)) {
echo $msg;
exit;
}//empty($URL_db)

[COLOR="#FF0000"]$query_1 = mysql_query("SELECT * FROM contatorepunti WHERE titolo = '$link' AND ip = '$ip'");
if(mysql_num_rows($query_1)== 0){ //non ci sono record per quell'ip e quella pagina[/COLOR]
    
    $stmt = $connect->prepare("INSERT INTO $Tbl_2 (titolo, ip, punti, tempo) VALUES ('$link', '$ip', '3', '$ora')");
    $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
    $stmt->execute();
    header('Location: ' . $link);
    exit;
		    
[COLOR="#FF0000"]}else{ //il record esiste

    $riga = mysql_fetch_array($query_1);

    $intervallo = ($ora - $riga['tempo'])/3600;

    if($intervallo > 24)[/COLOR]{ 
		
		$stmt = $connect->prepare("UPDATE $Tbl_2 SET $Clicks_2 =$Clicks_2 +3, tempo = $ora WHERE titolo = '$link' AND ip = '$ip'");
    $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
    $stmt->execute();
    header('Location: ' . $link);
    exit;
		
    }
}

?>
 
Faresti prima a spiegare cosa vorresti fare e dove incontri problemi.
 
Allora c'è un motore di ricerca tipo google, una persona X cerca "smile". Risultati: "sito smile della persona Y", "sito smile della persona Z". La persona X clicca sul sito della persona Y e viene reinderizzata al suo sito, di conseguenza il sito della persona Y guadagna 1 click nella classifica. Fino a qui ci sono, il problema è ke se la persona X ricerca smile e clicca ancora una volta nel sito della persona Y, la persona Y guadagna un altro click, io sto cercando di implementare nel codice sopra citato la funzione ke permette ke uno stesso IP possa dare 1 click punto ogni 24 ore, chiaro? E dovrei fondere qst pezzo col codice sopra..

Il problema è ke il pezzo scritto in PDO è qll ke si occupa di fare reinderizzare il sito e del click, e il pezzo mysql nn funziona nn viene letto xk ovviamente nn si possono mischiare in qst maniera i 2 codici, x cui io vorrei realizzarlo tt in mysql ke lo conosco un po', PDO nn so cosa sia
 
Ultima modifica:
Abbandona mysql: prima o poi sarai costretto a riscrivere tutto
Puoi utilizzare anche mysqli che gli assomiglia di più
Io proverei a fare il tutto con una query sola
PHP:
<?php
// connessione
$connect = new mysqli("localhost", "root", "", "database");
// query
$query = "INSERT INTO contatorepunti
                      SET titolo = '$link',
                          ip = '$ip',
                          punti = 3,
                          tempo = now()
                 ON DUPLICATE KEY
          UPDATE contatorepunti
                 SET punti = punti + IF(tempo <= DATE_SUB(CURDATE(), INTERVAL 1 DAY),3,0)
                 WHERE titolo = '$link' AND ip = '$ip'
";
// eseguo la query
$result = $connect->query($query);
// per stampare eventuali errori
if (!$result) {
    die("errore : " . $connect->error);
}

// disconnessione
$connect->close();
?>
Dovrai apportare delle modifiche alla tabella : il campo "tempo" dovrà essere di tipo "TIMESTAMP" oppure "DATETIME" e dovrai inserire degli indici su "titolo" e su "link"
lo trovo piu elegante
detto questo non ho la minima idea se potrebbe funzionare : ho scritto di getto senza testarlo minimamente
vedi tu
 

Discussioni simili