2015-01-15 4 views
1

Что я пытаюсь сделатьодностраничных Войти получать 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(); 
} 
?> 
+4

Вы заглянули в журнал ошибок PHP? Я также удаляю имя пользователя и пароль базы данных из фрагмента кода выше. – ajtrichards

+2

Знаете ли вы, как использовать вкладку «Сеть» в браузерах Средства разработки? Если вы нажмете один из запросов, должна быть вкладка «Ответ», и она должна сообщить об ошибке. В Firefox или Chrome: 'F12-> Network-> 500 Request-> Response' (Примечание может потребоваться перезагрузка страницы, прежде чем что-либо появится на вкладке« Сеть ») –

+0

@ajtrichards Мой хостинг-провайдер не предоставляет доступ к PHP журнал ошибок. Ошибок нет, когда я возвращаю отчет об ошибках PHP. – Ben

ответ

1

то, что вы делаете, если пользователь Войти правильно, то вы перенаправлении заголовок («место: ./»); Возможно, у вас нет индекса index.php или каталога в настройке apache.

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

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

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

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

+0

Это по правому строю ... переход от 'location: ./? Xxx' к' location: index.php? Xxx', и теперь он работает , – Ben

0

Я проверил ваш код через: online php code validator Кажется, что не возникли проблемы с синтаксисом. Проблема может возникать из-за ошибки разрешения на файл. Имеет ли файл разрешения на выполнение для пользователя. в вашем ftp убедитесь, что для разрешений установлено значение 755. Это должно позволить каждому читать и выполнять php-код. Если это не проблема, обратитесь к вашему хосту и попросите ошибки, они должны быть в состоянии предоставить вам эту информацию. Другой вариант - создать собственную регистрацию ошибок в PHP. Вы можете посмотреть this old stack overflow post on this, чтобы продолжить делать все ваши ошибки видимыми для отдельного файла.

Смежные вопросы