2017-02-25 123 views
0

我正在處理可以由管理員更改當天單元格的背景顏色的日曆。更改將保存到服務器。現在,它不起作用。下面是JavaScript的一個部分:使用post()更新數據庫()

for(i=0; i<myDays.length; i++) { // Goes through each TD and creates a click event 
myDays[i].addEventListener("click", function(){ 
    if(this.classList.contains("avail")) { 
     this.classList.toggle("avail"); 
     this.classList.toggle("halfy"); 
     $.post("classChange.php", { dID: this.id, dClass: "halfy" }); 
    } 

這是classChange.php PHP代碼:

if(isset($_POST["dID"])){ 
    $stmt = $db->prepare("UPDATE original SET class=? WHERE id=?"); 
    $stmt->bind_param("ss", $dClass, $dID); 

    $dID = $_POST["dID"]; 
    $dClass = $_POST["dClass"]; 

    $stmt->execute(); 
    $stmt->close(); 
} else { 
    echo "Code error, dummy!"; 
} 

單擊單元格正確地改變細胞的類(和顏色),但不更新數據庫。我沒有收到任何錯誤。我認爲它必須是post()代碼或PHP代碼的問題。有什麼建議?

+0

在使用它們之後定義變量不會是成功的做法。如果Catalin Minovici已經充分解決了您的問題,請授予他綠色標記,否則請編輯您的問題以澄清問題。 – mickmackusa

回答

1

您需要在使用它們之前首先定義變量。

$dID = $_POST["dID"]; 
$dClass = $_POST["dClass"]; 
$stmt = $db->prepare("UPDATE original SET class=? WHERE id=?"); 
$stmt->bind_param("ss", $dClass, $dID); 
+0

感謝您的回覆。我嘗試了你的方法,但沒有奏效。由於各種原因,我使用$ db代替通常的$ conn。我正在使用MySQLi,而不是PDO。 「ss」只是表示接下來的兩個變量是字符串。我之前使用過這種方法;它可以在W3School上找到:[鏈接](https://www.w3schools.com/php/php_mysql_prepared_statements.asp) 我一直在爲其他代碼,我做了PHP錯誤,但我怎麼檢查?我向JS代碼添加了一個console.log,並且點擊時生成了正確的信息。如果可以的話請幫忙! – user6285791

+0

在使用它們之前定義變量絕對是在您的代碼中進行的更改。在execute()之後添加'printf(「錯誤:%s。\ n」,$ stmt-> error);''。你有任何mysql錯誤? –

+0

我提出了建議的更改,並且還將此添加到了PHP: 'echo json_encode(array(「resID」=> $ dID,「resClass」=> $ dClass));'。 然後,我添加了「輸出」到JS代碼: '$ .post(「classChange.php」,{\t dID:this.id,dClass:「halfy」},function(data){console.log .resID); console.log(data.resClass); \t},「json」);'。 現在我的代碼工作。不知道哪一位解決了問題,但謝謝! – user6285791