Прежде всего, не думайте, что это вопрос о нем. Я пробовал все решения, но мне ничего не помогает.
Я получаю следующую ошибку: "Невозможно изменить информацию заголовка - уже отправленные заголовки (вывод запущен в /home/gogiavag/public_html/maxkapital/user.php:7) в /home/gogiavag/public_html/maxkapital/func.php в режиме онлайн 4"
Все страницы, которые я преобразовал в utf8 (без спецификации). У меня нет начального пространства в начале, но, кроме того, ничего не помогает.
Вот мой код:
login.php
<?php session_start();?>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<?php include "header.php"; require_once 'func.php';?>
<form method="POST" action="user.php">
<table style="margin-top: 10px;">
<tr>
<td><label for ="txtuser">name:</label></td>
<td><input type="text" style="padding:5px;" id="txtuser" name="txtuser" value="<?php if (isset($_SESSION['txtuser'])
){echo $_SESSION['txtuser'];}else{echo '';} ?>" </input></td>
</tr>
<tr>
<td><label for ="txtpassword">password:</label></td>
<td><input type="password" style="padding:5px;" id="txtpassword" name="txtpassword"> </input></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value ="Enter" style="padding:5 55 5 55;background-color:#3f4194;color:#fff;" name="btnsubmit" id="btnsubmit"> </td>
</tr>
</table>
</form>
<?php
if (isset($_SESSION['err'])){
if ($_SESSION['err']===true){
echo gg_stringformat("<img src='error.png' style='margin-left:50px;'><img/> <span style='font-size:10pt; color:#ff0000'>{0}</span>", $_SESSION['errmsg']);
}
}
if(isset($_SESSION['err'])){unset ($_SESSION['err']);};
if(isset($_SESSION['errmsg'])){unset ($_SESSION['errmsg']);};
if(isset($_SESSION['txtuser'])){unset ($_SESSION['txtuser']);};
if(isset($_SESSION['txtpassword'])){unset ($_SESSION['txtpassword']);};
?>
</body>
</html>
user.php
<?php session_start();?>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
$user=$_POST['txtuser'];
$pass=$_POST['txtpassword'];
$_SESSION['txtuser'] = $user;
$_SESSION['txtpassword'] = $pass;
if (gg_trim($user)===''){
$_SESSION['err']=true;
$_SESSION['errmsg']='User name required';
gg_redirect('login.php');
exit;
}elseif(gg_trim($pass)===''){$_SESSION['err']=true;$_SESSION['errmsg']='Password required';gg_redirect('login.php');
exit;
}
echo $user, "<BR>", $pass;
?>
</body>
</HTML>
header.php
<div id="divheader" >
<p> <img src="coins.png"></img>MAX_KAPITAL</p>
</div>
func.php начинается с...
<?php
mb_internal_encoding("UTF-8");
function gg_redirect($url){
header("location: $url");
}
....
Это дает мне ошибку, когда пользователь не вводит пароль или имя пользователя.
Пожалуйста, найдите ошибку в моем коде. заранее спасибо.
касается Джорджа Годжава
PHP не лжет вам, вы действительно уже начали вывод строки 2 в user.php
- вы печатаете <html>
для ответа там.
Затем вы печатаете <head>
и еще несколько HTML, затем вы вызываете функцию gg_redirect()
из func.php
if !isset($_POST['btnsubmit'])
, что вызывает ошибку, потому что больше невозможно отправить перенаправить заголовок, поскольку уже был запущен вывод.
Вам нужно проверить входные данные и, возможно, перенаправить, прежде чем отправлять что-либо обратно клиенту (кроме других заголовков ответов). В частности, не печатайте HTML-код, прежде чем вы будете обрабатывать возможные переадресации:
<?php
// includes here - they must have no output!
// check if all is OK, set $redirectURL if redirect is needed to that URL
if ($redirectUrl) {
header("location: $redirectUrl");
exit(); // header() won't cause the script to stop executing
}
?>
<html>
<head>
...
Файлы, включенные до перенаправления, не должны печатать какой-либо вывод - даже пустую строку, поэтому все они должны иметь <?php
в качестве первых символов файла, весь файл должен быть PHP без вывода в тело ответа и должен заканчиваться?> без новой строки или пробела после этого (PHP может обрезать некоторые пробелы в этом случае, но не полагаться на это).
Вызов session_start()
является безопасным и может быть до перенаправления (полезно, если вам нужны переменные сеанса), поскольку он не будет отправлять тело ответа. Он может установить cookie, но это нормально, потому что файлы cookie отправляются в заголовках.
Хотя @Jiri уже объяснил это правильно, чтобы быть более явным:
переместите это:
<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
к самому верху вашего скрипта php, возможно, даже добавив первую строку к нему следующим образом:
<?php
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
require_once'func.php';
session_start();
?>
а затем остальную страницу.
EDIT func.php добавляет заголовки, вставляя их перед перенаправлением, вы получаете эту ошибку. Переместите строку inlude в какое-то место после перенаправления или проверьте func.php, см. Отредактированный код выше
session_start()
должно быть проблемой, и сессия может потребоваться для решения о перенаправлении в общем случае. Хорошо, что вы упомянули об этом, поэтому мы можем обсудить это.
exit();
послеheader()
, иначе выполнение скрипта будет продолжено. Одной только настройки заголовка недостаточно для перенаправления.gg_redirect()