2013-12-19 2 views
1

Я получаю следующее сообщение об ошибке «Заголовок может содержать не более одного заголовка, обнаружена новая строка» Я знаю, что это говорит о том, что новая строка обнаружена, но я не могу понять, где это линия идет от. Я попытался обрезать переменные. Я переписал строку заголовка по-разному, без каких-либо результатов. Я добавил функцию getallheaders, чтобы увидеть, что было передано, но я не вижу новой строки или каких-либо дополнительных символов в заголовках $ output. Даже использование ob_start() не помогает.Как исправить ошибку строки заголовка

<?php 
ob_start(); 
include "catalog.obj"; 

session_start(); 
$catalogObj = $_SESSION['catalogObj']; 

if (isset($_POST['st'])) 
$st = $_POST['st']; 
else 
$st = '0'; 
if (isset($_POST['num'])) 
$num = $_POST['num']; 
else 
$num = '0'; 
if (isset($_POST['type'])) 
$type = $_POST['type']; 
else 
$type = '0'; 
if (isset($_POST['rec'])) 
$rec = $_POST['rec']; 
else 
$rec = '0'; 
if (isset($_POST['option'])) 
$option = $_POST['option']; 
else 
$option = '0'; 

if(strcmp($_POST['submit'],"Reset Form") == 0) 
{ 
    header("location: search_catalog.php?type=$type&firstTime=1"); 
    exit; 
} 
elseif(strcmp($_POST['submit'],"Catalog Administration") == 0) 
{ 
    Header("Location: administration.php"); 
    exit; 
} 
else 
{ 
    $inventory_id_num = $_POST['inventory_id_num']; 
    $inventory_desc = $_POST['inventory_desc']; 
    $inventory_revision = $_POST['inventory_revision']; 
    $quantity = $_POST['quantity']; 
    $catalog_status_id = $_POST['catalog_status_id']; 
    $order_form_type_id = $_POST['order_form_type_id']; 

    $catalogObj->inventory_id_num = $inventory_id_num; 
    $catalogObj->inventory_desc = $inventory_desc; 
    $catalogObj->inventory_revision = $inventory_revision; 
    $catalogObj->quantity = $quantity; 
    $catalogObj->catalog_status_id = $catalog_status_id; 
    //$catalogObj->order_form_type_id = array(); 
    $catalogObj->order_form_type_id = $order_form_type_id; 

    $count=count($order_form_type_id); 
    for ($i=0; $i<$count; $i++) 
    { 
     //print "order_form_type_id: $order_form_type_id[$i]<br>"; 
     if(strlen($order_form_type_id[$i]) > 0) 
     { 
      $catalogObj->order_form_type_id[$i] = $order_form_type_id[$i]; 
     } 
    } 

    if(strcmp($_POST['submit'],"Back to Order Form") == 0) 
    { 
     Header("Location: order_form.php?num=$num"); 
     exit; 
    } 
    else 
    { 
     //$url = "type=".$type."option=".$option."rec=".$rec."st=".$st."num=".$num; 
     Header("location: search_catalog_handler.php?type=$type&option=$option&rec=$rec&st=$st&num=$num"); 
     //Header("location: search_catalog_handler.php?" . rawurlencode($url)); 
     if (function_exists('getallheaders')) 
     { 
      $headers = getallheaders(); 
      print_r($headers); 
     }  
     exit; 
    } 

} 
    function getallheaders() 
    { 
      $headers = ''; 
     foreach ($_SERVER as $name => $value) 
     { 
      if (substr($name, 0, 5) == 'HTTP_') 
      { 
       $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
      } 
     } 
     return $headers; 
    } 

?> 
+1

что такое каталог.obj ?? –

+1

При взгляде на выделение синтаксиса здесь эта строка может быть ошибочной 'Header (« location: search_catalog_handler.php? Type = $ type & option = $ option & rec = $ rec & st = $ st & num = $ num ");' и вы используете 'Post'. URL как таковой должен быть, теоретически взятый из 'GET' –

+0

Это линия, вызывающая проблему! Я обновляю сайт php, который был написан 11 лет назад. Половина времени, когда исходный писатель использовал сообщения для передачи данных, используемых в функциях заголовков. как это имеет место здесь. Мне было предоставлено три недели, чтобы обновить 108 файлов кода php, которые похожи на это ... Как исправить это, не переписывая все? – royjm

ответ

1

во-первых, спасибо за указатели! Проблема в вышеуказанном коде была с переменной $ st. Я не очень опытный с заголовками и переписывание их, но я должен был добавить следующее conditinal заявление:

if (!empty($_POST['st'])) 
{ 
    $st = $_POST['st']; 
    $num = $_POST['num']; 
    $type = $_POST['type']; 
    $rec = $_POST['rec']; 
    $option = $_POST['option']; 
} 

К началу моего кода, так что полный код:

<?php 
ob_start(); 
/************************************* 
altered complete 12/20/2013 
rjm 
*************************************/ 
include "catalog.obj"; 

session_start(); 
$catalogObj = $_SESSION['catalogObj']; 
if (!empty($_POST['st'])) 
{ 
    $st = $_POST['st']; 
    $num = $_POST['num']; 
    $type = $_POST['type']; 
    $rec = $_POST['rec']; 
    $option = $_POST['option']; 
} 

if(strcmp($_POST['submit'],"Reset Form") == 0) 
{ 
    header("location: search_catalog.php?type=$type&firstTime=1"); 
    exit; 
} 
elseif(strcmp($_POST['submit'],"Catalog Administration") == 0) 
{ 
    Header("Location: administration.php"); 
    exit; 
} 
else 
{ 
    echo "<pre>"; 
    print_r($_POST); 
    echo "</pre>"; 
    //exit; 
    $inventory_id_num = $_POST['inventory_id_num']; 
    $inventory_desc = $_POST['inventory_desc']; 
    $inventory_revision = $_POST['inventory_revision']; 
    $quantity = $_POST['quantity']; 
    $catalog_status_id = $_POST['catalog_status_id']; 
    $order_form_type_id = $_POST['order_form_type_id']; 

    $catalogObj->inventory_id_num = $inventory_id_num; 
    $catalogObj->inventory_desc = $inventory_desc; 
    $catalogObj->inventory_revision = $inventory_revision; 
    $catalogObj->quantity = $quantity; 
    $catalogObj->catalog_status_id = $catalog_status_id; 
    $catalogObj->order_form_type_id = $order_form_type_id; 

    $count=count($order_form_type_id); 
    for ($i=0; $i<$count; $i++) 
    { 
     if(strlen($order_form_type_id[$i]) > 0) 
     { 
      $catalogObj->order_form_type_id[$i] = $order_form_type_id[$i]; 
     } 
    } 

    if(strcmp($_POST['submit'],"Back to Order Form") == 0) 
    { 
     Header("Location: order_form.php?num=$num"); 
     exit; 
    } 
    else 
    { 
     Header("location: search_catalog_handler.php?type=$type&option=$option&rec=$rec&st=$st&num=$num"); 
     exit; 
    } 

} 
?> 

Это позволяет поиск определенного типа (с параметрами) и общий поиск типа (без параметров) со страницы отправки.

+0

А, так что« Happy Ending »в конце концов. Рад узнать, что вы нашли свое решение. –

0

Предполагая, что catalog.obj не выводит какой-либо информации в браузере (что приведет к ошибке, а), ваша $type переменная выглядит как виновника, так как это единственный групповой символ.

Обратите внимание, что вам нужно сделать следующее для всех POST ред переменных в сценарии, которые вы хотите использовать в URI:

Sine вполне возможно, что $type может быть что угодно (это с помощью POST переменная ред иногда), вы должны очистить его перед сплевывая его обратно в ваш заголовок:

$type = urlencode($type); // Prepares the variable to be inserted in the URI 
header("Location: search_catalog.php?type=$type&firstTime=1"); 
+0

Извините, но эта строка кода не проблема, это «Заголовок (" location: search_catalog_handler.php? type = $ type & option = $ option & rec = $ rec & st = $ st & num = $ num ");" Любые предложения? urlencode не помогли. – royjm

+0

Что вы получаете, если вы 'var_dump()', что целая строка, начиная с 'search_catalog ...'? – jterry

+0

Извините, у меня возникли проблемы с распечаткой заголовка сейчас. Это происходит сейчас, но не передает параметры ... Если вы не против, я вернусь с вы через некоторое время, или первое, что завтра. Длинный день ... Это заставило меня заняться кругами в течение большей части дня. – royjm

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