2013-02-28 78 views
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腳本通過檢查第一$對數> 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') 

最後$對數> lwrite項(新枝插)永遠不會被寫入日誌文件。

同樣在jQuery端,錯誤函數被激發,顯示警告框。這三個對象的值有:

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

不管我怎麼進入,是以數據的形式,我總是得到相同的結果:INSERT從不運行,並在誤差函數的警告框顯示 - 每次都有相同的信息。

我已經多次查看代碼的每一個細節,尋找一個錯誤的空間或雙引號應該是單引號等等。而且我不能爲我的生活找到什麼問題是!

如果jqXHR對象可能有線索,我不知道如何獲取該元素。你是怎樣做的?

我(和我的客戶)會非常感謝我能找到的任何幫助!

感謝您的幫助......

+0

檢查響應文本與您的瀏覽器開發工具。 – 2013-02-28 15:42:03

+0

從php刪除@所以你可以看到錯誤,我jquery部分如何dataString格式化 – ddjikic 2013-02-28 15:43:22

+0

你試過運行新的分支插入mysql查詢手動?這可能只是一個MySQL錯誤。 – Keeleon 2013-02-28 15:45:19

回答

0

我真的不知道爲什麼,但是這是什麼造成的問題(也許有人能指教我爲什麼這打破了刀片):

當將代碼添加到我的問題中,我刪除了一條我認爲與問題無關的行。

線路是這樣的:

echo 'new branch state: ' . $newBranchState; 

它三元操作線設置$ newBranchState變量後立即(其中不工作)。

評論回聲線解決了問題。

現在,有人可以告訴我爲什麼會導致腳本的其餘部分打破並給我那個錯誤?我現在看到「意外的令牌e」來自哪裏,但在回顯之前的行末尾有分號,所以我不明白爲什麼會導致問題...