【问题标题】:my query doesn't work [closed]我的查询不起作用[关闭]
【发布时间】:2016-02-08 10:16:00
【问题描述】:

我正在制作一个连接到数据库的登录脚本,但我得到了一个

"未定义变量:dbUsername in F:\xamp\register\login\functions.php 第 21 行"

我进一步检查了,发现我的查询不起作用,你们能帮帮我吗?

if (isset($_POST['sub'])) 
{


 include_once("Connect.php");

    $username = strip_tags($_POST['username']);
    $password = strip_tags($_POST['password']);

      $sql = "SELECT id, username, password FROM login WHERE username = '$username' LIMIT 1";

      $query = mysqli_query($dbcon, $sql);

      if ($query) {
        $row = mysqli_fetch_row($query);
        $userId = $row[0];
        $dbUsername = $row[1];
        $dbPassword = $row[2];
      }
      if ($username == $dbUsername && $password == $dbPassword) {
        $_SESSION['username'] = $username;
        $_SESSION['id'] = $userId;
        header('location: login.php');
      } else {
        echo "incorrect username or password.";

      }
    }

【问题讨论】:

  • $dbUsername 定义在哪里?
  • 这个查询在概念上是错误的。
  • 由于某种原因我无法发布。
  • 因为它的查询不是 qeury ... :p
  • 请阅读*.com/questions/1054022/… 和相关帖子。永远不要将密码直接存储在数据库中。

标签: php database


【解决方案1】:

您需要在if($query) 中使用您的条件,但我认为没有必要重新检查,因为您已经在查询WHERE username = $username. 中检查所以我将您的代码修改为:

修改后的代码:

  $sql = "SELECT id, username, password FROM login WHERE username = '$username' LIMIT 1";
  $query = mysqli_query($dbcon, $sql);
  if (!$query) {
    die(mysqli_error($dbcon));
  }
  else
  {
    $count = mysqli_num_rows($query); // check total no of rows

    if ($count > 0) 
    {
        session_start(); // start session
        $row = mysqli_fetch_row($query);
        $userId = $row[0]; // get userid from database
        $dbUsername = $row[1]; // get username from database
        $_SESSION['username'] = $dbUsername;
        $_SESSION['id'] = intval($userId);
        header('location: login.php');    
        die(); // using die() after header()
    }
    else{
        echo "incorrect username or password."; // if query not return anything print this.
    }  
  }

【讨论】:

  • 谢谢,但它现在不起作用,它说:警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在 F:\xamp\register\login\functions.php 第 14 行
  • @Furkanyavuz:兄弟,这意味着您的查询有误。因为它返回 false.... chk 更新答案... 或使用 $query = mysqli_query($dbcon, $sql) 或 die(mysqli_error($dbcon));会得到错误。
  • @Furkanyavuz 一些调试技巧,。使用print_r($_POST); 和 chk 你得到了什么......其次,在 phpmyadmin 中运行这个查询手册...... SELECT id, username, password FROM login WHERE username = 'your user name' LIMIT 1
  • 我将错误的数据库表链接到我的 $sql。问题已解决,感谢您的帮助:)
  • @Furkanyavuz:很高兴知道它的解决方案,我对你兄弟的建议,提高你的调试技能,它将帮助你。逐行调试,使用 error_reporting.. 等 :)
【解决方案2】:

如果 $query 为 false,则不设置 $dbUsername$dbPassword

在 if 语句之前设置 $dbUsername = null; $dbPassword = null;

将您的 Where-Query 更新为:

"WHERE username = '. $username .'

【讨论】:

    最近更新 更多