2017-02-01 5 views
-2

Привета Я искал решение, но я не могу его фиксированную -_-Не удается изменить информацию в заголовке - заголовки уже отправлены

У меня есть форма, когда я нажимаю отправить это показывает эту ошибку

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\new1v2\topnav.php:72) in C:\xampp\htdocs\new1v2\alumnireg.php on line 68

Это часть моего кода PHP

if (mysqli_query($conn, $sql) === TRUE) { 
    echo 
    header('location:thanks.php'); 

где, если я нажимаю отправить это должно пойти на thanks.php , но если я удалю свою topnav.php он хорошо функционирует

В чем проблема с моим topnav.php?

<!-- active class in navigation --> 
<style> 
    .active { 
    background-color:#2980b9; 
    } 
</style> 
<!-- end of active --> 
<style> 
    .nav li a:hover{ 
    background-color: #0452BC; 
    /*font-size:18px;*/ 
} 
</style> 

<script> 
// Change style of top container on scroll 

window.onscroll = function() {scrollFunc()}; 
function scrollFunc() { 
if (document.body.scrollTop > 200 || document.documentElement.scrollTop > 200) { 
    document.getElementById("myTop").classList.add("w3-blue","w3-card-4"); 
    document.getElementById("myIntro").classList.add("w3-show-inline-block"); 
} else { 
    document.getElementById("myIntro").classList.remove("w3-show-inline-block"); 
    document.getElementById("myTop").classList.remove("w3-blue","w3-card-4"); 
} 
} 


</script> 
<!-- for top nav to be not overlapped by the indicators of carousel --> 

<style> 
    .w3-card-4.w3-blue{z-index: 99999;} 
</style> 
<!-- end of style for top nav to be not overlapped --> 

<div id="myTop" class="w3-top w3-container w3-padding-2 w3-theme w3-large"> 
    <!-- <i class="w3-opennav w3-hide-large w3-xlarge w3-margin-left w3-margin-right" onclick="w3_open()"></i> --> 
    <div id="myIntro" class="w3-hide"> 
    <a href="index.php"> 
    <img src="admin/img/fcuautonomous.png" width="200px" height="50" style="padding:5px;"> 
    </a> 
    </div> 
</div> 

<header class="w3-container w3-theme w3-padding-18 w3-blue" style="background-image: url(admin/img/top.jpg); background-size: 100% 100%;"> 
    <h1 class="w3-xxxlarge w3-padding-16"> 
    <a href="index.php"> 
    <img src="admin/img/fcuautonomous.png" width="400px"> 
    </a> 
    </h1> 
</header> 

<nav class="w3-card-4" style="background-color: #013275;"> 
    <div class="container-fluid"> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar"> 
     <i class="fa fa-chevron-circle-down" aria-hidden="true"></i>      
     </button> 
     <!-- <a class="navbar-brand" href="index.php"><b><img src="admin/img/fculogo.png" height="35" width="35"></b></a> --> 
    </div> 
    <div class="collapse navbar-collapse" id="myNavbar"> 
     <ul class="nav navbar-nav navbar-right"> 

     <li><a id='homie' href="index.php"><font color="white">Home</font></a></li> 
     <li><a href="alumnireg.php"><font color="white">Alumni Registration</font></a></li> 
     <li><a href="news_events.php"><font color="white">Events</font></a></li> 
     <!-- <li><a href="job_opp.php"><font color="white">Job Oppurtunities</font></a></li> --> 
     <li><a href="featured_alum.php"><font color="white">Featured Alumni</font></a></li> 
     <li><a href="#contact"><font color="white">Photo Gallery</font></a></li> 

     </ul> 
    </div> 
    </div> 
</nav> 

<br><br> 

Пожалуйста, помогите, это для моего THESIS

+0

удалить пробелы перед ' ' – Thamaraiselvam

+0

удалить эхо из выше заголовка («место: thanks.php»); и после этого добавить штамм; или выход; –

+0

удалить echo перед заголовком ('location: thanks.php'); –

ответ

1

Вы можете использовать буферизацию.

Попробуйте следующее:

ob_start(); // <-- put this at the very top of the script, after opening PHP tags. 

if (mysqli_query($conn, $sql) === TRUE) { 
    header('location:thanks.php'); 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 


ob_end_flush(); 
//flush(); 
//exit(0); 

В случае, если вы хотите избежать ошибок по любой другой причине, использование линии ниже:

if (mysqli_query($conn, $sql) === TRUE && headers_sent() === false) {... 

Источники:

http://php.net/manual/en/function.headers-sent.php

http://php.net/manual/en/ref.outcontrol.php

+0

Где бы я поместил 'ob_end_flush(); это моя часть моего php-файла 'if (mysqli_query ($ conn, $ sql) === TRUE) { header ('location: thanks.php'); \t else { echo "Error:". $ sql. "
". $ Conn-> ошибка; } $ conn-> close(); } ?> ' – LecheDeCrema

+0

@LecheDeCrema Я обновил ответ с помощью этого кода. – Nitin

+0

Он не отображает форму после нажатия Отправить – LecheDeCrema

1

Основная проблема заключается в том, что вы эхом отдаете выходные данные (теги стиля, теги скриптов и т. Д.), А затем пытаетесь установить и отправить заголовки. Итак, вы можете переместить логику поверх включения topnav.php или решить ее с помощью других опций.

Буферизация (ob_start/end) захватывает вывод и только эхо (заподлицо) его после вызова ob_end_flush.

Другой вариант только для перемещения, если блок в верхней части include(topnav.php)

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

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