1

私はプログラミングの問題を解決するときに助けを求めることを避けようとしていますが、今は困惑しており、あなたの善良な人々からの意見を聞くことができます.

シナリオ:

私が開発中のサイトに、特定のユーザーが Google マップ上の場所を訪問場所として選択できるページがあります。すべての更新は ajax を介して mySQL データベースに行われ、すべて正常に動作します。ユーザーが選択を終了したら、今年の選択プロセスをロックするボタンを押します。これは、Selection_Complete と呼ばれる訪問者テーブルのフラグ ビットに対して AJAX データベースの更新を行うだけで行われます。

問題:

数日前まではすべて問題ないように見えましたが、最終選択ボタンが押されたときに選択がロックされていないことに気付きました。

関連するコードは次のとおりです。

JavaScript の閉じる関数:

function closeSelection() {

var conf = confirm('Are you sure you want to finish selection ?');

if (conf === true){

    setCompletionStatus(userID,1,function(data){

        if (data === -1) {
            displayMessage ('Unable to close selection: an error occurred in update');
            console.error('setCompletionStatus() returned -1 a database error occoured during query');
            return;
        } else if (data === -2) {
            displayMessage ('Unable to close selection: an error occurred in update');
            console.error('setCompletionStatus() returned -2 a database error occurred during query');
            return;
        } else if (data === 0) {
            displayMessage ('Unable to close selection: an error occurred in update');
            console.error('Close selection returned 0 update enabled, should have been 1 to close');
            return;
        } else if (data === 1) {
            selectionComplete = data; // a global variable holding the current users selection status
            lockSelectBtns();
            displayMessage('Selection now closed for ' + dateInfo.getFullYear());
            $('#placementMessages').html('Selection closed for ' + dateInfo.getFullYear()).css({
                'color':'red' 
            }).show();
            return;
        } else {
              displayMessage ('Unable to lock selection: an error occurred in update');
              console.error('Unknown code: ' + data + ' returned by setCompletionStatus()' );
        } 
    },displayMessage);   
   }
 }

JavaScript Ajax ハンドラー:

    function setCompletionStatus (userID,isComplete,callback,failCallback) {
    if ((! jQuery.type(userID)=== 'String') && (! jQuery.type(userID)=== 'number')) {
        throw new Error ('The userID parameter of function  setNumChoices() (AJAX) was of type '+ jQuery.type(userID) +
            '\n either a String or an Integer was expected.');
    }
    $.ajax({
        data: {
            mode: 'setIsComplete',
            userID: userID,
            isComplete:isComplete
        }
    }).fail(function(jqHXR,textStatus,errorThrown) {
        console.error('An error occurred while calling setCompletionStatus() \n response text was: ' + jqHXR.responseText + 
            + ' \n status was: ' +  textStatus + '\n' + 'Header contents was: ' + errorThrown);

    }).done(function(data){
        if ( (typeof data === 'undefined')||(typeof data === 'null')) {
           failCallback ('Unable to set completion status');
            console.error('An error occurred while calling setCompletionStatus.done() data was null or undefined');
        }
        else  {
                callback(data);
        }   
      });
  }

PHP db クエリ コード:

public function setSelectionStatus($userID, $selectionComplete, $asJSON = TRUE) {try {
        $queryString = 'UPDATE Visitor 
                        SET Selection_Complete = :selectionComplete 
                        WHERE User_ID = :userID';

        $statementHandle = $this->_dbHandle->prepare($queryString);
        $statementHandle->bindValue(':selectionComplete', $selectionComplete);
        $statementHandle->bindValue(':userID', $userID);
         $success = $statementHandle->execute();
        $numRecords = $statementHandle->rowCount();

        if ( $success === false) {
            if ($asJSON) {
                echo json_encode(-1);
            }
            return -1;
        }
        else if ($numRecords === 0) {
            if ($asJSON) {
                echo json_encode(-2);
            }
            return -2;
        } else {
            if ($asJSON) {
                echo json_encode((int) $selectionComplete);
            }
            return (int) $selectionComplete;
        }
    } catch (PDOException $e) {
        echo 'Sorry,an error occurred while attempting update the current users selection status,administrators please check error logs for more details. <br/>' . PHP_EOL;

        error_log('An error occurred while attempting to run the query function' . __FUNCTION__ . ' of class ' . __CLASS__ . ' on server (' . $_SERVER['SERVER_NAME']
                . ')' . PHP_EOL . 'Details:' . PHP_EOL .
                'Message: ' . $e->getMessage() . PHP_EOL .
                'In file: ' . $e->getFile() . PHP_EOL .
                'On line: ' . $e->getLine() . PHP_EOL .
                'Stack trace:' . PHP_EOL . $e->getTraceAsString() . PHP_EOL, 0);
    }
}

データベース フィールドを設定すると、AJAX 関数は正しい値を返します ログにエラーは記録されません PDO も PDO ステートメントもエラーを返しません また、firebug を介して送受信されるデータを確認しましたが、それはまだデータベースですフィールドを更新するための空白を拒否しています。PHPを直接実行するだけで、毎回完全に機能する場合、AJAX呼び出し cos と関係があると確信しています。少し長くてすみません、誰か助けてくれませんか?私はほぼ1日それを見てきましたが、途方に暮れています。前もって感謝します。

4

0 に答える 0