В настоящее время я создаю сайт с 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/">« 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/">« Back</a></div>
</form>
</div> <!-- /container -->
У кого-нибудь есть указатели на то, как это можно исправить? Спасибо вам большое!
Пожалуйста, не публикуйте ссылки на код, здесь вместо этого вставьте соответствующие части кода (формы, соответствующие PHP). – Qirel
Для устранения неполадок: посмотрите ['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
В дополнение к 'error_reporting (E_ALL);' также добавьте 'ini_set ('display_errors', 1);' оба в верхней части вашего скрипта. _Always_ делать это при разработке и тестировании кода в php - пустой экран, когда ожидается выход, известен как «белый экран смерти» и указывает на фатальную ошибку, анализируя или выполняя код. –