如果条件,PHP回应不工作

时间:2014-06-29 07:55:55

标签: php

我不知道出了什么问题,但有以下几点。

“如果”条件回声不起作用。谁能告诉我如何解决这个问题?

    $select_query = mysql_query(some query);
    $fetch_pass = mysql_fetch_array($select_query);
    $getpass = $fetch_pass['field_value'];
    echo $getpass; //Here it is working
    if($_POST['userpass'] == $getpass)
    {
        echo $getpass; // Here it is working
        $select_storename = mysql_query("Some Query");
        $fetch_storename = mysql_fetch_array($select_storename);
        $getstorename = $fetch_storename['field_value'];
echo $getpass; // Here if $getstorename has output then getpass is working else it is not working
            $select_brandname = mysql_query("Some Query"); // This query is never executing
            $fetch_brandname = mysql_fetch_array($select_brandname);  // This is never working
            $getbrandname = $fetch_brandname['field_value'];  // This is never working
echo $gettime; // Here it is not working
// None of these if conditions are working.
                if($getstorename != null) {
                    header("location:http://localhost/stores/");
                }
                if($getbrandname != null) {
                    header("location:http://localhost/brands/");
                }               
    }

这个概念是$select_query将获取密码,在第一个“if”条件下我们检查密码是正确还是错误,然后有2个查询$select_storename和{{1} },只有第一个工作。如果我将订单更改为$select_brandname,那么只有它有效,第一个查询正在运行,第二个查询无效,“if”条件也不起作用。

更新1

我认为这是由于查询失败,我如何忽略并绕过失败的查询?

1 个答案:

答案 0 :(得分:2)

您的代码存在以下问题:

  • 不测试mysql_query()的返回值。查询可能会失败。
  • 不测试mysql_fetch_array()的返回值。查询可能成功,并返回0行。
  • 标题前的输出。除非您启用了输出缓冲,否则必须在脚本生成任何输出之前将header()调用。 (依靠输出缓冲不是一种强大的设计。)

另请注意,不推荐使用mysql扩展(并且可能未维护)。您应该使用mysqlipdo

您的代码应该像这样

$select_query = mysql_query(some query);
if (!$select_query) {
  /* Query failed. Display error page. */
  exit;
}

$fetch_pass = mysql_fetch_array($select_query);
if (!count ($fetch_pass)) {
  /* Password incorrect. Display error page. */
  exit;
}
$getpass = $fetch_pass['field_value'];
mysql_free_result ($fetch_pass);

if($_POST['userpass'] !== $getpass) {
  /* Password incorrect. Display error page. */
  exit;
}

$getstorename = null;
$getbrandname = null;

$select_storename = mysql_query ("Some Query");
if ($select_storename) {
  $fetch_storename = mysql_fetch_array ($select_storename);
  if (count ($fetch_storename)) {
    $getstorename = $fetch_storename['field_value'];
  }
  mysql_free_result ($select_storename);
}
$select_brandname = mysql_query ("Some Query");
if ($select_brandname) {
  $fetch_brandname = mysql_fetch_array ($select_brandname);
  if (count ($fetch_brandname)) {
    $getbrandname = $fetch_brandname['field_value'];
  }
  mysql_free_result ($select_brandname);
}

if ($getstorename != null) {
  header("location:http://localhost/stores/");
} else if ($getbrandname != null) {
  header ("location:http://localhost/brands/");
} else {
  /* None found. Display error page or some default page. */
}

关于代码的一些注释:

  • 该代码使用提前退出,有些人觉得不舒服。另一种方法是使用复杂的if...else梯子。
  • 显示错误页面后代码退出。如果这是在函数内部,则返回可能更合适。
  • 可以使代码更容易阅读,您可以在适当的位置创建单独的错误页面并require()
  • 在我看来,当你完成数据库资源时,你应该总是调用mysql_free_result(),即使之后PHP会被清除。如果不出意外,它往往鼓励您编写更清晰的代码。
  • ,您绝不应以明文形式存储密码。使用password_hash()或类似密码加密密码,并仅存储和比较加密密码。有关详细信息,请参阅Password FAQ