2009-12-16 36 views
18

thể trùng lặp:
Headers already sent by PHP"Cảnh báo: Không thể sửa đổi thông tin tiêu đề - headers already sent bởi" lỗi

tôi tiếp tục nhận được lỗi này mỗi khi tôi cố gắng để trình xóa một hình thức hình thức.

Cảnh báo: Không thể sửa đổi tiêu đề thông tin - headers already sent bởi (đầu ra bắt đầu tại C: \ xampp \ htdocs \ speedycms \ deleteclient.php: 47) trong C: \ xampp \ htdocs \ speedycms \ deleteclient.php trên dòng 106

có gì sai với mã của tôi không? tôi cần phải thay đổi gì để nó hoạt động?

<?php 
if (!isset($_SESSION)) { 
    session_start(); 
} 
$MM_authorizedUsers = ""; 
$MM_donotCheckaccess = "true"; 

// *** Restrict Access To Page: Grant or deny access to this page 
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
    // For security, start by assuming the visitor is NOT authorized. 
    $isValid = False; 

    // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
    // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
    if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
     $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
     $isValid = true; 
    } 
    if (($strUsers == "") && true) { 
     $isValid = true; 
    } 
    } 
    return $isValid; 
} 

$MM_restrictGoTo = "login.php"; 
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { 
    $MM_qsChar = "?"; 
    $MM_referrer = $_SERVER['PHP_SELF']; 
    if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; 
    if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
    $MM_referrer .= "?" . $QUERY_STRING; 
    $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); 
    header("Location: ". $MM_restrictGoTo); 
    exit; 
} 
?> 

<?php 
    require_once('Connections/speedycms.php'); 

    $client_id = mysql_real_escape_string($_GET['id']); 

    $con = mysql_connect($hostname_speedycms, $username_speedycms, $password_speedycms); 

if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("speedycms") or die(mysql_error()); 
?> 

<?php 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
    if (PHP_VERSION < 6) { 
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
    } 

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

    switch ($theType) { 
    case "text": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break;  
    case "long": 
    case "int": 
     $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
     break; 
    case "double": 
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
     break; 
    case "date": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break; 
    case "defined": 
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
     break; 
    } 
    return $theValue; 
} 
} 

if ((isset($_GET['id'])) && ($_GET['id'] != "") && (isset($_POST['deleteForm']))) { 
    $deleteSQL = sprintf("DELETE FROM tbl_accident WHERE id=%s", 
         GetSQLValueString($_GET['id'], "int")); 

    mysql_select_db($database_speedycms, $speedycms); 
    $Result1 = mysql_query($deleteSQL, $speedycms) or die(mysql_error()); 

    $deleteGoTo = "progress.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?"; 
    $deleteGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    header(sprintf("Location: %s", $deleteGoTo)); 
} 

mysql_select_db($database_speedycms, $speedycms); 
$query_delete = "SELECT * FROM tbl_accident WHERE id=$client_id"; 
$delete = mysql_query($query_delete, $speedycms) or die(mysql_error()); 
$row_delete = mysql_fetch_assoc($delete); 
$totalRows_delete = mysql_num_rows($delete); 
?> 

<p class="form2">Are you sure you wish to <b>delete</b> the record for <?php echo $row_delete['clientName']; ?>?</p> 
       <form name="form" method="POST" action="<?php echo $deleteAction; ?>"> 
      <p class="form2"><input type="submit" value="Yes" /> 
       <input name="no" type="button" id="no" value="No" /> 
      </p> 
           <input type="hidden" name="deleteForm" value="form" /> 
     </form>  

cảm ơn bạn trước!

+2

googling sẽ là lý tưởng có ... nhưng tôi muốn hiểu tại sao và tôi đã mắc phải sai lầm của mình. – methuselah

+0

Tôi gặp sự cố như vậy khi tải tệp của mình lên máy chủ, hỗ trợ ngay cả PHP5.3 Sử dụng máy chủ với PHP 5.6 trở lên. – GGSoft

+0

nó chủ yếu là do đầu ra không thân thiện trong php. ví dụ khoảng trắng giữa không gian trắng khoảng trắng ; echo hoặc in dữ liệu mà appered trước khi tiêu đề ("Location: .../.../.... php"). nó phá vỡ sự chuyển đổi mã –

Trả lời

38

Dòng 45-47:

?> 

<?php 

Đó là gửi một vài dòng mới như sản lượng, vì vậy tiêu đề đã được gửi đi. Chỉ cần loại bỏ 3 dòng đó (tất cả là một khối PHP lớn, không cần phải phân tích cú pháp PHP và sau đó bắt đầu lại), cũng như khối tương tự trên các dòng 60-62, và nó sẽ hoạt động.

Chú ý rằng các thông báo lỗi bạn đã thực sự mang đến cho bạn rất nhiều thông tin để giúp bạn tìm thấy điều này bản thân:

Cảnh báo: Không thể sửa đổi tiêu đề thông tin - headers already sent bởi (đầu ra bắt đầu tại C: \ xampp \ htdocs \ speedycms \ deleteclient.php: 47) trong C: \ xampp \ htdocs \ speedycms \ deleteclient.php trên đường dây 106

Hai phần in đậm cho bạn biết nơi mục là gửi ra trước khi các tiêu đề (dòng 47) và nơi mục được rằng đã cố gắng để gửi một tiêu đề sau khi đầu ra (dòng 106) .

+0

Cảm ơn nó tiết kiệm thời gian của tôi. –

8

Có thể có khoảng trắng bên ngoài thẻ php của bạn.

9

Những dòng trống giữa các thẻ ?><?php của bạn đang được gửi cho khách hàng.

Khi người đầu tiên được gửi, nó sẽ làm cho tiêu đề của bạn được gửi đầu tiên.

Khi điều đó xảy ra, bạn không thể sửa đổi tiêu đề nữa.

Xóa các thẻ không cần thiết đó, có tất cả trong một khối lớn <?php.

32

Điều này thường xảy ra khi có đầu ra không mong muốn từ tập lệnh trước khi bạn bắt đầu phiên. Với mã hiện tại của bạn, bạn có thể thử sử dụng bộ đệm đầu ra để giải quyết nó.

thử thêm một cuộc gọi vào hàm ob_start(); ở đầu tập lệnh và ob_end_flush(); ở cuối tài liệu.

+1

Đã làm việc cho tôi! –

23

Kiểm tra mã hóa tài liệu.

Tôi cũng gặp vấn đề tương tự. Tôi phát triển trên Windows XP bằng Notepad ++ và WampServer để chạy Apache cục bộ và tất cả đều ổn. Sau khi tải lên nhà cung cấp dịch vụ lưu trữ sử dụng Apache trên Unix, tôi gặp phải lỗi này. Tôi không có thêm thẻ PHP hoặc khoảng trắng nào từ các dòng thừa sau thẻ đóng.

Đối với tôi, điều này là do mã hóa mã hóa của tài liệu văn bản. Tôi đã sử dụng tùy chọn "Chuyển đổi sang UTF-8 mà không cần BOM" trong Notepad ++ (dưới tab Mã hóa) và được tải lại vào máy chủ web. Đã khắc phục sự cố, không yêu cầu thay đổi mã/chỉnh sửa.

+1

Điều đó cũng khắc phục được sự cố của tôi :-D Bạn có biết cách thiết lập nó trong PHP để không phải tiếp tục lưu nó trong Notepad ++ không? Tôi biết rằng bạn có thể làm điều đó cho utf8 (hoặc với bộ ký tự hoặc $ conn-> exec ("set names utf8"), nhưng tôi đã không thể tìm thấy một cách để làm điều đó mà không có BOM –

+0

một giải pháp grate của chúng tôi, chúng tôi không bao giờ nó đã tiết kiệm rất nhiều thời gian của tôi cảm ơn bạn. –

Các vấn đề liên quan