У меня была эта проблема в последнее время работает над проектом, и единственное, что приходит мне на ум:
"**Warning:** Cannot modify header information - headers already sent (output started at /htdocs/your_project_name/your_file.php:X, where X is the line number)."
Дважды проверьте свои ошибки; вставить это где-то на вершине в сценарии, который используется для обработки формы представления:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Я был в состоянии заставить его работать, делая это:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if ((isset($_POST['username']) && !empty($_POST['username'])) &&
(isset($_POST['password']) && !empty($_POST['password']))) {
//echo $_POST['username'];
//echo $_POST['password'];
// these statements are commented out because they were
// displaying information before the header('Location: index.php')
// was called, uncomment this and try to see what I am talking about
$username = $_POST['username'];
$password = $_POST['password'];
$db_username = 'root';
$db_password = 'root';
// always use try-catch when working with databases, api's, etc.
try
{
$dbconn = new PDO('mysql:host=localhost;dbname=db', $db_username, $db_password);
$stmt = $dbconn->prepare('SELECT * FROM users WHERE username=:username AND
password=:password LIMIT 1');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
if ($stmt->rowCount() > 0)
{
header('Location: index.php');
}
}
catch (PDOException $e)
{
echo 'Database error: ' . $e->getMessage();
}
}
Очевидно, что форма не изменение, за исключением того, что я добавил действие атрибут:
<form method="post" action="submit.php">
<!--form fields-->
</form>
Очевидно, убедитесь, что вы храните пароли пользователей надежно. Я не сделал хэш-пароль до того, как проверил базу данных, но вы всегда должны дезинформировать любой вход, который отправляется из формы. Посмотрите здесь
- phpsec.org/projects/guide/1.html#1.4
и здесь
- php.net/manual/en/function.password-hash ,PHP
И это, в частности, как вы могли бы затем использовать эту функцию, чтобы проверить, является ли пароль совпадает:
http://php.net/manual/en/function.password-verify.php
Если вы все еще возникают проблемы и заголовки уже отправлены вопрос проблема, проверить это сообщение:
How to fix "Headers already sent" error in PHP
поставил выход после заголовка перенаправления – Mihai
Для обеспечения безопасности паролей воспользуйтесь встроенными функциями PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). Убедитесь, что вы [не избегаете паролей] (http://stackoverflow.com/q/36628418/1011527) или используйте какой-либо другой механизм очистки для них перед хэшированием. Выполнение этого * изменяет * пароль и вызывает ненужное дополнительное кодирование. –
использовать только целочисленное значение с выходом. попробуйте ответ Михая –