Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* Confronto date di connessione dallo stesso IP
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
mirrors
Mortale adepto
Mortale adepto


Registrato: 20/03/06 17:06
Messaggi: 33

MessaggioInviato: 24 Giu 2006 16:43    Oggetto: * Confronto date di connessione dallo stesso IP Rispondi citando

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. Crying or Very sad
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

Very Happy
Top
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 10:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 26 Giu 2006 09:29    Oggetto: Re: Confronto date di connessione dallo stesso IP Rispondi citando

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
Profilo Invia messaggio privato
mirrors
Mortale adepto
Mortale adepto


Registrato: 20/03/06 17:06
Messaggi: 33

MessaggioInviato: 26 Giu 2006 22:04    Oggetto: Re: Confronto date di connessione dallo stesso IP Rispondi citando

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. Wink
Top
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 10:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 27 Giu 2006 09:14    Oggetto: Rispondi citando

Se tu la data la memorizzi sul db o in formato
Codice:
YmdHis

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
Profilo Invia messaggio privato
mirrors
Mortale adepto
Mortale adepto


Registrato: 20/03/06 17:06
Messaggi: 33

MessaggioInviato: 27 Giu 2006 17:23    Oggetto: Confronto date Rispondi

Ciao, horus.
Hai ragione, sono uno stupido.
Grazie e un abbraccio.
Giorgio
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
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