使用php和MYSQL验证用户名和密码

使用php和MYSQL验证用户名和密码,php,pdo,Php,Pdo,我正在使用一个基本的PHP创建帐户和登录模板,我在网上找到的。但是,创建帐户后,每次尝试登录时,我都会收到错误的用户名/密码。 我是PHP新手,一直在努力找出错误所在。所以我想知道这里是否有人能帮忙 public function __construct( $data = array() ) { if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['user

我正在使用一个基本的PHP创建帐户和登录模板,我在网上找到的。但是,创建帐户后,每次尝试登录时,我都会收到错误的用户名/密码。 我是PHP新手,一直在努力找出错误所在。所以我想知道这里是否有人能帮忙

 public function __construct( $data = array() ) {
         if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['username'] ) );
         if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
     }

     public function storeFormValues( $params ) {
        //store the parameters
        $this->__construct( $params ); 
     }

     public function userLogin() {
         $success = false;
         try{
            $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $sql = "SELECT * FROM user_accounts WHERE username = :username AND password = :password LIMIT 1";
            $stmt = $con->prepare( $sql );
            $stmt->bindValue( ":username", $this->username, PDO::PARAM_STR );
            $stmt->bindValue( ":password", hash("whirlpool", $this->password . $this->salt), PDO::PARAM_STR );
            $stmt->execute();

            $valid = $stmt->fetchColumn();

            if( $valid ) {
                $success = true;
            }

            $con = null;
            return $success;
         }catch (PDOException $e) {
             echo $e->getMessage();
             return $success;
         }
     }

     public function register() {
        $correct = false;
            try {
                $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
                $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
                $sql = "INSERT INTO user_accounts(username, password) VALUES(:username, :password)";

                $stmt = $con->prepare( $sql );
                $stmt->bindValue( ":username", $this->username, PDO::PARAM_STR );
                $stmt->bindValue( ":password", hash("whirlpool", $this->password . $this->salt), PDO::PARAM_STR );
                $stmt->execute();
                return "Registration Successful <br/> <a href='index.php'>Login Now</a>";
            }catch( PDOException $e ) {
                return $e->getMessage();
            }
     }

 }

?>
public function\u构造($data=array()){
if(isset($data['username'))$this->username=stripslashes(strip_标签($data['username'));
if(isset($data['password'])$this->password=stripslashes(strip_标签($data['password']);
}
公共函数storeFormValues($params){
//存储参数
$this->\u构造($params);
}
公共函数userLogin(){
$success=false;
试一试{
$con=新的PDO(DB_DSN、DB_用户名、DB_密码);
$con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$sql=“从用户名=:用户名和密码=:密码限制1”的用户帐户中选择*;
$stmt=$con->prepare($sql);
$stmt->bindValue(“:username”,$this->username,PDO::PARAM_STR);
$stmt->bindValue(“:password”,散列(“whirlpool”,$this->password.$this->salt),PDO::PARAM_STR);
$stmt->execute();
$valid=$stmt->fetchColumn();
如果($有效){
$success=true;
}
$con=null;
返回$success;
}捕获(PDO$e){
echo$e->getMessage();
返回$success;
}
}
公共职能登记册(){
$correct=false;
试一试{
$con=新的PDO(DB_DSN、DB_用户名、DB_密码);
$con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$sql=“插入用户帐户(用户名、密码)值(:用户名、密码)”;
$stmt=$con->prepare($sql);
$stmt->bindValue(“:username”,$this->username,PDO::PARAM_STR);
$stmt->bindValue(“:password”,散列(“whirlpool”,$this->password.$this->salt),PDO::PARAM_STR);
$stmt->execute();
返回“注册成功
”; }捕获(PDO$e){ 返回$e->getMessage(); } } } ?>
您可以通过回显保存在db中的密码和您尝试登录的用户的密码来进行检查。您可以从var\u dump($data)在\u构造函数中提取$data吗;我得到以下输出:数组(0){}数组(3){[“用户名”]=>string(12)“测试用户名”[“密码”]=>string(12)“测试密码”[“登录”]=>string(9)“让我登录”}不正确的用户名/密码从哪里获得
$this->salt
?如果它是随机的-它永远不会工作;)如果它是常数。。它没有那么安全。(对我的格式表示歉意,我是新来的网站)@kocik我从以下网站获得了salt:[code]类用户{public$username=null;public$password=null;public$salt=“zo4ru5z1yykjaasy0pt6eug7bydlehpanluxawulqu1elzhv0ri7em6irpx5w”[/code]