根据此question,我有2个表Source
和details
。
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地址的条件。
答案 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'],
));
}
?>
上面代码的一些提示:
答案 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
条件时获取用户会话。