2015-12-03 4 views
1

Прежде всего не думайте, что его вопрос о дублировании. Я пробовал все решения, но мне ничего не помогает.php header дает мне ошибку

я получаю следующее сообщение об ошибке: «Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в /home/gogiavag/public_html/maxkapital/user.php:7) в/главная/gogiavag/public_html/maxkapital/func.php on line 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"); 
    } 

....

Это дает мне ошибку, когда пользователь не входит сделать пароль или имя пользователя.

В коде отсутствует ошибка. благодарит заранее.

считает Джордж Gogiava

+1

Вызов 'exit();' after 'header()', в противном случае выполнение скрипта будет продолжено. Настройка заголовка недостаточно для перенаправления. –

+0

** Я боюсь, что это дубликат! ** Вы отправляете HTML в браузер перед запуском 'gg_redirect()' – RiggsFolly

+0

@RajdeepPaul. Более важно, чтобы они отправляли 5 строк HTML в выходной буфер перед вызовом ' gg_redirect() ' – RiggsFolly

ответ

3

PHP не лежит на вас, вы на самом деле уже начал выход на линии 2 в user.php - печати <html> в ответ там.

Тогда вы печатаете <head> и еще несколько HTML, то вы вызовите функцию gg_redirect() из func.php если !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 отправляются в заголовках.

+0

@Jin благодарит за быстрый ответ. но я не знаю, как изменить мой код сейчас. коротко о главных принципах. – GGSoft

+0

@Jiri Tousek, следите за включениями перед перенаправлением. Если OP включает в себя скрипт php, который уже имеет заголовки, может возникнуть одна и та же проблема. – davejal

1

Хотя @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, см. Отредактированный код выше

+0

спасибо, я попробую. – GGSoft

+1

'session_start()' не должно быть проблемой, и сессия может понадобиться для решения о переадресации в общем случае. Хорошо, что вы упомянули об этом, хотя мы можем обсудить это. –

+0

@JiriTousek, это правильно. Я просто переместил его для сохранения, вы никогда не знаете, если OP хочет включить любой другой скрипт в верхнюю часть, а также уже имеет заголовки ... – davejal

Смежные вопросы