-3

这是在此处构建的示例,除了 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>




你对声望点很严厉,不是吗?=P 顺便说一句...

编辑:感谢您的课程,这是我第一次为网络做点什么。如果我理解正确,我需要 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);
}
4

3 回答 3

2

您不能只是将一段 PHP 代码放在 JavaScript 中间并期望它像您在问题示例中那样工作。

当页面被请求时,您问题中的 PHP 代码将在服务器上运行一次 - 代码不会到达浏览器,如果您在浏览器中“查看页面的源代码”,之后您将看不到任何内容线document.cookie = "id=" + this.getAttribute("id");

为了使您的 JavaScript 函数以您希望的方式保存到数据库中,您需要通过 AJAX 请求将数据发送到服务器端 PHP 脚本,然后该脚本将获取该数据并保存它。

否则 - 一个简单的表单 POST 就足够了。

于 2013-11-12T02:35:46.290 回答
1

你需要使用

  • 如果您不想刷新页面,请使用 AJAX。如果是这种情况,请查看http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first。您必须将编辑后的值传递给另一个 php 页面,该页面将为您执行数据库操作。Javascript是一种客户端技术,主要在浏览器上进行操作。PHP 是一种服务器端技术,它将在服务器上的资源上工作。看来你误解了他们。

  • 最简单的方法是简单地发布不带 ajax 的值。

于 2013-11-12T02:47:54.440 回答
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"));

Where+=附加下一个 cookie 值,并";添加分号,用于分隔 cookiekey1=value1;key2=value2对。此外,cookie 必须使用encodeURIComponent. 有关详细信息,请参阅http://www.thesitewizard.com/javascripts/cookies.shtml

于 2013-11-12T02:45:56.257 回答