Tempo....timestemp

antonioamabile

Utente Attivo
21 Gen 2010
150
0
16
Salve ho un solito problemino da porvi...recupero dal mio db un campo datatime ora vorrei verificare se sono passati alcuni minuti, come posso fare??? Devo converitire quello che recupero ovvero la data yyyy mm gg h:i:s in timestamp e se si come si fa???
Vi ringrazio ancora una volta per la vostra pazienza e immensa disponibilità!!
 
siccome non riesco ti posto un po' di codice
Codice:
 $ip=$_SERVER['REMOTE_ADDR'];
 $browser=$_SERVER['HTTP_USER_AGENT'];
 $ora=time();
 $data=date('d-m-y H:i:s',$ora);                     
 $verifica_orario;
 //setcookie("ora","$ora",time()+6);
   
   $sql= 'SELECT *from visite';
          $ris=mysql_query($sql,$mysql);           
          if (!$ris)
                {
                  echo "DB ERRORE, QUERY NON CONNESSA AL DATABASE\N";
                  echo 'MYSQL Error:'.mysql_error();
                  exit;
                }
                  while ($row=mysql_fetch_assoc($ris))
                  {            
				     $verifica_ip=$row['ip']; 
					 $verifica_orario=$row['orario'];
				  } 
				 
				 if(time()- strtotime($verifica_ora)>= 3600) 
                  { 
                    echo" è passata un'ora dalla data registrata nel database"; 
                  } 

				  else
				  {
				     $query = "INSERT INTO `visite` (ip, browser,orario)
                               VALUES ('".$ip."','".$browser."','".$data."')";       
                               $query_results = mysql_query($query) 
                               or die("Errore non è stato inviato nulla al db");
				  }
					
?>
 
se verifico $verifica_ora mi restiutisce una notice con undefine di errore, se verifico $data mi restiutisce il tempo in timestemp.....ora cosa devo fare????
 
si ma cosi facendo perchè se gli ip sono uguali mi inserisce sempre i dati nel db
Codice:
$ip=$_SERVER['REMOTE_ADDR'];
 $browser=$_SERVER['HTTP_USER_AGENT'];
 $ora=time();
 $data=date('d-m-y H:i:s',$ora);                     
 $verifica_orario;
 //setcookie("ora","$ora",time()+6);
   
   $sql= 'SELECT *from visite';
          $ris=mysql_query($sql,$mysql);           
          if (!$ris)
                {
                  echo "DB ERRORE, QUERY NON CONNESSA AL DATABASE\N";
                  echo 'MYSQL Error:'.mysql_error();
                  exit;
                }
                  while ($row=mysql_fetch_assoc($ris))
                  {            
				     $verifica_ip=$row['ip']; 
					 $verifica_orario=$row['orario'];
				  } 
				 var_dump(strtotime($data));  
				 if(time() - strtotime($verifica_orario)>=30 &&($verifica_ip!=$ip)) 
                  { 
				    $query = "INSERT INTO `visite` (ip, browser,orario)
                               VALUES ('".$ip."','".$browser."','".$data."')";       
                               $query_results = mysql_query($query) 
                               or die("Errore non è stato inviato nulla al db");
                    
                  } 

				  else
				  {
				    echo"Nel database non entrera' nulla visto che è passato meno di 30 minuti ";
				  }
mi aspettavo che verificando ip ugale non mi riportasse niente nel database
 
Il tuo script è un po' confuso. Prova a vedere se questo funziona:
PHP:
<?php
$sql = "SELECT * FROM visite WHERE ip = '{$_SERVER['REMOTE_ADDR']}'";
$query = mysql_query($sql) or die(mysql_error());

$insert = true;

if(mysql_num_rows($query) > 0)
{
	$row = mysql_fetch_assoc($query);
	$visit_timestamp = strtotime($row['orario']);
	
	if(time() - $visit_timestamp < (60 * 30))
		$insert = false;
}

if($insert)
{
	$date = date('d-m-y H:i:s');
	
	$sql = "INSERT INTO visite (ip, browser, orario) VALUES ('{$_SERVER['REMOTE_ADDR']}', '{$_SERVER['HTTP_USER_AGENT']}', '{$date}')";
	$query = mysql_query($sql) or die(mysql_error());
}
?>
 
Ho provato il tuo codice ma non fa quello che io voglio, ovvero se ip di connessione risultano uguali e non sono passati + di 5 minuti non deve finire nulla nel db. Cmq ti ringrazio per la collaborazione e per la disponibilità mostrata fino a questo momento.
AntonioAmabile
 
Lo script controlla se nella tabella visite è presente un record con il campo ip uguale all'indirizzo IP dell'utente. Se non è presente, inserisce direttamente la visita nel database. Se è presente, controlla dalla visita sono passati 30 minuti. Se sì, inserisce la visita nel database, altrimenti non la inserisce.

Se vuoi cambiare i 30 minuti con 5 devi modificare questa riga:
PHP:
if(time() - $visit_timestamp < (60 * 30))
Così:
PHP:
if(time() - $visit_timestamp < (60 * 5))
 
Io ho provato il tuo script ma non mi trovo con quanto dici, se faccio un aggiornamento del broswer o lo chiudo e rientro immediatamente comunque mi ritrovo una nuova registrazione nel database, cosa che non dovrebbe accadere in quanto gli ip sono uguali e il tempo passato sono inferiori a 5. Scusami se ti disturbo anche di domenica!!!
 
Prova a modificarlo così:
PHP:
<?php
$sql = "SELECT * FROM visite WHERE ip = '{$_SERVER['REMOTE_ADDR']}'";
$query = mysql_query($sql) or die(mysql_error());

$date = date('d-m-y H:i:s');
$sql = "INSERT INTO visite (ip, browser, orario) VALUES ('{$_SERVER['REMOTE_ADDR']}', '{$_SERVER['HTTP_USER_AGENT']}', '{$date}')";

if(mysql_num_rows($query) > 0)
{
	$row = mysql_fetch_assoc($query);
	$visit_timestamp = strtotime($row['orario']);

	if(time() - $visit_timestamp > (60 * 5))
		$query = mysql_query($sql) or die(mysql_error());
}
else
{
	$query = mysql_query($sql) or die(mysql_error());
}
?>
Se neanche così funziona prova ad aggiungere:
PHP:
var_dump($visit_timestamp);
Dopo:
PHP:
$visit_timestamp = strtotime($row['orario']);
Per vedere cosa esce fuori.
 
Ho provato ma non va mi dispiace disturbarti se provo a verificare il vardump esce il tempo in timestemp. Spero che non ti disturboo troppo!!
 
Ciao e scusami ancora una volta ma non riesco nel fare quello che tu mi dici.
Ho provato il tuo codice ma non mi trovo, io vorrei inserire nel db solo nel caso in cui ip è differente oppure nel caso in cui ip è uguale ma con un tempo trascorso tra l'ultima connessione e la seguente superiore a 5 minuti, questo è l'ultimo codice che ho provato (che mi hai gentilmente passato)
Codice:
<?php
  include ('condb2.php');
  include('condb.php');
 $ip=$_SERVER['REMOTE_ADDR'];
 $browser=$_SERVER['HTTP_USER_AGENT'];
 $ora=time();
 $data=date('d-m-y H:i:s',$ora);                     
 $verifica_orario;


$sql = "SELECT * FROM visite WHERE ip = '{$_SERVER['REMOTE_ADDR']}'"; 
$query = mysql_query($sql) or die(mysql_error()); 

$date = date('d-m-y H:i:s'); 
$sql = "INSERT INTO visite (ip, browser, orario) VALUES ('{$_SERVER['REMOTE_ADDR']}', '{$_SERVER['HTTP_USER_AGENT']}', '{$date}')"; 

if(mysql_num_rows($query)>0) 
{ 
    $row = mysql_fetch_assoc($query); 
    $visit_timestamp = strtotime($row['orario']); 
    var_dump((time() - $visit_timestamp / 60)); 
    if(time() - $visit_timestamp > (60 * 5)) 
        $query = mysql_query($sql) or die(mysql_error()); 
		
else 
{ 
    $query = mysql_query($sql) or die(mysql_error()); 
} 
?>
Ti ringrazio per la mano che mi stai dando!!!
 
Ora provo a far girare lo script in locale e ti dico se funziona.

EDIT: Abbiamo fatto un errore stupido. La data non deve essere in quel formato. Modifica questa riga:
PHP:
$date = date('d-m-y H:i:s');
Così:
PHP:
$date = date('d-m-Y H:i:s');
 
Ultima modifica:
Ho provato ho cambiato quello che tu mi hai detto ma continua a non funzionarmi...registra tutti i movimenti....tu hai provato in locale??? Scusami e ti ringrazio ancora una volta!!!
 
Ho creato questa funzione:
PHP:
function add_visit($diff = 5)
{
	$sql = "SELECT * FROM visits WHERE ip = '{$_SERVER['REMOTE_ADDR']}' AND (UNIX_TIMESTAMP() - visit_time) < ({$diff} * 60)";
	$query = mysql_query($sql) or die(mysql_error());
	
	if(mysql_num_rows($query) > 0)
		return;
	
	$sql = "INSERT INTO visits (ip, browser, visit_time) VALUES ('{$_SERVER['REMOTE_ADDR']}', '{$_SERVER['HTTP_USER_AGENT']}', UNIX_TIMESTAMP())";
	mysql_query($sql) or die(mysql_error());
}
L'ho anche testata e funziona perfettamente. Il problema è che la struttura della tabella delle visite cambia. Adesso è la seguente:
Codice:
CREATE TABLE IF NOT EXISTS `visits` (
  `ip` varchar(15) NOT NULL default '',
  `browser` text NOT NULL,
  `visit_time` bigint(20) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
Per prima cosa voglio ringraziarti per quanto fatto, poi ti volevo chiedere un'ultima gentilezza....come faccio a convertire il visit_time che mi hai fatto passare come bigint in una campo datatime in modo da vedere la data e l'orario di connessione in una maniera + leggibile???
 
ciao
quando la estrai dal db
PHP:
<?php
//.....
$data_leggibile=date("d-m-Y H:i:s", $riga['visit_time']);//o il separatore che preferisci
//.....
?>
 

Discussioni simili