2

$.ajax/PHP/MySQL データベースの挿入に関するエラーの原因を追跡するのは非常に困難です。

jQuery側は次のとおりです。

function SaveNewBranch(newBranchName, dataString) {
    console.log('In function SaveNewBranch(newBranchName, dataString). Value of
        newBranchName: ' + newBranchName + '. Value of dataString: ' + 
        dataString + '.');

    $.ajax({
        type: 'POST',
        url: '../scripts/branchAdmin.php',
        data: dataString,
        dataType: 'json',
        success: function(newBranchID) {

            console.log('from server: ' . newBranchID);

            // Clear the page
            ClearPageForNewSelection();

            PopulateBranchDropdown(newBranchID);
        },
        error: function(xhr, status, error) {
            console.log('datastring: ' + dataString);
            alert('An error occurred while attempting to save the branch to the 
                database. jqXHR object: ' + xhr + '. Status: ' + status + '. Error
                message: ' + error + '. An error log with more details has been
                created on the server. If the error persists, contact your site
                administrator.');
        }
    });
} // End Save New Branch

PHPコードは次のとおりです。

if(isset($_POST['newBranchName']) &&
    isset($_POST['newBranchAddr1']) &&
    isset($_POST['newBranchAddr2']) &&
    isset($_POST['newBranchCity']) &&
    isset($_POST['newBranchState']) &&
    isset($_POST['newBranchZip']) &&
    isset($_POST['newBranchPhone']) &&
    isset($_POST['newBranchFax']) &&
    isset($_POST['newBranchUrl'])) {

    require_once('dbConnect.php');

    $log->lwrite('name: ' . mysqli_real_escape_string($dbc,$_POST['newBranchName']) .
        ', addr1: ' . mysqli_real_escape_string($dbc,$_POST['newBranchAddr1']) . ',
        addr2: ' .  mysqli_real_escape_string($dbc,$_POST['newBranchAddr2']) . ',
        city: ' . mysqli_real_escape_string($dbc,$_POST['newBranchCity']) . ',
        state: ' .$_POST['newBranchState'] . ', zip: ' .
        mysqli_real_escape_string($dbc,$_POST['newBranchZip']) . ', phone: ' .
        mysqli_real_escape_string($dbc,$_POST['newBranchPhone']) . ', fax: ' . 
        mysqli_real_escape_string($dbc,$_POST['newBranchFax']) . ', url: ' . 
        mysqli_real_escape_string($dbc,$_POST['newBranchUrl']));

    $_POST['newBranchState'] == '0' ? $newBranchState = '' : $newBranchState = 
        strtoupper(mysqli_real_escape_string($dbc,$_POST['newBranchState']));

    $queryInsertNewBranch = "INSERT INTO branches (name, address1, address2, city, 
        state, zipCode, phone, fax, url) VALUES ('" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchName']) . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchAddr1']) . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchAddr2']) . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchCity']) . "', '" .
        newBranchState . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchZip']) . 
        "', '" . mysqli_real_escape_string($dbc,$_POST['newBranchPhone']) . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchFax']) . "', '" . 
        mysqli_real_escape_string($dbc,$_POST['newBranchUrl']) . "')";

    $log->lwrite('new branch insert: ' . $queryInsertNewBranch);

    $resultInsertNewBranch = @mysqli_query($dbc, $queryInsertNewBranch);
    ...

「dataString」のコンソール出力を介して、適切なデータが php スクリプトに渡されることを確認しました。

テスト挿入のコンソールへの出力:

newBranchName: A Test Branch, datastring: newBranchName=A Test branch&
    newBranchAddr1=123 StateSt.&newBranchAddr2=#123&
    newBranchCity=Anywhere&newBranchState=MN&newBranchZip=12343&
    newBranchPhone=555-555-1212&newBranchFax=555-555-2121&newBranchUrl=minnesota

また、php スクリプトの最初の $log->lwrite 行をチェックして、php スクリプトが適切なデータを取得していることを確認しました。

同じ挿入テストのログへの出力:

new branch insert: INSERT INTO branches (name, address1, address2, city, state,
    zipCode, phone, fax, url) VALUES ('A Test Branch', '123 State St.', '#123',
    'Anywhere', 'MN', '12343', '555-555-1212', '555-555-2121', 'minnesota')

最後の $log->lwrite エントリ (新しいブランチの挿入) はログ ファイルに書き込まれません。

また、jQuery 側でエラー関数が起動され、アラート ボックスが表示されます。そこにある 3 つのオブジェクトの値は次のとおりです。

jqXHR object: [object Object]
Status: parsererror
Message: Unexpected token e

データを取得するフォームに何を入力しても、常に同じ結果が得られます。INSERT は実行されず、エラー関数の警告ボックスが表示され、毎回同じメッセージが表示されます。

私はコードのあらゆる詳細を何度も何度も調べ、間違ったスペースや二重引用符があるはずの単一引用符などを探しました。

jqXHR オブジェクトが手がかりを保持している可能性がある場合、その要素を取得する方法がわかりません。どうやってそれをしますか?

私(および私のクライアント)は、これを理解するために私が得ることができるどんな助けにも非常に感謝しています!

助けてくれてありがとう...

4

1 に答える 1

0

理由は本当にわかりませんが、これが問題の原因でした(おそらく、これが挿入を壊した理由として誰かが私を啓発することができます):

質問にコードを追加するときに、とにかく質問に関係がないと思われる行を削除しました。

行は次のとおりです。

echo 'new branch state: ' . $newBranchState;

そして、それは $newBranchState 変数を設定する三項演算子行の直後でした (これは機能します)。

そのエコーラインアウトにコメントすると、問題が解決しました。

さて、スクリプトの残りの部分が壊れて、そのエラーが発生する理由を誰か教えてもらえますか? 「予期しないトークン e」がどこから来ているかわかりましたが、そのエコーの前の行の最後にセミコロンがあるため、なぜそれが問題を引き起こすのかわかりません...

于 2013-02-28T16:11:59.647 に答える