Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提交时更新下拉选择和文本区域的最佳方法_Php_Mysql_Database - Fatal编程技术网

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

Php 提交时更新下拉选择和文本区域的最佳方法,php,mysql,database,Php,Mysql,Database,我正在编写一个PHP页面,该页面有一个下拉状态选择和一个用于注释的文本区域。目前,我很难弄清楚如何编码,以便在提交时正确更新下拉列表和文本区域 我已将下拉列表的默认值设置为显示'--Select Status---',不带任何值 我的问题是:每当我选择状态并在评论区域中进行更改时,只有状态得到更新,评论保持不变。我想知道有没有更有效的方法 更新:我已经考虑过了。。。有4种情况: 状态已更改/注释已更改 状态未更改/注释已更改 状态已更改/注释未更改 状态未更改/评论未更改 我该如何对其进行编码,

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

我已将下拉列表的默认值设置为显示'--Select Status---',不带任何值

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

更新:我已经考虑过了。。。有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>");
    
    
            }
        }
    
    //这是状态下拉菜单的功能
    函数状态下拉列表($case){
    打印(“状态:”);
    $dropdown=“--选择状态--”;
    $connection=getMySqlConnection();
    $sql=“按状态ID ASC从主状态查找顺序中选择状态ID、状态名称”;
    $result=mysql\u query($sql,$connection)或die(mysql\u error());
    而($record=mysql\u fetch\u array($result)){
    $dropdown.=“{$record['STATUS_NAME']}”;
    }
    $下拉列表=“”;
    echo$下拉列表;
    }
    //本部分包含状态下拉列表和注释(文本区域)
    函数表状态($case){
    $connection=getMySqlConnection();
    $sql=“选择caseid=”“$case.”的案例中的统计信息\状态、统计信息\注释;
    $result=mysql\u query($sql,$connection)或die(mysql\u error());
    如果($result!==FALSE){
    而($record=mysql\u fetch\u row($result)){
    $status=$record[0];
    $comments=$record[1];
    打印();
    showStatusComment($case);
    状态下拉列表($case);
    打印(“”);
    打印(“注释:.$Comments.”

    ); 打印(“”); } }
    }

    以下是我更新数据的代码:

    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);
    
            }
    }
    
    函数saveTableStatus($case)
    {
    //检索所选状态
    如果(isset($_请求['status'])){
    $status=$_请求['status'];
    }
    //检索键入的注释
    如果(isset($_请求['comments'])){
    $comments=$_请求['comments'];
    }
    如果($status='NULL'){
    打印(

    未选择状态,请选择一种状态并重试。

    ”; } else if(($status!='NULL')){ $connection=getMySqlConnection(); mysql_查询(“启动事务”,$connection); $result=mysql_query(“更新案例集统计信息_status=“.$status.”,统计信息_comments=“.mysql_real_escape_string($comments)”。“其中caseid=”。mysql_real_escape_string($case)。“”,$connection); 如果($结果){ mysql_查询(“提交”,$connection); 打印(

    表状态已更新!

    ); }否则{ mysql_查询(“回滚”,$connection); } mysql_close($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);
    

    检查为“统计和评论”栏添加的报价

    您编写的
    showStatusComment($case)
    函数在哪里?

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

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

    接下来,您需要检查它是否为NULL,而不是“NULL”:

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

    参考Nj Subedi answer,您必须在条件中使用value==null,因为null不应该是字符串

    以及在更新查询中重新修改代码。你应该用这个

    $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\u查询,因为它现在已经被弃用了。改用MySQLi或PDO_-MySQL。

    您应该编写两个不同的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);
    }
    

    您的
    表单
    标记没有
    操作
    方法
    。因此,不清楚如何处理表单提交以运行类似于
    saveTableStatus($case)
    的函数。
    但您应该知道,表单提交的默认
    方法是
    GET
    。因此,当您更改
    状态
    注释
    输入并提交表单时,它会将数据作为URL发布。由于注释过长,可能会导致处理长URL时出现问题。因此,最好对您的表单使用
    POST
    方法,如

    mysql_uuu函数已被弃用,您应该考虑使用MySQLi或PDO
    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);
    }