【问题标题】:PHP Invalid password even if valid [closed]PHP密码无效,即使有效[关闭]
【发布时间】:2014-10-25 12:49:59
【问题描述】:

我正在尝试使用 php、mysql 制作登录系统,但即使我输入了正确的用户名和密码组合,网站也会告诉我它们是无效的。

有什么问题?

我的代码:

     <?php
    session_start();
      $error_msg = "";

      if (!isset($_SESSION['user_id'])) {
        if (isset($_POST['submit'])) {
          require_once('config.php');
          $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

          $user_username = mysqli_real_escape_string($dbc, trim($_POST['username']));
          $user_password = mysqli_real_escape_string($dbc, trim($_POST['password']));

          if (!empty($user_username) && !empty($user_password)) {
            $query = "SELECT user_id, username FROM users WHERE username = '$user_username' AND password = SHA('$user_password')";
            $data = mysqli_query($dbc, $query);

            if (mysqli_num_rows($data) == 1) {
              $row = mysqli_fetch_array($data);
              $_SESSION['user_id'] = $row['user_id'];
              $_SESSION['username'] = $row['username'];

              setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30));    // expires in 30 days
              setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));  // expires in 30 days
              $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/loggedin.php';
              header('Location: ' . $home_url);     
            }
            else {
              $error_msg = 'Invalid username and/or password.';  
            }
          }
          else {
            $error_msg = 'No empty fields allowed!';
          }
        }
      }

        echo '<a href="register.php">Click to register</a>';   
    ?>
<HTML>
<BODY>
      <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <?php
        if (empty($_SESSION['user_id'])) {
        echo '<p>' . $error_msg . '</p>';
        ?>
        <fieldset>
          <legend>Login</legend>
          <label for="username"><font color="black">Username:</font></label>
          <input type="text" name="username" value="<?php if (!empty($user_username)) echo $user_username; ?>" /><br />
          <label for="password"><font color="black">Password:</font></label>
          <input type="password" name="password" /><br />
        </fieldset>
        <input type="submit" value="Login" name="submit" />
      </form>


    <?php
      }
      else {
        // Successful
        echo('');
      }
    ?>  
    </BODY>
    </HTML>

您可能想知道我在 config.php 中是否有正确的数据。 是的,我有正确的连接用户名、主机名、密码和数据库名,因为我使用相同的文件进行注册,而且效果很好。

谢谢, 亨里克

【问题讨论】:

  • 尝试echo $query; 并直接在phpMyAdminmysql 中运行该打印查询,看看它是否按应有的方式返回用户。
  • 注册时如何将密码保存到数据库中?数据库字段的大小是否足够?在您的查询中,您使用 MySQL 的 SHA 函数。
  • registration: $query = "INSERT INTO users (username, password, email, activation, ip) VALUES ('$username', SHA('$password'), '$email', '$激活', '$ip')"; mysqli_query($dbc, $query);
  • mysql中的password字段类型和长度是什么?
  • 我尝试在 phpMyAdmin 中运行查询它返回 0。

标签: php mysql login passwords


【解决方案1】:

您将需要至少 40 个 CHAR/VARCHAR 字段的密码才能使用 mysql SHA 函数保存它。 您也可以直接在 mysql 编辑器中检查 SELECT SHA('password') 以查看 db 中保存的值是否符合您的预期。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2020-08-29
    • 1970-01-01
    • 2013-10-27
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多