用户登录不工作,查询问题(PDO、MySQL、PHP)
我对即将弃用的MySQL进行了疯狂的更改,我现在开始使用我的用户登录系统,在更改查询等之后,我无法登录该系统。 这是我到目前为止得到的 因为根本没有给出任何错误,所以它不会将我重定向到index.php login.php->登录后重定向到index.php 我当前的登录代码可能有什么问题用户登录不工作,查询问题(PDO、MySQL、PHP),php,mysql,pdo,Php,Mysql,Pdo,我对即将弃用的MySQL进行了疯狂的更改,我现在开始使用我的用户登录系统,在更改查询等之后,我无法登录该系统。 这是我到目前为止得到的 因为根本没有给出任何错误,所以它不会将我重定向到index.php login.php->登录后重定向到index.php 我当前的登录代码可能有什么问题 包括/db.php try { $db = new PDO("mysql:host=127.0.0.1; dbname=timeline_database", 'root', ''); } ca
- 包括/db.php
try { $db = new PDO("mysql:host=127.0.0.1; dbname=timeline_database", 'root', ''); } catch( PDOException $e ) { echo $e->getMessage(); }
- 包括/Wall_Updates.php
}class Wall_Updates { private $db; public function __construct ( $db ){ $this->db = $db; } public function User_Login($_iUsername,$_iPassword) { $md5_password = md5($_iPassword); $sth = $this->db->prepare("SELECT _iD FROM users WHERE _iUsername = ? AND _iPassword = ? AND _iStatus = 1"); $sth->execute(array($_iUsername, $md5_password)); if ($sth->rowCount() == 1) { $row = $sth->fetch(PDO::FETCH_ASSOC); return $row['_iD']; } else { return false; } } public function User_Registration($_iPassword,$_iEmail,$_iNickname,$_iUsername) { $md5_password = md5($_iPassword); $sth = $this->db->prepare("SELECT _iD FROM users WHERE _iEmail = ? "); $sth->execute(array($_iEmail)); if ($sth->rowCount() == 0) { $sth1 = $db->prepare("INSERT INTO users (_iPassword,_iEmail,_iNickname,_iUsername) VALUES ( :_iPassword, :_iEmail, :_iNickname, :_iUsername "); $sth1->execute(array(':_iPassword' => $_iPassword, ':_iEmail' => $_iEmail, ':_iNickname' => $_iNickname, ':_iUsername' => $_iUsername )); $sth3 = $db->prepare("SELECT _iD FROM users where _iUsername = ?"); $sth3->execute(array($_iUsername)); $sth2 = $db->prepare("INSERT INTO friends (friend_one,friend_two,role) VALUES ( :rowiD, :_rowiD, :me "); $sth2->execute(array(':rowiD' => $row['_iD'], ':rowiD' => $row['_iD'], ':me' => me )); $row = $sth1->fetch(PDO::FETCH_ASSOC); return $row['_iD'] ; } else { return false; } }
- login.php
include_once 'includes/db.php'; include_once 'includes/Wall_Updates.php'; error_reporting( E_ALL ); session_start(); if(!empty($_SESSION['_iD'])) { header("location:index.php"); } $Wall = new Wall_Updates( $db ); $login_error = ''; if(!empty($_POST['_iUsername']) && !empty($_POST['_iPassword'])){ if ( strlen($_POST['_iUsername'])>0 && strlen($_POST['_iPassword'])>0) { $login = $Wall->User_Login( $_POST['_iUsername'],$_POST['_iPassword'] ); if( $login ){ $_SESSION['_iD'] = $login; header("location: index.php"); } else { $login_error="<div class='error' style='margin-top: -2px; margin-bottom: -8px;' ><span class='error'>Email or Password is invalid</span></div><br>"; } } } html begins <?php echo $login_error; ?></div> <form method="post" action="" name="login"> <input class="_iUsernameClass" type="text" placeholder="_iUsername" name="Username" id="login._iEmail"> <input class="_iPasswordClass" type="password" placeholder="_iPassword" name="Password" id="login._iPassword"> <button class="primary" type="submit"></button> </form> html ends
include_once'includes/db.php'; include_once“includes/Wall_Updates.php”; 错误报告(E_全部); 会话_start(); if(!empty($会话[''iD'])){ 标题(“location:index.php”); } $Wall=新墙更新($db); $login_error=''; 如果(!empty($\u POST[''u iUsername'])和&!empty($\u POST[''u iPassword'])){ 如果(strlen($邮政[''iUsername'])>0和&strlen($邮政[''iPassword'])>0){ $login=$Wall->User\u login($\u POST[''iUsername'],$\u POST[''iPassword']); 如果($login){ $\会话[''iD']=$登录; 标题(“location:index.php”); }否则{ $login_error=“电子邮件或密码无效
”; } } } html开始 html结尾
- 我看到的第一件事是你需要使用。尝试在查询生成中遵循此结构:
$sth = $this->db->prepare("
SELECT _iD
FROM users
WHERE _iUsername = :username
AND _iPassword = :password");
$sth->bindValue(":username", $_iUsername, PDO::PARAM_STR);
$sth->bindValue(":password", $md5_password, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC); // returns id or false
要记住的只是一个旁注:
fetch(PDO::FETCH_ASSOC)
仅返回一条记录,并且:
fetchAll(PDO::FETCH_ASSOC)
返回所有(多个)记录
顺便说一句,由于时间限制,我没有检查您的所有代码。这只是我遇到的第一个问题。我看到的第一件事是您需要使用。尝试在查询生成中遵循此结构:
$sth = $this->db->prepare("
SELECT _iD
FROM users
WHERE _iUsername = :username
AND _iPassword = :password");
$sth->bindValue(":username", $_iUsername, PDO::PARAM_STR);
$sth->bindValue(":password", $md5_password, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC); // returns id or false
要记住的只是一个旁注:
fetch(PDO::FETCH_ASSOC)
仅返回一条记录,并且:
fetchAll(PDO::FETCH_ASSOC)
返回所有(多个)记录
顺便说一句,由于时间限制,我没有检查您的所有代码。这只是我遇到的第一个问题。现在我了解了bindValue的用法,但何时才是使用问号(如“_iUsername=?”)的正确时间。不要将问号用作占位符。使用从bindValue()传递的冒号(:)和字符串组合。e、 g.
:用户名
,或者您可以根据需要标记它。。。e、 g.:_iUsername
在$sth->bindValue中(“:_iUsername”,$_iUsername,PDO::PARAM_STR)代码>遵循bindValue()文档页面上的示例:-可以使用数据类型参数(例如PDO::PARAM_STR、PDO::PARAM_INT、PDO::PARAM_BOOL)为参数绑定每个值的显式数据类型。请参阅PDO的预定义常量部分:现在我了解了bindValue的用法,但何时才是使用问号(如“_iUsername=?”)的正确时间。您不能将问号用作占位符。使用从bindValue()传递的冒号(:)和字符串组合。e、 g.:用户名
,或者您可以根据需要标记它。。。e、 g.:_iUsername
在$sth->bindValue中(“:_iUsername”,$_iUsername,PDO::PARAM_STR)代码>遵循bindValue()文档页面上的示例:-可以使用数据类型参数(例如PDO::PARAM_STR、PDO::PARAM_INT、PDO::PARAM_BOOL)为参数绑定每个值的显式数据类型。请参见PDO的预定义常量部分: