Почему я получаю каждый раз сообщение об ошибке, которое я уже отправил заголовки - PullRequest
1 голос
/ 10 мая 2010

У меня есть еще один вопрос о веб-программировании.

Я запрограммировал скрипт входа в систему, но каждый раз, когда я пытаюсь войти в систему, он говорит, что уже отправил информацию заголовка.

Вот 2 файла:

<?php
if($_GET['logout'] == 1) {
    setcookie('authorized', 1, time()-3600);    
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Login - photoAdminSite</title>
</head>

<style type="text/css"> 
    body {
    text-align: center;
    font-family: helvetica;
    }

    #loginForm {
    padding: 1em;
    background: #e3e3e3;
    width: 260px;
    margin: 3em auto 0;
    text-align: left;

    }
</style>

<body>

<div id="loginForm">
<form method="post" action="confirm_login_credentials.php">

<h2>LOGIN</h2>
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="password" name="password" /></p>
<p><input type="submit" value="Login" name="submit" /></p>

</form>
</div>
</body>
</html>





<?php
$username = $_POST['username'];
$password = $_POST['password'];

require 'database.php';

$q = "SELECT id FROM users_photoadminsite WHERE user_name = '$username' AND password = '$password'";

$result = $mysqli->query($q) or die(mysqli_error());

if (mysqli_num_rows($result) == 1) {
    setcookie('authorized', 1, 0);
    header("Location: index.php");
} else {
    header("Location: login.php");  
}
?>

Я был бы очень рад получить несколько полезных ответов.

Ответы [ 6 ]

3 голосов
/ 10 мая 2010

Cookies и заголовки должны быть установлены до того, как любой вывод будет отправлен в браузер. Попробуйте переместить скрипт входа в начало страницы. Возможно, вы захотите подумать о том, чтобы санировать свои запросы, чтобы предотвратить злонамеренную активность.

1 голос
/ 10 мая 2010

У вас может быть пустая строка в начале этого файла php. Возможно место перед запуском PHP-скрипта

0 голосов
/ 10 мая 2010

Это на Windows? Проверьте для спецификации. Откройте его в Блокноте и сохраните как ANSI, чтобы увидеть, поможет ли это.

0 голосов
/ 10 мая 2010

Если у вас не включен output_buffering в вашем php.ini, вы получите эту ошибку, потому что она сразу начнет отправлять html. Вам нужно отредактировать свой php.ini, чтобы включить буферизацию вывода.

0 голосов
/ 10 мая 2010

Когда PHP говорит, что заголовки уже отправлены, это означает, что некоторый текст уже был выведен скриптом (или скриптом, который его вызвал). Это включает в себя все сообщения об ошибках.

Когда ПЕРВЫЙ фрагмент текста выводится PHP, он отправляет свои заголовки, но не раньше. Чтобы получить HTTP-куки (часть заголовков), куки должны быть отправлены до вывода любого текста.

Что вы можете сделать, это включить буферизацию вывода, используя ob_start и ob_end_flush и другие функции управления выходом.

Также вы можете установить переменную php.ini для автоматической отправки заголовка файла cookie при выводе текста.

0 голосов
/ 10 мая 2010

См. Строки 60, 61 и 63, и как они появляются после всего вашего HTML? Поместите их раньше вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...