不确定是什么问题,因为该脚本在以前的页面上工作,获取已将user_id分配给当前活动用户的“文件夹”。
我在这一步中尝试做的与以前相同,但不是根据分配给他们的user_id从SQL中获取文件夹信息,而是尝试获取分配了文件夹ID的文件。
以下是示例查询:?o =文件夹& fid = 0ec741fa-e708-4314-83c4-c05966a56110#!/ New_Folder
?o =文件夹正在将folder.php传递给index.php,该文件提供所有内部文件
& fid = 0ec741fa-e708-4314-83c4-c05966a56110 是文件夹ID,而不是实际ID,因为文件夹表ID和FID中有两个字段,这是唯一生成的FID用户创建一个新文件夹,该ID将自动分配为表中的AUTO_INCR +主键。
这是PDO脚本
require ("sql/pdo.php");
// Lets get user's folder information
$query = " SELECT * FROM files WHERE fid = ".$_REQUEST['fid']." ";
try
{
// These two statements run the query against your database table.
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();
?>
<table width="100%">
<?php foreach($rows as $row): ?>
<tr onclick="window.location = 'file.php?fid=<?php echo htmlentities($row['id'], ENT_QUOTES, 'UTF-8')."'">
<td style="width:4%;"><img src="ast/images/fs-directory.png" /></td>
<td style="width:86%;text-align:left;"><?php echo htmlentities($row['name'], ENT_QUOTES, 'UTF-8'); ?></td>
<td style="width:10%;text-align:center;"><?php echo htmlentities($row['privacy'], ENT_QUOTES, 'UTF-8'); ?></td>
</tr>
<?php endforeach; ?>
</table>
没有错误或任何东西被返回,而且erro_log文件中也没有,正如我所说的那样奇怪,因为它适用于文件夹但不适用于文件表。我假设它可能是他们处理数据的方式。为了从文件夹中获取数据,它请求分配给uid(user_id)的任何文件夹,其中术语是一个数值,这里我们使用的是非数值但是随机化的文件夹字符串,这可能是问题的根源,但是它真的不应该。
有关代码可能出错的任何建议吗?
答案 0 :(得分:3)
正如我所看到的,fid
包含字母数字值,而您将其添加到查询中而不是字符串。
另外,我希望您了解代码允许的SQL注入。
因此,最好将直接放置更改为使用预准备语句。在这个标签下面有很多例子。