Одностраничный вход в систему с ошибками сервера Constant 500

Что я пытаюсь сделать

Я создаю одностраничную зону для участников с формой входа.

При входе в систему единственное, что должен видеть пользователь (на данном этапе), — это кнопка выхода из системы.

Что идет не так

Всякий раз, когда в базе данных есть совпадение (например, имя пользователя правильное или имя пользователя и пароль верны), существует 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();
}
?>

1

Решение

что вы делаете, если пользователь правильно введет логин, то вы перенаправляете в заголовок (‘location: ./’); Возможно, у вас нет index.php, или в вашей конфигурации apache отключен индекс каталога.

сделать одну вещь изменить его на

заголовок ( ‘место: index.php’);

это будет работать.

это не связано с php или mysql, это ошибка конфигурации сервера.

1

Другие решения

Я проверил ваш код через: онлайн код проверки php Кажется, нет никаких проблем с синтаксисом. Возможно, проблема связана с ошибкой разрешения файла. Есть ли у файла разрешения на выполнение для пользователя. в вашем ftp убедитесь, что права доступа установлены на 755. Это должно позволить каждому прочитать и выполнить код php. Если это не проблема, обратитесь к вашему хосту и попросите сообщить об ошибках, они смогут предоставить вам эту информацию. Другой вариант — создать свой собственный журнал ошибок в PHP. Вы можете посмотреть на этот старый пост переполнения стека на этом продолжить делать все ваши ошибки видимыми в отдельном файле.

0

По вопросам рекламы [email protected]