Precedente :: Successivo |
Autore |
Messaggio |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 24 Giu 2006 16:43 Oggetto: * Confronto date di connessione dallo stesso IP |
|
|
Salve.
Avrei bisogno di sottrarre due date e di confrontare gli IP. Il mio intento è quello di impedire la votazione dallo stesso IP prima che passi 1 ora.
Attualmente questo controllo temporale avviene tramite cookie, ma capite che basta cancellare il cookie.
Qundi ho pensato di confrontare l'IP (che viene regitrato in una apposita tabella del DATABASE) e sottrarre le date.
Se l'IP è uguale e il risultato è minore o uguale a 1 la if va indirizzata all'errore 2, altrimenti il PHP va avanti.
La data viene registrata nel formato Anno, mese, giorno, ora, secondi.
Avrei pensato di fare così:
$cdate = date ("Ymd");//do alla variabile cdate il valore date immagazzinato sul DATABASE
// recupero data oltre che ip e lo confronto con la data attuale, se è meno di 1 ora allora
$query = mysql_db_query ($dbname,"Select ip,cdate from top_hits Where
sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'
order by cdate desc",$db) or die (mysql_error());
$checkDate = mysql_fetch_array($query);
$dataUltimoVoto = $checkDate[1];
if ($cdate - $dataUltimoVoto) <= 1)//questa dovrebbe essere la sottrazione...
$err = 2;
header("location: $url_to_folder/index.php?a_m=$err");
Sul browser l'errore mi dice che non posso porre minore o uguale a 1.
Perché?
Per completezza riporto l'intera pagina PHP:
<?
include "config.php";
if (!$site) header("location: $url_to_folder");
$get_rows = mysql_db_query ($dbname,"Select title,url,rank,votes from
top_user Where sid='$site'",$db) or die (mysql_error());
if (!mysql_num_rows($get_rows) OR mysql_num_rows ($get_rows) < 1) {
header("location: $url_to_folder"); }
$rows = mysql_fetch_array($get_rows);
if ($gateway == 1 AND $stat != "gate") {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
(ovviamente ho omesso le echo per i metatag, il circuito banner ecc.)
echo "<p align=\"center\"><font size='4'>Stai votando per il sito
<b>$rows[title]</b><font></p>\n";
echo "<FORM ACTION=\"in.php\" METHOD=\"POST\">\n";
echo "<p align=\"center\"> </p>\n";
echo "<p align=\"center\">\n";
echo "<INPUT TYPE=\"IMAGE\" NAME=\"SUBMIT_IMAGE\" WIDTH=\"347\"
HEIGHT=\"33\" ALT=\"VOTE TO $top_name\" src=\"images/enter.gif\"><BR>\n";
echo "</p>";
echo "<p align=\"center\"> </p>\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"site\" VALUE=\"$site\">\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"stat\" VALUE=\"gate\">\n";
echo "</FORM>\n";
echo "<div align=\"center\"><font size=\"3\">Se vuoi visitare la TOP
senza votare, <a href=\"http://www.esempio.com/\"> CLICCA
QUI</a></font><br><br><br><br>\n";
echo "</body>\n";
echo "</html>\n";
echo "";
}
else {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
if ($gateway == 1 && $REQUEST_METHOD == "POST" && isset($site)) {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
$cdate = date ("Ymd");
$err = 1;
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
// recupero data oltre che ip e lo confronto con la data attuale, se è meno di 1 ora allora
$query = mysql_db_query ($dbname,"Select ip,cdate from top_hits Where
sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'
order by cdate desc",$db) or die (mysql_error());
$checkDate = mysql_fetch_array($query);
$dataUltimoVoto = $checkDate[1];
if ($cdate - $dataUltimoVoto) <= 1)
$err = 2;
header("location: $url_to_folder/index.php?a_m=$err");
if ($err == 1 && @mysql_num_rows($query) >= 1) $err = 2;
if ($err == 1 && $use_cookies == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
if ($test_cookies != 1) $err = 5;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where
sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values
('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
if ($gateway != 1) {
$cdate = date ("Ymd");
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
$err = 1;
$query = mysql_db_query ($dbname,"Select ip from top_hits Where
sid='$site' and cdate between $pdate and $cndate and
ip='$REMOTE_ADDR'",$db) or die (mysql_error());
if ($err == 1 && @mysql_num_rows($query) >= 1) {
$err = 2;
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
}
if ($err == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where
sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values
('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
?>
Grazie anticipatamente
 |
|
Top |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 26 Giu 2006 09:29 Oggetto: Re: Confronto date di connessione dallo stesso IP |
|
|
mirrors ha scritto: | if ($cdate - $dataUltimoVoto) <= 1) |
La if scritta così è sbagliata perché manca una parentesi, inolte se non apri la graffa verrà eseguito solo il primo comando, prova:
Codice: | if (($cdate - $dataUltimoVoto) <= 1)
{ |
Ciò detto non sarebbe meglio memorizzare anche l'ora sul db e poi fare tutti i controlli direttamente nella query? |
|
Top |
|
 |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 26 Giu 2006 22:04 Oggetto: Re: Confronto date di connessione dallo stesso IP |
|
|
horus ha scritto: | mirrors ha scritto: | if ($cdate - $dataUltimoVoto) <= 1) |
La if scritta così è sbagliata perché manca una parentesi, inolte se non apri la graffa verrà eseguito solo il primo comando, prova:
Codice: | if (($cdate - $dataUltimoVoto) <= 1)
{ |
Ciò detto non sarebbe meglio memorizzare anche l'ora sul db e poi fare tutti i controlli direttamente nella query? |
Grazie horus.
Sul DATABASE è già memorizzata la data nel formato Y:m:d: ecc.
Che intendi per "fare i controlli direttamente nella query?"
Grazie.
Un abbraccio.
PS: Salutatemi quel mattacchione geniale di RU-Y2K e anche kluster, il grande.  |
|
Top |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 27 Giu 2006 09:14 Oggetto: |
|
|
Se tu la data la memorizzi sul db o in formato
o in formato number con la funzione time() potrai poi fare la query sul tipo:
Codice: | $sql = 'select ip from top_hits where sid=\''.$site.'\' and ip=\''.$REMOTE_ADDR.'\' and cdate>\'' . date("YmdHis",time()-3600). '\''; |
oppure
Codice: | $sql = 'select ip from top_hits where sid=\''.$site.'\' and ip=\''.$REMOTE_ADDR.'\' and cdate>' . (time()-3600); |
A questo punto con la funzione mysql_num_rows determini se la query ha prodotto risultati, in caso affermativo vuol dire che quell'ip ha già votato nell'ultima ora, se non restituisce righe allora vuol dire che il record non c'è e quindi l'ip non ha ancora votato.
In pratica con una sola istruzione controlli sia il parametro ip sia il parametro data senza bisogno di if successivi.
P.S.: come sempre non garantisco per eventuali errori di sintassi nelle query. |
|
Top |
|
 |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 27 Giu 2006 17:23 Oggetto: Confronto date |
|
|
Ciao, horus.
Hai ragione, sono uno stupido.
Grazie e un abbraccio.
Giorgio |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|