zpětné odkazy

nová fičura drsného sajtu

23.4.2006 mě napadlo, že bych mohl napsat věc, která je vcelku běžná v redakčních systémech a to zpětné odkazy a začal jsem externí referery ukládat do databáze.

scriptík na ukládání dat do databáze je následující: <?
if($_SERVER['HTTP_REFERER'
  AND 
SubStr($_SERVER['HTTP_REFERER'], 016)!="http://drsny.net" ){
$dotaz="
  INSERT INTO referer SET 
  referer='"
.$_SERVER['HTTP_REFERER']."', 
  datum='"
.Date("YmdHis")."'";
$vysledek=MySQL_Query($dotaz);
}
?>

dnes jsem udělal druhou část a to zobrazení uložených dat: <?PHP
  $dotaz
="SELECT * FROM referer 
  ORDER BY datum DESC"
;
  
$vysledek=MySQL_Query($dotaz);
  
$pocet=MySQL_Num_Rows($vysledek);

  
// ziskani aktualniho data
  
$datum=Date("YmdHis");
  for(
$i=0$i<$pocet$i++){
    
// nacteni jednoho radku z naselektovanych dat
    
$veta=MySQL_Fetch_Array($vysledek);
    
// vypocteni rozdilu mezi aktualnim datem a datem z databaze v sekundach
    
$rozdil mktime(SubStr($datum82), 
      
SubStr($datum102), 
      
SubStr($datum122), 
      
SubStr($datum42), 
      
SubStr($datum62), 
      
SubStr($datum04))
    -
mktime(SubStr($veta82), 
      
SubStr($veta102), 
      
SubStr($veta122), 
      
SubStr($veta42), 
      
SubStr($veta62), 
      
SubStr($veta04));
    
// rozdeleni refereru do promennych; promenna $c obsahuje jmeno serveru 
    
list($a$b$c$d) =    split("/"$veta[referer], 4);
    echo 
"<A HREF=\"".$veta[referer]."\">".$c."</A> ";
    if(
$rozdil 60){
      
// pokud je rozdil mensi nez minuta
      
if($rozdil==1){
        echo 
"před ".$rozdil." sekundou";
      }else{
        echo 
"před ".$rozdil." sekundami";
      }
    }elseif(
$rozdil 3600){
      
// pokud je rozdil mensi nez hodina a vetsi nez minuta
      
$q=round($rozdil/60); 
      if(
$q==1){
        echo 
"před ".$q." minutou";
      }else{
        echo 
"před ".$q." minutami";
      }
    }elseif(
$rozdil 86400){
      
// pokud je rozdil mensi nez den a vetsi nez hodina
      
$q=round($rozdil/3600); 
      if(
$q==1){
        echo 
"před ".$q." hodinou";
      }else{
        echo 
"před ".$q." hodinami";
      }
    }else{
      
// pokud je rozdil vetsi nez den
      
$q=round($rozdil/86400); 
      if(
$q==1){
        echo 
"před ".$q." dnem";
      }else{
        echo 
"před ".$q." dny";
      }
    }
  }
?>

oba tyto scripty předpokládají, že je již připojená databáze, a že v ní existuje tabulka referer s touto strukturou: CREATE TABLE `referer` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `referer` varchar(255) NOT NULL default '',
  `datum` varchar(14) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `datum` (`datum`)
) TYPE=MyISAM 

ze scriptu, který zobrazuje uložená data jsem pro větší přehlednost vyhodil stránkování. pokud chceš namítnout, že jsem mohl čas ukládat jako std unix timestamp a ušetřit si tak jeho výpočet, odpovídám, že mohl, ale využívám uložená data ještě k něčemu jinému a pro ten účel mi více vyhovuje tento formát.

pokud chceš mrknout jak to celé funguje, můžeš tady