【问题标题】:How can I display specific data from a MySQL database? (fetching user's email) [closed]如何显示 MySQL 数据库中的特定数据? (获取用户的电子邮件)[关闭]
【发布时间】:2019-06-17 15:57:53
【问题描述】:

我已经用我的帐户页面创建了一个注册系统。

我可以在其中显示名称和密码,但登录后无法显示电子邮件,因为我必须从 MySQL 数据库中获取它,因为用户在登录时没有输入他的电子邮件。

代码没有错误,但没有显示电子邮件。

这是server.php登录代码:

// LOGIN USER 
if (isset($_POST['login_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password = mysqli_real_escape_string($db, $_POST['password']);

  if (empty($username)) {
   array_push($errors, "Username is required");
  }
  if (empty($password)) {
    array_push($errors, "Password is required");
  }

  if (count($errors) == 0) {
    $password = base64_encode($password);
    $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    $results = mysqli_query($db, $query);
    if (mysqli_num_rows($results) == 1) {
      $_SESSION['username'] = $username;

//Here is the code with problem

      $query = "SELECT email FROM users WHERE username='$username' AND password=''$password";

      $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $_SESSION['email'] = $row["email"];
    }
    }

//Here it ends

      $_SESSION['password'] = $password;
      $_SESSION['success'] = "You are now logged in";
      if ($_SESSION['page'] == "account.php"){
          header('location: account.php');
      }
      else{
        header('location: index.php');
      }
    }else {
        array_push($errors, "Wrong username/password combination");
   }
  }
}

【问题讨论】:

  • 这是一个错误WHERE username='$username' AND password=''$password";
  • 请不要自己滚动密码哈希,特别是base64_encode() PHP提供password_hash()password_verify()请使用它们。
  • 导致问题的查询实际上并不需要存在。您在上一个查询中执行了SELECT *,因此您在上一个查询的结果集中已经有了email。您只需$row = mysql_fetch_assoc($result);
  • 我不知道任何 2 路散列,所以我使用 base64_encode 和 base64_decode 进行加密
  • 正如我所说我是一个初学者,所以我不知道足够的 php 来使用准备好的参数化语句

标签: php mysql database registration account


【解决方案1】:

登录成功后,您应该会收到您的电子邮件。

$password = base64_encode($password);
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$results = mysqli_query($db, $query);

if (mysqli_num_rows($results) == 1) {
     $row = mysqli_fetch_assoc($result);
     $_SESSION['username'] = $username;
     $_SESSION['email'] = $row['email'];
}

【讨论】:

    【解决方案2】:

    您在第二次查询中有错误,您没有正确引用密码。 也就是说,您根本不需要第二个查询,因为电子邮件字段已经在第一个结果中。你知道它只有一行,因为你检查了mysqli_num_rows($results) == 1

    if (count($errors) == 0) {
        $password = base64_encode($password);
        $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
        $results = mysqli_query($db, $query);
        if (mysqli_num_rows($results) == 1) {
            $user_data = mysqli_fetch_assoc($results);
            $_SESSION['username'] = $username;
            $_SESSION['email'] = $user_data['email'];           
            $_SESSION['password'] = $password;
            $_SESSION['success'] = "You are now logged in";
            if ($_SESSION['page'] == "account.php"){
                header('location: account.php');
            }
            else{
                header('location: index.php');
            }
        }else {
            array_push($errors, "Wrong username/password combination");
        }
    }
    

    最后一点,请记住 base64 不是存储密码的理想函数,使用一些散列函数可能是个好主意。

    【讨论】:

    • 仍然显示错误 - 解析错误:语法错误,第 99 行 /home/vol14_6/epizy.com/epiz_23929862/htdocs/reg_test/server.php 中的文件意外结束
    • 这是另一个错误,请仔细检查所有花括号和分号,因为它们是导致该错误的最常见原因
    猜你喜欢
    • 2022-07-25
    • 2012-02-09
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多