我正在尝试做什么
我创建了一个单页成员'登录表单区域。
登录后,用户应该看到的唯一内容(在此阶段)是一个注销按钮。
出了什么问题
只要数据库中存在匹配项(例如用户名正确,或者用户名和密码都正确),就会有500 Server Error
。
刷新页面,无论密码是否匹配,用户都会登录。
当用户点击退出链接时,还有一个500 Server Error
。
守则
<?php
session_start();
if(isset($_GET['logout'])&&$_GET['logout']==='true'){
logout();
header('location: ./');
}
if(isset($_POST['submit'])) {
$email = $_POST['email'];
$password = $_POST['password'];
$hostname = 'REDACTED';
$username = 'REDACTED';
$password = 'REDACTED';
$dbname = 'REDACTED';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
}
catch(PDOException $e){
echo($e->getMessage());
}
$stmt=$dbh->prepare('SELECT `password`, `id` FROM `tap_users` WHERE `email`=?');
$stmt->execute(array($email));
if($stmt->rowCount()==0){
//incorrect username
header('location: ./?error=user');
exit();
}
$userData = $stmt->fetch(PDO::FETCH_ASSOC);
if($password != $userData['password']) {
//incorrect password
header('location: ./?error=pass');
exit();
} else {
validateUser($userData['id']);
header('location: ./');
}
}
?>
<head></head>
<body>
<?php
if(!isLoggedIn()) {
show_login();
exit();
}
?>
<a href="?logout=true">Logout</a>
</body>
</html>
<?php
//Show login form
function show_login(){
echo '<form method="post">
<input type="text" name="email" placeholder="Email Address" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Submit" name="submit" />
</form>
</body>
</html>';
}
//Check if a user is logged in
function isLoggedIn(){
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
//validate the user
function validateUser($userid){
//this is a security measure
session_regenerate_id();
$_SESSION['valid'] = 1;
$_SESSION['userid'] = $userid;
}
//logout the user
function logout(){
//destroy all of the session variables
$_SESSION = array();
session_destroy();
}
?>
答案 0 :(得分:1)
您正在做的是如果用户登录正确,那么您将重定向到标题('location:./');也许您在apache配置中没有index.php或目录索引关闭。
做一件事将其改为
头( '位置:的index.php');
它会起作用。
这与php或mysql无关,这是服务器配置错误。
答案 1 :(得分:0)
我运行了您的代码:online php code validator似乎没有任何语法问题。问题可能来自文件的权限错误。该文件是否具有该用户的执行权限。在你的ftp中确保权限设置为755.这应该允许每个人阅读和执行PHP代码。如果这不是问题,那么联系您的主机并询问错误,他们应该能够提供该信息。另一个选择是在PHP中创建自己的错误日志记录。您可以查看this old stack overflow post on this继续将所有错误显示在单独的文件中。