【发布时间】:2013-01-28 14:58:43
【问题描述】:
我正在尝试创建一个多页调查,每次他们进入下一页时都会保存该调查。如果他们随后离开并回到起点,所有信息都会自动填充到字段中。
首先我选择所有之前保存的数据:
$survey = $_GET['survey'];
$query = "SELECT * FROM data WHERE id='{$survey}'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
然后我使用循环来获取页面上的所有问题,如果信息存在于 $row 数组中,则自动填充信息。
$query = "SELECT * FROM questions WHERE id in (1,2,3)";
$result = mysql_query($query);
while ($items = mysql_fetch_array($result)){
if($items['type'] == "text"){
$value = $items['name']; ?>
<p><?php echo $items['question']; ?> <input type="text" id="<?php echo $items['name']; ?>" name="<?php echo $items['name']; ?>" value="<?php echo $row['{$value}']; ?>" /></p>
<?php }
}
表格示例:
问题
id、类型、名称、问题
1,text,first_name,你的名字是什么?
2,text,last_name, 你姓什么?
数据
id,first_name,last_name
1,约翰,多伊
似乎一切正常,除了:
value="<?php echo $row['{$value}']; ?>"
提前致谢,
【问题讨论】:
-
很好SQL injection hole。享受您的服务器 pwn3d。
-
您忘记告诉我们问题所在。幸运的是,在这种情况下,它恰好可以被专家识别。你在 PHP 手册的哪一部分看到写了
$row['{$value}']之类的东西? -
到不间断时间旅行:php.net/manual/en/language.types.array.php 数组注意事项 为什么 $foo[bar] 错误?始终在字符串文字数组索引周围使用引号。例如,$foo['bar'] 是正确的,而 $foo[bar] 不是。但为什么?在旧脚本中经常会遇到这种语法。
-
致 Marc B ...如果没有提交和更新/插入,服务器将如何成为“pwn3d”?显然我还没有发布实际代码。 - 并且回复:之前的评论...只是继续阅读“不要引用常量或变量的键,因为这会阻止 PHP 解释它们。” :(
-
@JoeKimberger
"SELECT * FROM data WHERE id='{$survey}'"其中$survey直接从$_GET 读取。如果 `$survey="1'; DROP TABLES;"; ?