2013-11-27 136 views
0

奇怪的问题。至少对于我来说。当点击pdf.php的链接时,查询会向mysql db写入某个文档被点击的次数。php文件在浏览器中使用标题显示pdf时运行两次

的问题:除了在DB写“1”的每一次点击的,它写道:“2”。看来,PHP文件运行两次。但为什么?

$file = './'.mysqli_real_escape_string ($con,$_GET[name]).''; 
$filename = mysqli_real_escape_string ($con,$_GET[name]); /* Note: Always use .pdf at the end. */ 
$id = intval($_GET[id]); 
$date = time(); 
$what = mysqli_real_escape_string ($con,$_GET[name]); 

header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="' . $filename . '"'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($file)); 
header('Accept-Ranges: bytes'); 
@readfile($file); 


$sql = "SELECT id,what,person_id,count FROM pdftrack WHERE id = '".$id."' AND what='".$what."'"; 
$ergebnis = mysqli_query($con,$sql); 
$row = mysqli_fetch_assoc($ergebnis); 
if ($row[id] == '') 
    { 
    $sql = "INSERT INTO pdftrack (id,what,date,count) VALUES ('".$id."', '".$what."','".$date."','1')"; 
    mysqli_query($con,$sql);//echo $sql; 
    } 
else 
    { 
    $count = $row[count]+1; 
    $sql="UPDATE pdftrack 
    SET count='".$count."', 
    date2='".$date."' 
    WHERE id='".$row['id']."' 
    "; 
    mysqli_query($con,$sql); 

    } 

更新:感谢您的帮助,但它仍然错误。如果标题部分消失了,它应该像它应该那样工作。所以我认为它与标题部分有关。有任何想法吗?

解决方案:只使用

header('Content-type: application/pdf'); 
@readfile($file); 

不容看到此刻的任何缺点。

+0

你实际上做了什么以尝试自己解决问题?这个信息可以帮助我们更好,更快地帮助你。 – SidOfc

+0

你在pdftrack表中有什么主要的索引?大概你可以把它全部放到单个SQL语句中,使用ON DUPLICATE运算符。 –

+0

根据使用的PDF查看器,PDF可能实际上会被查询两次。你检查过做一个TCP DUMP或简单地检查一些Web访问日志文件? – mkl

回答

0

此外,还有一个问题:Du hast eine falsche语法! Wenn du auf ein assoziatives Array zugreifst(in deinem Fall $ row)dann musst du den Key auch als String deklarieren。 Sprich statt $ row [id] musst du $ row ['id'] verwenden。 Dieser Fehler ist z.B. bei deiner ersten if-Abfrage vorhanden。 Desweiteren bei else $ row [count] durch $ row ['count'] ersetzen。

+0

您的意思是使用$ row ['id']而不是$ row [id],我同意这肯定是一种更好的风格,但它不是强制性的。 PHP对待它只是两种方式,所以无论如何它不是这个错误的原因。 –

+0

之前未知。对于我来说,数组键必须被包装在'或者'中,因为没有它将是一个常量。 – julesdude

+1

你是对的,它会变得更深)如果它被定义为这样一个名称,它将是一个常量,否则它将被处理像一个字符串。 –

相关问题