将下载文件的IP地址插入mysql

时间:2016-03-12 18:26:05

标签: php mysql

根据此question,我有2个表Sourcedetails

Source表格如下:

+----+----------+---------------+-----------+
| id | item_name|items_download | category  |
+----+----------+---------------+-----------+
|                                           |
+----+----------+---------------+-----------+

details表格如下:

+------+----------+-----+------+
| name | download | time| ip   |
+------+----------+-----+------+
|                              |
+------+----------+-----+------+

在第一步,我想从Source表中获取数据(实时)并通过此代码放入详细信息表:

$get= "INSERT INTO `details` (`name`,  `download`) SELECT `Source`.`item_name`,`Source`.`items_download` FROM `Source`"

下一步我想获取每个文件的访问者IP地址。

例如,如果有人下载testfile我想要输出此内容:

+----------+---------+--------------+-----------+
|  name    | download |   time      |  ip       |
+----------+----------+-------------+-----------+
| testfile |     32   |download time|192.168.0.0|
+----------+----------+-------------+-----------+
| file2    |     0    |             |           |
+----------+----------+-------------+-----------+

为此,我使用此代码:

$ip = $_SERVER['REMOTE_ADDR'];
$update = "UPDATE details SET  ip = '$ip', dldate = NOW()"

但它发生在所有文件中,所有文件都获得相同的IP和时间。我知道它需要一个条件WHERE,但我不知道应该输入什么作为获取每个下载文件的IP地址的条件。

3 个答案:

答案 0 :(得分:1)

Imho你不需要任何UPDATE查询。每次用户请求文件时,您只需执行INSERT:

<?php
$fileid = $_GET['fileid'];

$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$sql = "SELECT * FROM Source WHERE id=" . (int)$fileid;
foreach ($pdo->query($sql) as $row) {

    $statement = $pdo->prepare("INSERT INTO details (name, download, time, ip) VALUES (?, ?, NOW(), ?)");
    $statement->execute(array(
        $row['item_name'], 
        $row['items_download'],
        $_SERVER['REMOTE_ADDR'],
    ));   

}
?>

上面代码的一些提示:

  • 使用预准备语句 - 永远不要将任何值直接注入SQL字符串。
  • 每次将file_name和items_download插入详细信息表可能毫无用处。您在表格中有这些信息&#34;来源&#34;无论如何。所以通常你只需将Source.id放入你的详细信息表中。

答案 1 :(得分:1)

您应该使用第一个表格视图中的id列,但它会在后面的列中突然消失。

您的id列也应该是您的PRIMARY_KEY AUTO INCREMENT列。然后每一行都有自己唯一的索引ID。 但除此之外,您使用什么来识别用户下载的文件?如果是文件名,那么只需使用:

编辑:在id表中添加details列!

$update = "UPDATE details SET ip = '$ip', dldate = NOW() 
WHERE name = '$fileNameValue' LIMIT 1"

在相关的说明中,您可以使用device = ip = '$ip'的相同速记引用更新多个列,您必须单独指定每个列并插入绝对目标数据(此处,变量)。

如果这是拼写错误,您应该编辑并更新您的问题。

另请参阅Gerfried关于使用准备好的陈述的答案,它们是您应该做这些事情的方式。

答案 2 :(得分:0)

我认为您需要在下载文件并将其添加到WHERE条件时获取用户会话。