【问题标题】:Php and ajax compare issuephp和ajax比较问题
【发布时间】: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'

如果我以newold 的形式发送数据,脚本将按预期工作和输出。 如果发布的数据既不是新的也不是旧的,而是全部,它会失败并且不会显示任何错误或响应任何回复(我也通过开发工具进行了监控)。

所以,我尝试了这个:

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 是的,虽然我个人总是使用准备好的声明。

标签: php jquery ajax mysqli


【解决方案1】:

这句话很奇怪:

if ($_POST['info-type'] == $a || $b) {

你可能打算:

if ($_POST['info-type'] === $a || $_POST['info-type'] === $b) {

另外,在这种情况下=== 很好,因为两个变量的类型都是string

如果$btruethy(确实如此),

$_POST['info-type'] == $a || $b 将始终为 true。

【讨论】:

  • $_POST['info-type'] == $a xor $b 这也有什么问题吗?
  • 是的,这也行不通。另一种可行的方法是:in_array($_POST['info-type'], array($a, $b))
  • 但我刚刚尝试过,当我发布所有内容时它似乎可以工作。那为什么会这样呢?
  • 它不应该工作。您确定您的测试正确吗?
  • 堆栈溢出应该真的允许接受多个答案。
【解决方案2】:

您需要将$_POST['info-type']$a$b 进行比较:

if ($_POST['info-type'] == $a || $_POST['info-type'] == $b)

你所拥有的问题是$_POST['info-type'] == $a || $b 判断$_POST['info-type'] == $a 是否为真,或者$b 是否为真。

由于$b 为真(它是非空字符串),if 条件将始终为真。


如果$_POST['info-type']只能是allnewold,那么下面的会更优雅:

if ($_POST['info-type'] == 'all')
{
    $query = "SELECT * FROM `tld` ";
}
else // info type will be old or new
{
    $info = $_POST['info-type'];
    $query = "SELECT * FROM `tld` WHERE type = '".$info."'";
} 

【讨论】:

  • $_POST['info-type'] == $a xor $b 这也有什么问题吗?
  • 但是为什么有人说xor 工作时有问题呢?如果 $a 或 $b 为 TRUE,则文档说 Xor TRUE,但不能同时为两者。既然它只能是你所说的其中之一,那么它只能是一个,当然,人们错了吗?
  • @AshleyBrown 问题是 xor 返回一个布尔值而不是字符串,因此将它与您的 POST 值(如果您使用括号......)进行比较没有多大意义( xor-ing 两个不同的字符串总是会返回 false 顺便说一句)。另外,看一下 php 的运算符优先级,你会 xor-ing $_POST['info-type'] == $a$b 这也没有多大意义。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多