| Autor | Zpráva | ||
|---|---|---|---|
| jan.rok Profil * |
#1 · Zasláno: 5. 9. 2011, 19:16:49
Jak by se dalo pomocí php a mysql zaznamenat datum, kdy bylo kliknuto na určitý odkaz?
Představa je taková: Na stránce jsou odkazy s pdf soubory a chtěl bych vědět, jestli na konkrétní pdfko někdo kliknul v určitý den (o víkendu). Představuju si, že po kliknutí se provede zápis do mysql databáze, zaznamená se datum, čas, id pdf souboru. Nevím ale, jak zajistit dohromady otevření pdfka v novém okně a zároveň vyvolání php skriptu. Zkouším to takhle: <a href="soubor.pdf" target="_blank" onclick="php_skript.php;">Zde je soubor PDF</a> PDF v novém okně se otevře, záznam se ale neprovede. Jdu správnou cestou, anebo se to řeší jinak? Díky za náměty. JR |
||
| ninja Profil |
#2 · Zasláno: 5. 9. 2011, 20:03:15
V zásadě jdete správnou cestou, jen je komplikovanější. Hledejte magické slůvko AJAX.
Další možnost je odkazovat pouze na PHP skript, který provede zápis o stažení a následně pošle na výstup vlastní PDF soubor. |
||
| Sir Tom Profil |
#3 · Zasláno: 5. 9. 2011, 20:05:02
jan.rok:
Kliknu na odkaz (s proměnnou nebo parametrem - např. skript.php?soubor=01) > dostanu se na stránku skript.php, kde do databáze se uloží čas s hodnotou glob. proměnné 'soubor' (01) > z této stránky se automaticky přesměruji na otevření PDFka (kam přesměrovávat si můžete vytáhnout z databáze dle proměnné (01))... |
||
| Rellik Profil |
#4 · Zasláno: 5. 9. 2011, 21:09:04
Já mám něco podobného jako počitadlo abych zjistil počet stahnutí určitého souboru:
<?php
/*
CREATE TABLE `count` (
`file` VARCHAR( 128 ) NOT NULL ,
`count` INT NOT NULL
);
volání scriptu: <a href="download.php?get=soubor.zip">soubor.zip</a>
*/
$FILES_DIR = "prog/"; // složka se soubory
$MYSQL_USER = "root";
$MYSQL_PASS = "heslo";
$MYSQL_HOST = "localhost";
$MYSQL_DB = "db";
$cnt_sql = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS);
@mysql_select_db($MYSQL_DB, $cnt_sql);
if(isset($_GET['get'])) {
$file = urlencode($_GET['get']);
if(empty($file)) {
echo "Soubor nebyl specifikován";
exit;
}
if(strpos($file, "..") !== FALSE) {
echo "HACK!";
exit;
}
if(strpos($file, "://") !== FALSE) {
echo "Špatný soubor";
exit;
}
$cookie = urlencode(str_replace(".", "_", $file));
$query = "SELECT * FROM count WHERE file = '".$file."'";
$result = mysql_query($query, $cnt_sql);
if(!$result) {
echo mysql_error();
exit;
}
if(mysql_num_rows($result) == 0) {
$query = "INSERT INTO count VALUES('".$file."', 1)";
$result = mysql_query($query, $cnt_sql);
setcookie("" . $cookie, "set", time() + 60*60*24*365);
} else {
if(!isset($_COOKIE['' . $cookie])) {
$query = "UPDATE count SET count = count + 1 WHERE file = '".$file."'";
$result = mysql_query($query);
setcookie("". $cookie, "set", time() + 60*60*24*365);
}
}
header("Location: " . $FILES_DIR . $file);
}
function showCount($fileID) // funkce pro výpis
{
global $cnt_sql;
$query = "SELECT count FROM count WHERE file = '".$fileID."'";
$result = mysql_query($query, $cnt_sql);
if(mysql_num_rows($result) == 0) {
return 0;
} else {
$count = mysql_fetch_row($result);
return $count[0];
}
}
?>
stačí si to upravit aby to místo přičítání počtu stažení zapsalo datum a čas stažení... |
||
| jan.rok Profil * |
#5 · Zasláno: 5. 9. 2011, 21:15:49
ninja:
vzhledem k mým znalostem bych se asi vydal druhou cestou - skript, který provede zápis. Ovšem tápu, jak následně poslat na výstup PDF. |
||
| jan.rok Profil * |
#6 · Zasláno: 5. 9. 2011, 21:21:02
ninja, Sir Tom:
Přesnějí: používám k přesměrování header("location:soubor.pdf"); ale dostávám chybovou hlášku: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\scripts\rotuj.php:45) in C:\xampp\htdocs\demo\scripts\ukaz_file.php on line 3 O této chybě je toho na webu spousta, ale myslím, že je špatně to, že posílám zase další hlavičku. Z toho nevím, jak ven. |
||
| pcmanik Profil |
#7 · Zasláno: 5. 9. 2011, 21:30:41
jan.rok:
Hlaviciek mozes poslat kolko chces, ale predtym nemoze byt ziadny znak, ani len medzera. |
||
| jan.rok Profil * |
#8 · Zasláno: 5. 9. 2011, 21:35:36
pcmanik:
Jak mám tedy rozumět třeba tomuto příkladu? <!--Stránka index.php--> <html> Zadejte heslo: <FORM action="index.php" method="POST"> <INPUT type="password" name="heslo"> </FORM> <? if($_POST["heslo"]=="Tajné heslo") header("location:Tajne.php"); else: echo "Špatné heslo!"; endif; ?> Vždyť zde přece před hlavičkou jde na výstup celý formulář? |
||
| her-ur Profil * |
#9 · Zasláno: 5. 9. 2011, 22:11:39
Prohoď to, ten if dej úplně nahoru, až pak ten form.
|
||
| jan.rok Profil * |
#10 · Zasláno: 6. 9. 2011, 12:35:52
Nakonec jsem použil pro otvírání/stahování PDF souboru toto:
<?php $pdfName='soubor.pdf'; $file = $pdfName; $path = "../cesta/".$pdfName; $fr = fopen($path, 'r'); $filedata = fread($fr, filesize($path)); fclose($fr); header ("'Content-Length: " . filesize ( $path ) ); header("Content-type: application/pdf"); header("Content-disposition: attachment; filename=$file"); readfile($path); ?> Stáhne se soubor správné velikosti, ale Acrobat nahlásí, že je poškozený. Originál uložený na webu otevřít jde. |
||
| pcmanik Profil |
#11 · Zasláno: 6. 9. 2011, 12:47:41 · Upravil/a: pcmanik
jan.rok:
Citujem z dokumentacie, vidis tam rozdiel? A este hned pri pravej hlavicke mas jeden znak naviac. <?php
header('Content-Disposition: attachment; filename='.basename($file));
?>A pre oznacovanie kodu pouzivaj tlacitko. |
||
| jan.rok Profil * |
#12 · Zasláno: 6. 9. 2011, 13:01:17
pcmanik:
Rozumím a díky. Zdá se, že tohle už funguje, teď mi ještě zbývá vyřešit záznam o stažení. |
||
| Michel Profil |
#13 · Zasláno: 7. 9. 2011, 09:12:37
jan.rok:
„záznam o stažení“ Počítání stažení si vložíž před "header" a ten skriptík vložíš mezi funkce ob_start(); a ob_end_flush();. |
||
|
Časová prodleva: 14 let
|
|||
0