【发布时间】:2014-08-20 16:18:18
【问题描述】:
我正在 ajaxing 到这个 php 文件。
$a = 'old';
$b = 'new';
if ($_POST['info-type'] == $a || $b)
{
$info = $_POST['info-type'];
$query = "SELECT * FROM `tld` WHERE type = '".$var."'";
}
$query = "SELECT * FROM `tld` ";
$result = mysqli_query($link,$query);
while($row = mysqli_fetch_assoc($result))
{
echo '<div>'.$row['something'].'</div>';
}
发布的数据是'all''new' 或'old'。
如果我以new 或old 的形式发送数据,脚本将按预期工作和输出。
如果发布的数据既不是新的也不是旧的,而是全部,它会失败并且不会显示任何错误或响应任何回复(我也通过开发工具进行了监控)。
所以,我尝试了这个:
if ($_POST['info-type'] == $a || $b)
{
$info = $_POST['info-type'];
$var = "SELECT * FROM `tld` WHERE type = '".$var."'";
} elseif ($_POST['info-type'] == 'all')
{
$query = "SELECT * FROM `tld` ";
}
但脚本仍然失败。如果我完全删除IF 语句并使用没有WHERE 子句的查询,就像在elseif 之后一样,它可以工作吗?
【问题讨论】:
-
答案泛滥(在 2 秒内我看到 3 个答案)!
-
这如何工作?您正在覆盖您的
$query变量,因此永远不会使用POST变量。 -
@jeroen +1 指出 SQL 注入错误。
-
@AshleyBrown 不,通常(没有白名单...)您需要
mysqli_real_escape_string()或准备好的声明。 -
@AshleyBrown 是的,虽然我个人总是使用准备好的声明。