-1

我正在编写一个 PHP 页面,该页面有一个下拉状态选择和一个用于评论的文本区域。目前,我无法弄清楚如何编码,以便下拉列表和文本区域在提交时正确更新。

我已将下拉菜单的默认设置为显示“---选择状态---”,没有任何值。

我的问题是:每当我选择状态并在评论区域进行更改时,只有状态会更新,评论保持不变。我想知道是否有更有效的方法来做到这一点..

更新:我已经考虑过了......有4种情况:

  1. 状态改变/评论改变
  2. 状态不变/评论改变
  3. 状态已更改/评论未更改
  4. 状态不变/评论不变

我该如何进行编码以使其在所有情况下都更新?

这是我的下拉状态/评论文本区域的代码:

// this is the function for status dropdown menu
function statusDropdown($case){
    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)){
            $dropdown .= "<option value = '{$record['STATUS_ID']}'> {$record['STATUS_NAME']}</option>";
    }
    $dropdown .="</select>";
    echo $dropdown;

}

//This part incorporates Status dropdown & Comments (text area)

function tableStatus($case) {
    $connection = getMySqlConnection();
    $sql = "SELECT statistics_status, statistics_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);
        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'/></form>");


        }
    }

}

这是我更新数据的代码:

function saveTableStatus($case)
{
    //retrieve selected 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);
        $result= mysql_query("Update cases Set statistics_status=".$status.", statistics_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

6 回答 6

2

你写的showStatusComment($case)函数在哪里?
如果您忘记编写函数 showStatusComment(),请在该函数中编写一些处理注释的代码。

于 2013-05-29T12:34:07.423 回答
1
$result= mysql_query("Update cases Set statistics_status=".$status.", statistics_comments =".mysql_real_escape_string($comments)." Where caseid='".mysql_real_escape_string($case)."'", $connection);

这种说法应该是

$result= mysql_query("Update cases Set statistics_status=".$status.", statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid='".mysql_real_escape_string($case)."'", $connection);

检查为“statistics_comments”列添加的引用。

于 2013-05-28T16:24:19.827 回答
1

您已经value=NULL在 HTML 中使用过,并针对“NULL”字符串进行了检查。您需要在代码中进行的主要修改是删除该value=NULL属性。

接下来,您需要根据 NULL 而不是 'NULL' 来检查它:

if ( $status == NULL ) {
    print("<p class='error'> . . . </p>");
}

这显然应该解决问题。此外,请参阅 Rameshkrishnan S 的修改回复:

$result= mysql_query("Update cases Set statistics_status='".$status."', statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid='".mysql_real_escape_string($case)."'", $connection);
于 2013-06-01T19:43:34.600 回答
1

请参阅 Nj Subedi 答案,您必须在您的条件下使用 value==null ,因为 null 不应该是字符串。

并用于重新修改 UPDATE 查询中的代码。你应该使用这个。

$result =  mysql_query("Update cases Set statistics_status='".$status."',statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid=".mysql_real_escape_string($case), $connection);

注意:我删除了 caseid 中的引号,因为我认为它不是字符串。所以不需要加引号。

顺便说一句,您不应该使用 mysql_query 因为它现在已被弃用。请改用 MySQLi 或 PDO_MySQL。

于 2013-06-03T06:36:35.863 回答
1

您应该编写 2 个不同的 sql 查询。这条线产生了问题

else if (($status!=='NULL')){

它仅在状态不为空时运行更新查询。但在您的情况下,它应该在每种情况下运行。

if($status!='NULL'){
    mysql_query("Update cases Set statistics_status=".$status." Where caseid='".mysql_real_escape_string($case)."'", $connection);
}

if($comments!='NULL'){
    mysql_query("Update cases Set statistics_comments =".mysql_real_escape_string($comments)." Where caseid='".mysql_real_escape_string($case)."'", $connection);
}
于 2013-06-03T07:01:44.373 回答
1

您的form标签有 noaction和 no method。因此,不清楚,您如何处理表单提交以运行类似saveTableStatus($case). 但是你应该知道,method表单提交的默认值是GET. 因此,当您更改statuscomment输入和提交表单时,它会将数据作为 URL 发布。由于长评论,可能会导致处理长 URL 的问题。所以最好POST为你的表格使用方法,比如<form method="POST">

于 2013-06-03T09:18:31.737 回答