除了php代码之外,这是这里构建的示例: http://jsfiddle.net/MJU8S/ 每当编辑一个字段时,如果按下了输入,则应将更新发送到数据库。问题是根本没有发送任何东西。
我该如何解决这个烂摊子?它甚至可能吗?
<script type="text/javascript">
function edit(){
var input = this.getElementsByTagName("input")[0];
input.removeAttribute("disabled");
input.focus();
input.addEventListener("keypress", save, false);
}
function save(e){
if (e.type == "keypress" && e.keyCode != 13)
return;
this.setAttribute("disabled", "disabled");
/*removed*/document.cookie = "variable=" + this.getAttribute("name");
/*removed*/document.cookie = "value=" + this.getAttribute("value");
/*removed*/document.cookie = "id=" + this.getAttribute("id");
/*removed*/
<?php
$variable = $_COOKIE["variable"];
$value = $_COOKIE["value"];
$id = $_COOKIE["id"];
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("<script type=\"text/javascript\">parent.alert('Errore nella connessione al database: salvataggio interrotto.');</script>");
$update_query = "UPDATE Serie SET `$variable`='$value' WHERE `id`='$id'";
mysql_query($update_query) or die("<script type=\"text/javascript\">parent.alert('Errore nella query: salvataggio interrotto.');</script>");
mysql_close();
?>
}
</script>
编辑:感谢您的课程,这是我第一次为网络做点什么。如果我理解正确,我需要Ajax做一些没有刷新的东西,像这样吗?
<script type="text/javascript">
function edit(){
var input = this.getElementsByTagName("input")[0];
input.removeAttribute("disabled");
input.focus();
input.addEventListener("keypress", save, false);
}
function save(e){
if (e.type == "keypress" && e.keyCode != 13)
return;
this.setAttribute("disabled", "disabled");
/*new*/var value = this.getAttribute("value");
/*new*/if(value == "" || value == null)
/*new*/ return;
/*new*/ var variable = this.getAttribute("name");
/*new*/ var id = this.getAttribute("id");
/*new*/ xmlhttp.open("POST","update_query.php",true);
/*new*/ xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
/*new*/ xmlhttp.send("variable="+variable+"&value="+value+"&id="+id);
}
</script>
然后我想把这个连接放在“update_query.php”中:
<?php
$variable = $_POST["variable"];
$value = $_POST["value"];
$id = $_POST["id"];
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("<script type=\"text/javascript\">parent.alert('Errore nella connessione al database: salvataggio interrotto.');</script>");
$update_query = "UPDATE Serie SET $variable='$value' WHERE id='$id'";
mysql_query($update_query) or die("<script type=\"text/javascript\">parent.alert('Errore nella query: salvataggio interrotto.');</script>");
mysql_close();
?>
编辑:我错误地得到了一些价值。
function save(e){
if (e.type == "keypress" && e.keyCode != 13)
return;
this.setAttribute("disabled", "disabled");
/*new*/var value = e.target.value;
if(value == "" || value == null)
return;
/*new*/ var variable = e.target.name;
/*new*/ var id = e.target.id;
xmlhttp.open("POST","update_query.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("variable="+variable+"&value="+value+"&id="+id);
}
答案 0 :(得分:2)
您不能只在JavaScript中间放置一段PHP代码,并希望它能像您在问题示例中那样工作。
您的问题中的PHP代码将在服务器上运行一次,当请求页面时 - 代码将无法访问浏览器,如果您在浏览器中“查看”页面的来源,则不会在document.cookie = "id=" + this.getAttribute("id");
为了使您的JavaScript函数以您希望的方式保存到数据库,您需要通过AJAX请求将数据发送到服务器端PHP脚本,然后将获取该数据并保存
否则 - 一个简单的表单POST就足够了。
答案 1 :(得分:1)
另一个问题:
document.cookie = "variable=" + this.getAttribute("name");
document.cookie = "value=" + this.getAttribute("value");
document.cookie = "id=" + this.getAttribute("id");
您每次使用=
时都在重写document.cookie。设置cookie的工作代码应为:
document.cookie = "variable=" + encodeURIComponent(this.getAttribute("name"));
document.cookie += ";value=" + encodeURIComponent(this.getAttribute("value"));
document.cookie += ";id=" + encodeURIComponent(this.getAttribute("id"));
+=
附加下一个Cookie值,";
添加分号,分隔Cookie key1=value1;key2=value2
对。
此外,Cookie必须使用encodeURIComponent
进行编码。有关详细信息,请参阅http://www.thesitewizard.com/javascripts/cookies.shtml。
答案 2 :(得分:1)
你需要使用
AJAX如果您不想刷新页面。如果是这种情况,请查看http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first。您必须将编辑后的值传递给另一个php页面,该页面将为您执行数据库操作。 Javascript是一种客户端技术,主要在浏览器上进行操作。 PHP是一种服务器端技术,可以处理服务器上的资源。你好像误解了他们。
最简单的方法是简单地用ajax发布值。