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'], 0, 16)!="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($datum, 8, 2),
SubStr($datum, 10, 2),
SubStr($datum, 12, 2),
SubStr($datum, 4, 2),
SubStr($datum, 6, 2),
SubStr($datum, 0, 4))
-mktime(SubStr($veta, 8, 2),
SubStr($veta, 10, 2),
SubStr($veta, 12, 2),
SubStr($veta, 4, 2),
SubStr($veta, 6, 2),
SubStr($veta, 0, 4));
// 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