2016-06-22 8 views
0

В настоящее время я создаю сайт с PHP и MySQL для системы входа/регистрации. Однако при попытке входа в систему я перенаправляюсь на пустую страницу (где MySQL обычно помещает ошибку) и не может войти в систему. Странная вещь - это не происходит при регистрации. Я могу зарегистрироваться как обычно, и я перенаправлен на «приборную панель» (место, которое я установил для начала после успешной регистрации). Я не совсем уверен, что произошло, и как система входа в систему сломалась, так как я не помню, чтобы с ней что-то изменилось, поскольку она работала раньше.PHP + MySQL дает пустую страницу без ошибок

Это был отмечен как дубликат другого вопроса, однако при удалении die(mysqli_error()); из моего кода белый экран исчезает, и я получаю сообщение об ошибке, указывающее, что мои учетные данные неверны (не сообщение об ошибке PHP/MySQL, $ сообщение об ошибке, которое я определил).

Мой код приведен ниже.

login.php

<?php 

     include("connection.php"); 
     session_start(); 

     if ($_GET["logout"]==1 AND $_SESSION['id']) { 
      session_destroy(); 
      // $message="You have been logged out. Have a nice day!"; 
      session_start(); 
     } 

     if(isset($_SESSION['id'])){ // if id in session is set 
      header("Location: /developer/dashboard"); 
     } 

     if ($_POST['submit']=="Sign Up") { 

      if (!$_POST['username']) $error.="<br />Please enter a username"; 

      if (!$_POST['email']) $error.="<br />Please enter your email"; 
       else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $error.="<br />Please enter a valid email"; 

     if (!$_POST['password']) $error.="<br />Please enter your password"; 
     else { 

      if (strlen($_POST['password'])<8) $error.="<br />Please enter at least 8 characters"; 

      if(!preg_match('/[A-Z]/', $_POST['password'])) $error.= "<br />Please include at least 1 capital letter"; 
     } 
      if ($error) $error = "Your account could not be created due to the following:".$error; 

      else { 

      $query= "SELECT * FROM `users` WHERE email ='".mysqli_real_escape_string($link, $_POST['email'])."'"; 

      $result = mysqli_query($link, $query); 
      $results = mysqli_num_rows($result); 

      if ($results) $error = "That email is already registered. Did you mean to log in?"; 
      else { 
      $query = "INSERT INTO `users` (`username`, `email`, `password`) VALUES ('".mysqli_real_escape_string($link, $_POST['username'])."', '".mysqli_real_escape_string($link, $_POST['email'])."', '".md5(md5($_POST['username']).$_POST['password'])."')"; 

      mysqli_query($link, $query); 
      $success="Successfully signed up."; 
      $_SESSION['id']= mysqli_insert_id($link); 
      header("Location:../dashboard"); 
      } 
     } 
    } 

    if ($_POST['submit'] == "Log In") { 
     $query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."'AND 
     password='" .md5(md5($_POST['loginemail']) .$_POST['loginpassword']). "'LIMIT 1"; 
     $result = mysqli_query($link, $query); 
     $row = mysqli_fetch_array($result); 
     if($row){ 
      $_SESSION['id']=$row['id']; 
      header("Location:../dashboard"); 
     } else { 
      $error = "That email and password combination did not return any results. Please try again."; 
die(mysqli_error()); 
     } 
    } 

loginpage.php (Войти страницу HTML)

<body> 
    <div class="container"> 
     <form class="form-signin" method="post"> 
     <h3 class="form-signin-heading">Welcome back!</h3> 
     <label for="inputEmail" class="sr-only">Email address</label> 
     <input type="email" name="loginemail" id="inputEmail" placeholder="Email address" class="form-control" value="<?php echo addslashes($_POST['loginemail']); ?>" required autofocus /> 
     <label for="inputPassword" class="sr-only">Password</label> 
     <input type="password" name="loginpassword" id="inputPassword" placeholder="Password" class="form-control" value="<?php echo addslashes($_POST['loginpassword']); ?>" required /> 
     <button class="btn btn-lg btn-primary btn-block" type="submit" name="submit" value="Log In">Log In</button> 
     <br /> 
     <div class="alternateAcc" style="font-weight:lighter;"><p>Don't have an account? <a href="../create">Register</a></p> 
     <a href="/developer/">&laquo; Back</a></div> 
     </form> 
    </div> <!-- /container --> 

signuppage.php (регистрацию страницы HTML)

<body> 

    <div class="container"> 
     <form class="form-signin" method="post"> 
     <h3 class="form-signin-heading">Create an Account</h3> 
     <label for="inputUsername" class="sr-only">Username</label> 
     <input type="username" name="username" id="inputUsername" class="form-control" placeholder="Username" value="<? echo addslashes($_POST['username']); ?>" required autofocus /> 
     <label for="inputEmail" class="sr-only">Email address</label> 
     <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" value="<? echo addslashes($_POST['email']); ?>" required /> 
     <label for="inputPassword" class="sr-only">Password</label> 
     <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" value="<? echo addslashes($_POST['password']); ?>" required /> 
     <button class="btn btn-lg btn-primary btn-block" type="submit" name="submit" value="Sign Up">Continue</button> 
     <br /> 
     <div class="alternateAcc" style="font-weight:lighter;"><p>Already have an account? <a href="../login">Log In</a></p> 
     <a href="/developer/">&laquo; Back</a></div> 
     </form> 
    </div> <!-- /container --> 

У кого-нибудь есть указатели на то, как это можно исправить? Спасибо вам большое!

+0

Пожалуйста, не публикуйте ссылки на код, здесь вместо этого вставьте соответствующие части кода (формы, соответствующие PHP). – Qirel

+0

Для устранения неполадок: посмотрите ['error_reporting (E_ALL);'] (http://php.net/manual/en/function.error-reporting.php) и проверьте свои журналы. Вам также может понадобиться ['mysqli_error'] (http://php.net/manual/en/mysqli.error.php). В дополнение к этому, вы должны использовать подготовленные инструкции в своих запросах, чтобы защитить себя от SQL-инъекций. Кроме того, 'md5()' не самый безопасный способ хранения ваших паролей, PHP имеет встроенный ['password_hash()'] (http://php.net/manual/en/function.password- хэш.php) , который намного безопаснее! – Qirel

+0

В дополнение к 'error_reporting (E_ALL);' также добавьте 'ini_set ('display_errors', 1);' оба в верхней части вашего скрипта. _Always_ делать это при разработке и тестировании кода в php - пустой экран, когда ожидается выход, известен как «белый экран смерти» и указывает на фатальную ошибку, анализируя или выполняя код. –

ответ

0

Проблема была связана с базой данных MySQL в phpMyAdmin.

Независимо от того, спасибо за помощь всем!

0

Я заметил, что у вас нет действий в вашей форме, чтобы он не попал на правильную страницу (если я не пропустил что-то). Try:

<form class="form-signin" method="post" action="login.php">

+0

Просто попробовал это, и, похоже, проблема не устранена. Файл ** login.php ** ищет, был ли он отправлен, и как он попадает на нужную страницу. Спасибо за вашу помощь! – Insleep

+0

@Insleep Но как это должно попасть в 'login.php' в первую очередь, если представление переходит на' loginpage.php' или 'signuppage.php'? – Barmar

+0

В файле 'login.php' у меня есть' if ($ _POST ['submit'] == "Вход") '. Это работает для формы регистрации с 'if ($ _POST ['submit'] ==" Sign Up ")', поэтому я не вижу причин для того, чтобы она не работала с формой входа в систему. – Insleep

0

Где ваши действия в форме авторизации? Вы должны иметь что-то вроде

<form action="login.php" method="post" /> 

Если вы не указали действие, представление не достигнет кода login.php, если вы не обрабатывать его с помощью AJAX?

+0

Он обрабатывается в файле 'login.php' с' if ($ _POST ['submit'] == "Вход") '. Форма регистрации тоже такая, и она отлично работает. – Insleep

0

Посмотрите на эту строку кода:

if ($_POST['submit'] == "Log In") { 
    $query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."'AND 
    password='" .md5(md5($_POST['loginemail']) .$_POST['loginpassword']). "'LIMIT 1"; 

Вы подписываете с именем MD5 сцепленного с паролем, но в приведенном выше коде вы используете адрес электронной почты и пароль? Может ли быть причиной, по которой ваша регистрация работает, но логин завершается неудачно?

+0

Нет - во время регистрации я собираю имя пользователя, адрес электронной почты и пароль, но я не использую имя пользователя для входа. Независимо от этого, я просто попытался настроить страницу регистрации с помощью электронной почты и пароля MD5, которые вызывает ту же ошибку, что и раньше. – Insleep

+0

Вы действительно должны попытаться изменить свой код. Это немного грязно, как сейчас. Используйте action = "post" вместо вашего текущего способа, поскольку это стандартный способ сделать это.Также вам будет лучше размещать переменные регистрации на выделенной странице регистрации, вместо того, чтобы смешивать 2 на одной странице login.php. Это также сделает некоторые из утверждений if избыточными, что улучшит читаемость. Но, по крайней мере, используйте действие и посмотрите, не изменилось ли это. – mush

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