我有一个普通的 html 表格,其中每个单元格都包含一个名称。我已经为这些单元格中的每一个添加了一个函数,它将单元格背景颜色变为绿色,如果它是白色,反之亦然。但是,我也想更新一个 mySql 数据库,当一个单元格被点击时,但我似乎无法找到一个好的方法来做到这一点,而不重新加载页面(我不想这样做)或使用 javascript连接到服务器(这似乎是一个非常糟糕的做法)。此时页面已经加载。大家有什么好的建议吗?
<script type="text/javascript">
var tbl = document.getElementById("table");
if (tbl != null) {
for (var i = 1; i < tbl.rows.length; i++) {
for (var j = 0; j < tbl.rows[i].cells.length; j++)
tbl.rows[i].cells[j].onclick = function () { getval(this); };
}
}
function getval(cel) {
if(cel.style.backgroundColor == "green")
{
cel.style.backgroundColor = "white";
// Here I would like to update my datebase with mySql
// query(UPDATE team SET attended=0 WHERE name = cel.innterText)
// (name associated with the cell)
}
else
{
cel.style.backgroundColor = "green";
// Here I would like to update my datebase with mySql
// query(UPDATE team SET attended=1 WHERE name = cel.innterText)
// (name associated with the cell)
}
}
</script>
最佳答案
从广义上讲,您需要将应用程序的一部分转变为一项服务,并通过来自您页面的异步 HTTP 请求调用它(这属于“AJAX”名称)。
该服务可以在您的服务器上编写为一个额外的 PHP 脚本,它可能不一定返回 HTML 文档,但可能返回 XML 或 JSON(后者现在可能更流行),这将由您的 JavaScript 脚本处理在浏览器中进行必要的进一步操作(例如,仅当此请求成功时才将背景变为白色)。
处理 SQL 查询的正是这个 PHP 脚本。
作为一般准则,不要在客户端(在您的 JavaScript 脚本中)准备或处理任何 SQL,并确保使用 prepared statements when running your SQL queries . (我只是这么说,因为你显然是新手,你不可避免地会在这里或各种博客上找到代码片段,人们只是通过使用查询字符串中的变量将他们放入的变量放入他们的 SQL 语句中。这是非常糟糕的做法。)
编辑:
实际上我只需要继续 W3Schools to have a bad example of MySQL query that is vulnerable to SQL injection (问题出在 $sql="SELECT * FROM user WHERE id = '".$q."'";
)。不要使用这个例子。我会避免使用 W3School,请参阅 http://www.w3fools.com/
关于php - 在javascript函数中更新sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379371/