【问题标题】:i cant access the database我无法访问数据库
【发布时间】:2020-02-12 15:17:31
【问题描述】:

我正在制作一个登录表单,用户的数据在数据库中,但每次我尝试登录时都无法访问,而且我不知道我的 php 代码有什么问题,谁能帮助我解决这个问题 我认为连接没有问题,但我得到的错误是“密码错误”

php 代码

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

  $dbServName = "localhost";
  $dbuser = "root";
  $dbPassword = "";
  $dbname = "formlab2";
  $conn=mysqli_connect($dbServName,$dbuser,$dbPassword,$dbname);

  $email = $_POST['email'];
  $password=$_POST['Password'];

 $sql = "SELECT * FROM users WHERE email=? AND password=?;";
 $stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt,$sql)) {
  echo "error";

}


else{

  mysqli_stmt_bind_param($stmt,"ss",$email,$password);
  mysqli_stmt_execute($stmt);
  $result= mysqli_stmt_get_result($stmt);
  if ($row = mysqli_fetch_assoc($result)) {
    $pswcheck = password_verify($password, $row['password']);
    if ($pswcheck == false) {
      echo "WRONG PASSWORD";
    }
    else if ($pswcheck == true) {
        session_start();
        $_SESSION['userID']= $row ['user_id'];
        header("location: ../wel.php");

    }

  }
           }

         }

【问题讨论】:

  • @Bravo 老实说我是数据库新手,我没明白你的意思
  • @Bravo 我认为连接没有问题,但我得到的错误是“密码错误”
  • 我得到的错误是“密码错误” ...你的意思是密码错误,因为这就是你的代码所做的...我注意到您使用$_POST['email'] 和$_POST['Password'] ...您的表单是提交email 和Password ...还是提交email 和password(这就是为什么我在已删除的评论中要求请参阅客户端代码) - cAsE 很重要:p

标签: javascript php html sql session


【解决方案1】:

为了连接到一个数据库,我使用这个:

<?php
$DB_HOST = 'localhost';
$DB_USER = 'root';
$DB_PASS = 'root';
$DB_NAME = 'name-of-db';
// $DB_PORT = '8889';
$link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
//$link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME, $DB_PORT);
if ($link->connect_error) { 
   die('Connect Error ('.$link->connect_errno.') '.$link->connect_error);
}
$link->set_charset('utf8');

我注意到你隐藏了你的数据库密码,但如果你在 localhost 中工作,它应该只是 root,以防你有别的东西。也为了让您自己更容易,您可以将此代码放在单独的文件中,并且用户可以“包含”或“要求”将代码插入页面。那么您可以轻松地将文件包含在多个页面上。

那么对于登录过程: 所以它不是数据库连接而是登录过程? 尝试在文档顶部添加 session_start。 这是我之前登录的方式,也许对你有帮助:

$sql = 'SELECT id, pwhash FROM tablename WHERE username=?';

            $stmt = $link->prepare( $sql );

            $stmt->bind_param( 's', $un );
            $stmt->execute();
            $stmt->bind_result( $id, $pwhash);
            while ( $stmt->fetch() ) {
            if ( password_verify( $pw, $pwhash ) ) {
                $_SESSION[ 'uid' ] = $id;
                $_SESSION[ 'uname' ] = $un;
}

一些小的差异。我的密码验证中有一个 if 语句。试试看。

【讨论】:

  • 每次我使用电子邮件和保存在数据库中的密码登录时,它都会给我错误的密码@hndvf
  • 我是 stackoverflow 的新手,在这里添加 cmets 太可怕了。我将改为编辑我的原始帖子。 @codiins
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 2015-02-19
  • 1970-01-01
  • 2023-04-04
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多