0

.CSV ファイルを読み取って、HTML の表形式で印刷しようとしています。ページの最後には、コメントが送信されてデータベースに保存されるコメント テキスト フィールドがあります。

以下のコードをローカルでテストしたところ、正常に動作しました。Linuxサーバーで実行しようとすると、最初に開いたときに正常に印刷されますが、送信を押してコメントを保存すると、ページが更新され、表が印刷されません. 「foreach() に無効な引数が指定されました」というエラーが発生します。(注:これはローカルでは発生しません。必要なものをすべて送信でき、エラーは返されません。)

stackoverflow で検索しましたが、これらの問題のほとんどは、変数を配列として宣言することに関連しているようです。ただし、コードが最初はエラーなしで正常に動作するのは奇妙に思えますが、送信するとエラーが返されます。

更新: 以下に投稿されたファイルの完全なコード。

<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);

        }
}


?>
4

1 に答える 1

0

フォームを作成し、投稿されたフォームを取得するスクリプトが同じパスにない場合、

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

同じファイルを開くことはありません。

編集 -

さて、あなたの問題は $case 変数だと思います。リクエストがない場合、$case は空白 ("") です。したがって、上記の行は「analyze///report.csv」を開きます。このコードに応じてわかるように

$case = "";
if(isset($_REQUEST['case'])) {
$case = $_REQUEST['case'];
}
于 2013-05-30T18:31:15.403 に答える