2017-02-25 120 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