在提交时更新下拉选择和文本区域的最佳方法

时间:2013-05-23 21:03:16

标签: php mysql database

我正在编写一个PHP页面,其中包含下拉状态选择和注释文本区域。目前,我无法确定如何编码,以便下拉列表和文本区域在提交时正确更新。

我已将下拉列表的默认值设置为显示'---选择状态---',没有值。

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

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

  1. 状态已更改/评论已更改
  2. 状态未更改/评论已更改
  3. 状态已更改/评论未更改
  4. 状态不变/评论不变
  5. 如何对其进行编码以便在所有场合更新?

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

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

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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”列添加的报价。

答案 2 :(得分:1)

您在HTML中使用了value=NULL,并针对“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);

答案 3 :(得分: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。

答案 4 :(得分:1)

您应该编写2个不同的SQL查询。 这一行会产生问题

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

它仅在状态不为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);
}

答案 5 :(得分:1)

您的form标记没有action,没有method。因此,它不清楚,如何处理表单提交以运行像saveTableStatus($case)这样的函数。 但您应该知道,表单提交的默认methodGET。因此,当您更改statuscomment输入并提交表单时,它会将数据作为网址发布。由于长注释,它可能会导致处理长URL的问题。最好对POST

等表单使用<form method="POST">方法