2013-05-30 7 views
0

Я пытаюсь прочитать файл .CSV и распечатать его в формате таблицы в HTML. В конце страницы находится текстовое поле комментариев, в котором комментарии отправляются и сохраняются в базе данных.Недопустимый аргумент, предоставленный foreach(), работающий локально, но не удаленно

Когда я проверил код ниже, он работает нормально. Когда я попытался запустить его на сервере linux, он распечатывается отлично при первом открытии, но когда я нажимаю кнопку «Отправить», чтобы сохранить комментарий, страница обновляется, и таблица не печатает. Предоставление «Недопустимый аргумент, предоставленный для ошибки foreach()». (Примечание: это не происходит локально, я могу отправить все, что хочу, и он не возвращает ошибку.)

Я искал в stackoverflow, и кажется, что большинство из этих проблем связаны с объявлением переменной как массив. Тем не менее, мне кажется странным, поскольку код работает нормально в первый раз без ошибок, но как только я его отправлю, он возвращает ошибку.

UPDATE: полный код для файла, размещенного ниже.

<script> 
    window.onunload = refreshParent; 
    function refreshParent() { 
     window.opener.location.reload(); 
    } 
</script> 

<?php 
//---------------------------------Head/BG--------------------------------------- 
//Request Case ID 
$case = ""; 
if(isset($_REQUEST['case'])) { 
$case = $_REQUEST['case']; 
} 

$patientID = ""; 
if(isset($_REQUEST['patient'])) { 
$patientID = $_REQUEST['patient']; 
} 


//Include basic functions to allow connection to SQL db. 
include("generic.php"); 
//Include css and header information. 
$printTitle = "Volume Report for Case ".$case.""; 
$printHeader = "Volume Report for Case ".$case.""; 
$printFooter = ""; 
$printBreadcrumb = ""; 
include("header.php"); 

//submit tableStatus update 
if(isset($_REQUEST['submit'])) { 
    saveTableStatus($case); 
} 
//-----------------------------Start of Content---------------------------------- 

showStatusComment($case); 
printVolumeTable($case,$patientID); 
tableStatus($case); 


//---------------------------End of Content-------------------------------------- 
//---------------------------Functions Definitions------------------------------- 

//print report.csv Table 
function printVolumeTable($case,$patientID){ 
echo "<html><body><table border='1'>\n\n"; 
$f = fopen("analyze/".$case."/".$patientID."/report.csv", "r"); 
while (($line = fgetcsv($f)) !== false) { 
     echo "<tr>"; 

     foreach ($line as $cell) { 
       echo "<td>" . htmlspecialchars($cell) . "</td>"; 
     } 
     echo "<tr>\n"; 
} 
fclose($f); 
echo "\n</table></body></html>"; 
} 


function showStatusComment($case) { 

    $connection = getMySqlConnection(); 
    $sql = "SELECT p.STATUS_NAME, c.volume_comments FROM cases c, primary_status_lookup as p WHERE c.volume_status=p.STATUS_ID and c.caseid='".$case."'"; 
    $result = mysql_query($sql, $connection) or die(mysql_error()); 

    if($result!== FALSE){ 
     while ($record = mysql_fetch_row($result)) { 
      $status=$record[0]; 
      $comments=$record[1]; 

      if($status == 'Clear Status') {$status = 'None'; $comments = 'None';} 
      print("<p><b>Table Status: </b>".$status."/<b>Comments: </b>".$comments."</p>"); 
     } 

    } 
} 

//Status & Comments 
function tableStatus($case) { 
    $connection = getMySqlConnection(); 
    $sql = "SELECT volume_status, volume_comments FROM cases WHERE caseid='".$case."'"; 
    $result = mysql_query($sql, $connection) or die(mysql_error()); 

    if($result!== FALSE){ 
     while ($record = mysql_fetch_row($result)) { 
      $status=$record[0]; 
      $comments=$record[1]; 

     print("<form><p>"); 

     showStatusComment($case); 
     statusDropdown($case,$status); 
     print("<input type=hidden name='case' value='".$case."'/>"); 
     print("&nbsp;&nbsp;&nbsp;<label><b>Comments:</b><textarea name='comments' cols=70 rows=2 >".$comments."</textarea></label><br/><br/>"); 
     print("<input type='submit' name='submit' value='Submit'/><INPUT type='button' value='Close Window' onClick='window.close()'></form>"); 


     } 
    } 

} 


//Status Dropdown 
function statusDropdown($case,$status){ 
    print("<b>Status:</b>"); 
    $dropdown = "<select name = 'status'><option selected='selected' value=NULL>--Select Status--</option>"; 

    $connection = getMySqlConnection(); 
    $sql = "SELECT STATUS_ID, STATUS_NAME FROM primary_status_lookup ORDER BY STATUS_ID ASC"; 
    $result = mysql_query($sql, $connection) or die(mysql_error()); 

    while($record=mysql_fetch_array($result)){ 

      if ($status == '') { 

      $dropdown .= "<option value = '{$record['STATUS_ID']}'> {$record['STATUS_NAME']}</option>"; 

      } else if (($status == $record['STATUS_ID']) && ($status == '99')) { 

      $dropdown .= "<option value = '{$record['STATUS_ID']}'> {$record['STATUS_NAME']}</option>"; 

      } else if ($status == $record['STATUS_ID']) { 

      $dropdown .= "<option value = '{$record['STATUS_ID']}' selected='selected'> {$record['STATUS_NAME']}</option>"; 

      } else { 

      $dropdown .= "<option value = '{$record['STATUS_ID']}'> {$record['STATUS_NAME']}</option>"; 

      } 
    } 
    $dropdown .="</select>"; 
    echo $dropdown; 

} 



function saveTableStatus($case) 
{ 
    //retrieve selected status 
    $status = ''; 
    if(isset($_REQUEST['status'])) { 
     $status = $_REQUEST['status']; 
    } 

    //retrieve typed comments 
    if(isset($_REQUEST['comments'])) { 
     $comments = $_REQUEST['comments']; 
    } 

    if($status=='NULL') { 
     print("<p class='error'>No status selected, please select a status and try again.</p>"); 
    } 

    else if (($status!=='NULL')){ 
     $connection = getMySqlConnection(); 
     mysql_query("START TRANSACTION", $connection); 

     if ($status =='99') {$comments = '';} 
     $result= mysql_query("Update cases Set volume_status=".$status.", volume_comments ='".mysql_real_escape_string($comments)."' Where caseid='".mysql_real_escape_string($case)."'", $connection); 
      if($result) { 
       mysql_query("COMMIT", $connection); 
       print("<p class='saved'>Table Status Updated!</p>"); 
      } else { 
       mysql_query("ROLLBACK", $connection); 
      } 
      mysql_close($connection); 

     } 
} 


?> 
+0

Мое предположение, это что-то не так с вашим файлом. попробуйте повторить '$ line' перед ошибкой – Ascherer

+0

Каков путь этого скрипта PHP и каков путь к скрипту PHP, который вы отправляете? Являются ли они одним и тем же файлом? – beiller

+1

Прежде всего, у вас есть странное имя файла, точки внутри строк, а строки не связаны надлежащим образом. Кроме того, отлаживайте свой '$ f = ...' и взгляните на '$ f', он открыт? – Aneri

ответ

0

Если вы формируете, и сценарий, который принимает форму размещенную не на том же пути, то ваш

$f = fopen("analyze/".$case."/".$patientID."/report.csv", "r"); 

не будет открывать один и тот же файл.

Edit -

Хорошо, я думаю, ваша проблема переменная $ случай. Если запрос отсутствует, случай $ пустой (""). Таким образом, вышеприведенная строка откроет «анализ /// report.csv». Как вы можете видеть в зависимости от этого кода

$case = ""; 
if(isset($_REQUEST['case'])) { 
$case = $_REQUEST['case']; 
} 
+0

Извините, я имел в виду, что они включены в то же самое файл * он в основном распознает через 'if (isset ($ _ REQUEST ['submit'])) { saveTableStatus ($ case); \t} ' – alchuang

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