Я не ищу, чтобы кто-то делал всю работу за меня, но у меня есть проект с открытым исходным кодом, который отлично работает на большинстве серверов, но сервер одного человека, когда вы заходите, чтобы зарегистрироваться или войти, страница просто обновляется вместо входа в систему Ничто не попадает в базу данных.
var_dump из $ _POST выглядит так, как будто все отлично, и я убрал столько данных, сколько проверено в форме, но без кубиков.
Существуют ли инструменты в Chrome или Firefox / Firebug, чтобы помочь мне понять, что происходит? Журнал консоли в Chrome просто говорит мне, что страница была перезагружена, но больше ничего. Ни одна из моих ошибок не возвращается на страницу. Это просто простое обновление страницы.
Это неотредактированный (без связки html) логин-файл. Он основан на старой системе под названием UserCake. Большая часть этого является устаревшим кодом. Я собираюсь полностью переписать проект с нуля.
<?php require_once("models/top-nav.php"); ?>
<!-- If you are going to include the sidebar, do it here -->
<?php //require_once("models/left-nav.php"); ?>
</div>
<!-- /.navbar-collapse -->
</nav>
<!-- PHP GOES HERE -->
<?php
//Prevent the user visiting the logged in page if he/she is already logged in
if(isUserLoggedIn()) { header("Location: account.php"); die(); }
//Forms posted
if(!empty($_POST))
{
$token = $_POST['csrf'];
if(!Token::check($token)){
die('Token doesn\'t match!');
}
//reCAPTCHA 2.0 check
// empty response
$response = null;
// check secret key
$reCaptcha = new ReCaptcha($privatekey);
// if submitted check response
if ($_POST["g-recaptcha-response"]) {
$response = $reCaptcha->verifyResponse(
$_SERVER["REMOTE_ADDR"],
$_POST["g-recaptcha-response"]
);
}
if ($response != null && $response->success) {
$errors = array();
$username = sanitize2(trim($_POST["username"]));
$password = trim($_POST["password"]);
//Perform some validation
//Feel free to edit / change as required
if($username == "")
{
$errors[] = lang("ACCOUNT_SPECIFY_USERNAME");
}
if($password == "")
{
$errors[] = lang("ACCOUNT_SPECIFY_PASSWORD");
}
//A security note here, never tell the user which credential was incorrect
if(!usernameExists($username))
{
$errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID");
}
else
{
$userdetails = fetchUserDetails($username);
//See if the user's account is activated
if($userdetails["active"]==0)
{
$errors[] = lang("ACCOUNT_INACTIVE");
}
else
{
//- THE OLD SYSTEM IS BEING REMOVED - Hash the password and use the salt from the database to compare the password.
//$entered_pass = generateHash($password,$userdetails["password"]);
$entered_pass = password_verify($password,$userdetails["password"]);if($entered_pass != $userdetails["password"])
{
$errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID"); //MAKE UPGRADE CHANGE HERE
}
else
{
//Passwords match! we're good to go'
//Construct a new logged in user object
//Transfer some db data to the session object
$loggedInUser = new loggedInUser();
$loggedInUser->email = $userdetails["email"];
$loggedInUser->user_id = $userdetails["id"];
$loggedInUser->hash_pw = $userdetails["password"];
$loggedInUser->title = $userdetails["title"];
$loggedInUser->displayname = $userdetails["display_name"];
$loggedInUser->username = $userdetails["user_name"];//Update last sign in
$loggedInUser->updateLastSignIn();
$_SESSION["userCakeUser"] = $loggedInUser;
//Redirect to user account page
header("Location: account.php");
die();
}
}
}
}
}
?><?php
echo resultBlock($errors,$successes);
echo "<div id='regbox'>
<form name='login' action='".$_SERVER['PHP_SELF']."' method='post'>
<p>
";
?>
<label>Username:</label>
<input class='form-control' type='text' name='username' />
</p>
<p>
<label>Password:</label>
<input class='form-control' type='password' name='password' />
</p>
<p><label>Please enter the words as they appear:</label>
<div class="g-recaptcha" data-sitekey="<?php echo $publickey; ?>"></div>
</p>
<p>
<label> </label>
<input class='btn btn-primary' type='submit' value='Login' class='submit' />
</p>
<input type="hidden" name="csrf" value="<?=Token::generate();?>" >
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<!-- footer -->
<?php require_once("models/footer.php"); ?>
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отображать ошибки следует только в постановке, а не в производстве.
На что ФП ответил:
«Вы сделали это, Фред-ий. Я забыл все о добавлении дополнительных отчетов об ошибках! Спасибо. Я получил https: // Оболочка отключена в конфигурации сервера из-за ошибки allow_url_fopen = 0. Это, очевидно, очень поможет!» — Дэн Пылесос’
Других решений пока нет …