我已经尝试了一段时间来使我的loginscript工作,我似乎无法找到问题,或者我只是盲目或者还有其他事情发生在这里。
如果我在表格中输入正确的凭证并不重要,我仍然会得到一个可爱的错误500.
有什么想法吗?
数据库连接功能:
function db_connect() {
如果我移动此列 - >
$server = 'localhost';
$uname = 'root';
$passw = 'password';
$datab = 'database';
/* check connection */
try{
$conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw);
} catch(PDOException $e) {
die( "Connection failed: " . $e->getMessage());
}
< ---
return $conn; /added this as suggested, still returns NULL.
}
登录文件:
include('../lib/functions.php'); //This is correct!
db_connect();
< - HERE,它有效 - >
之前有一个问题,即我的密码哈希在注册过程中出错,因此password_verify($_POST['password'], $results['passw'])
无效,即使输入正确也始终返回false。
if(!empty($_POST['username']) && !empty($_POST['password'])):
$records = $conn->prepare('SELECT uname,passw FROM users WHERE uname = :user AND passw = :pass');
$records->bindparam(':user', $_POST['username']);
$records->bindparam(':pass', $_POST['password']);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
if(count($results) > 0 && password_verify($_POST['password'], $results['passw']) && $_POST['username'] == $results['uname']) //Also tried removing the &&-->username area incase two and statements were wrong without any luck {
die('It works!');
} else {
die('OR NOT!');
}
endif;
答案 0 :(得分:1)
您的db_connect()
函数在其自己的范围内定义了$conn
。因此,变量$conn
是本地的。在db_connect()
结束后执行$conn
只会消失。
在此功能之外$conn
只是 NULL 。
将$conn
从函数返回到外部作用域:
function db_connect() {
$server = 'localhost';
$uname = 'root';
$passw = 'password';
$datab = 'database';
/* check connection */
try{
$conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw);
} catch(PDOException $e) {
die( "Connection failed: " . $e->getMessage());
}
return $conn; // here
}
在你的剧本中:
include('../lib/functions.php'); //This is correct!
$conn = db_connect();
// other codes