-1

ドロップダウン ステータス選択とコメント用のテキスト領域を持つ PHP ページをコーディングしています。現在、送信時にドロップダウン リストとテキスト領域が正しく更新されるようにコーディングする方法を理解するのに苦労しています。

ドロップダウンのデフォルトを、値なしで「---Select Status---」を表示するように設定しました。

私の問題は、ステータスを選択してコメント領域で変更を加えるたびに、ステータスのみが更新され、コメントは同じままです。これを行うためのより効率的な方法があるかどうか疑問に思っていました..

更新: いくつか考えてみました... 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

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);
}
于 2013-06-03T07:01:44.373 に答える
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

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

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);
于 2013-06-01T19:43:34.600 に答える
1

あなたのformタグには noactionと noがありmethodます。したがって、フォーム送信をどのように処理して のような関数を実行するかは明確ではありませんsaveTableStatus($case)methodただし、フォーム送信のデフォルトは ですGET。したがって、フォームを変更statusしてcomment入力し、送信すると、データが URL として投稿されます。コメントが長いため、長い URL の処理に問題が発生する可能性があります。POSTフォームにメソッドを使用する方が良い<form method="POST">

于 2013-06-03T09:18:31.737 に答える