2009-12-16 5 views
18

Mögliche Duplizieren:
Headers already sent by PHP"Warnung: Kann nicht modify header information - headers already wurde sie per" Fehler

ich diesen Fehler halten Empfangen jedes Mal, wenn ich versuchen, das eine Form Löschung einreichen bilden.

Warnung: Kann nicht Header Informationen ändern - Header bereits gesendet von (Ausgabe begann bei C: \ xampp \ htdocs \ speedycms \ deleteclient.php: 47) in C: \ xampp \ htdocs \ speedycms \ deleteclient.php auf Linie 106

ist etwas mit meinem Code falsch? Was muss ich ändern, damit es funktioniert?

<?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>  

danke im voraus!

+2

Googeln wäre ideal ja ... aber ich wollte verstehen, warum und ich habe meinen Fehler gemacht. – methuselah

+0

Ich hatte so ein Problem, wenn ich meine Dateien auf den Server hochlade, der sogar PHP5.3 unterstützt. Verwende Server mit PHP 5.6 oder mehr. – GGSoft

+0

es wird vor allem durch unfreundliche Ausgabe in PHP verursacht. zB Leerraum zwischen Leerraum Leerraum ; echo oder print Daten, die vor dem Header ("Location: .../.../.... php") erschienen. Es bricht den Code-Übergang –

Antwort

38

Zeilen 45-47:

?> 

<?php 

Das ist ein paar neue Zeilen als Ausgabe zu senden, so dass die Header sind bereits versandt. Entfernen Sie einfach diese 3 Zeilen (es ist alles nur ein großer PHP-Block, PHP-Parsing muss nicht beendet werden und starten Sie es dann erneut), genauso wie der ähnliche Block in den Zeilen 60-62, und es wird funktionieren.

Beachten Sie, dass die Fehlermeldung, die Sie tatsächlich eine Menge Informationen gibt Dir bekommen Sie diese finden selbst:

Warnung: Kann nicht Header Informationen ändern - Header bereits gesendet von (Ausgang bei gestartet C: \ xampp \ htdocs \ speedycms \ deleteclient.php: 47) in C: \ xampp \ htdocs \ speedycms \ deleteclient.php on line 106

Die beide bolded Abschnitte, die Ihnen sagen, wo der Punkt, dass die Ausgabe vor dem Header gesendet wird (Zeile 47) und wo das Element, dass versucht, einen Header nach der Ausgabe zu senden (Linie 106) .

+0

Danke, es spart meine Zeit. –

8

Es gibt wahrscheinlich Leerzeichen außerhalb Ihrer PHP-Tags.

9

Diese Leerzeilen zwischen Ihren Tags ?> und <?php werden an den Client gesendet.

Wenn die erste dieser Nachrichten gesendet wird, werden zuerst die Header gesendet.

Sobald das passiert, können Sie die Header nicht mehr ändern.

Entfernen Sie diese unnötigen Tags, haben Sie alles in einem großen <?php Block.

32

Dies tritt in der Regel auf, wenn vor dem Start der Sitzung eine unbeabsichtigte Ausgabe aus dem Skript erfolgt. Mit Ihrem aktuellen Code könnten Sie versuchen, Ausgabepuffer zu verwenden, um es zu lösen.

versuchen, einen Anruf an die ob_start(); Funktion ganz oben in Ihrem Skript und ob_end_flush(); am Ende des Dokuments.

+1

Arbeitete für mich! Danke! –

23

Überprüfen Sie die Dokument Codierung.

Ich hatte das gleiche Problem. Ich entwickle unter Windows XP mit Notepad ++ und WampServer, um Apache lokal auszuführen und alles war in Ordnung. Nach dem Hochladen auf den Hosting-Provider, der Apache unter Unix verwendet, habe ich diesen Fehler erhalten. Ich hatte keine zusätzlichen PHP-Tags oder Leerzeichen von zusätzlichen Zeilen nach dem schließenden Tag.

Für mich wurde dies durch die Codierung der Textdokumente verursacht. Ich benutzte die Option "Konvertieren zu UTF-8 ohne BOM" -Option in Notepad ++ (unter Encoding Registerkarte) und erneut auf den Webserver geladen. Problem behoben, keine Code-/Bearbeitungsänderungen erforderlich.

+1

Das behebt auch mein Problem :-D Wissen Sie, ob es eine Möglichkeit gibt, es in PHP zu setzen, so dass Sie es nicht erneut in Notepad ++ speichern müssen? Ich weiß, dass Sie das für utf8 tun können (entweder mit charset oder $ conn-> exec ("set names utf8"), aber ich war nicht in der Lage, einen Weg zu finden, ohne BOM –

+0

es ist eine Rost-Lösung, die wir nie Experte, es hat mir viel Zeit erspart. –

Verwandte Themen