为什么我的PHP代码没有在表单提交时触发?

时间:2016-01-30 06:16:46

标签: php ajax forms

我将解释我的代码,然后在代码片段之后继续解决问题:

我有一个名为“functions_questions”的表单。当它被提交时,以下代码根据当前分数增加或减少我的sql数据库中的一个列(标题为“score”)(标题为“答案”)。

<?php  
    $id = $_SESSION['id'];

    if(isset($_POST['functions_question'])){

    $res = $db->query("SELECT score FROM answers WHERE id=$id");
    $data = $res->fetch_array();

    if($data['score']<2)$db->query("UPDATE answers SET score = score+1 WHERE id=$id");

    if($data['score']>1)$db->query("UPDATE answers SET score = score-1 WHERE id=$id");

  }

?>

我还有以下AJAX代码,在提交表单时自动更改div(id =“ajaxtest”)中的文本。当然,这样做没有刷新页面,因为它使用AJAX。

<script type='text/javascript'>

$(document).ready(function () {
$('#questionform').on('submit', function(e) {
    e.preventDefault();
    $.ajax({
        url : $(this).attr('action') || window.location.pathname,
        type: "POST",
        data: $(this).serialize(),
        success: function (data) { 

ajaxtest.innerHTML = '"<?php echo $data['score']; ?>"';

            },
        });
    });
});
</script>

最后,我有以下一些代码,它显示标题为“答案”的数据库中标题为“得分”的列中的值。

<?php
$resss = $db->query("SELECT * FROM answers WHERE id=$id");
$data = $resss->fetch_array();
var_dump($data['score']);
?>

当我提交表单时,我可以在数据库中看到分数已更新的管理员。 AJAX代码将div(ajaxtest)更改为$ data ['score'],但它会在更新之前显示前一个分数,而不是新更新的分数。如何修改此选项以便ajaxtest显示更新的分数而不是未更新的分数?

2 个答案:

答案 0 :(得分:0)

嗯,这是因为语句ajaxtest.innerHTML = '"<?php echo $data['score']; ?>"';会在提供文件后立即进行评估,从而转换为ajaxtest.innerHTML = <score when file was served>';

如果您想显示新值,那么您可以使用另一个异步请求(通常称为AJAX调用)检索它,或者返回代码中的值以管理调用和通过数据参数使用它:

修改

JS:

$(document).ready(function () {
    $('#questionform').on('submit', function(e) {
        e.preventDefault();
        $.ajax({
            url : $(this).attr('action') || window.location.pathname,
            type: "POST",
            data: $(this).serialize(),
            success: function (data) { 
                ajaxtest.innerHTML = data;
            },
        });
    });
});

PHP:

<?php
    $id = $_SESSION['id'];

    if(isset($_POST['functions_question'])){

        $res = $db->query("SELECT score FROM answers WHERE id=$id");
        $data = $res->fetch_array();

        if($data['score'] < 2)
            $db->query("UPDATE answers SET score = score+1 WHERE id=$id");

        if($data['score'] > 1)
            $db->query("UPDATE answers SET score = score-1 WHERE id=$id");
        $res = $db->query("SELECT score FROM answers WHERE id=$id");
        $data = $res->fetch_array();

        echo $data['score'];
    }

它是这样的:

  1. 提供文件并评估其中的所有PHP语句,并将响应发送到客户端
  2. 对服务器的AJAX请求
  3. 服务器处理请求
  4. AJAX收到回复(数据)
  5. 您使用回复数据
  6. 您可以通过启用开发人员工具(通常是ctrl + shift + i)和“网络”来检查Chrome中的AJAX请求结果。选项卡启用XHR。

答案 1 :(得分:0)

只需更改您的PHP代码: -

<?php  
    $id = $_SESSION['id'];

    if(isset($_POST['functions_question'])){

        $res = $db->query("SELECT score FROM answers WHERE id=$id");
        $data = $res->fetch_array();

        if($data['score']<2)$db->query("UPDATE answers SET score = score+1 WHERE id=$id");

        if($data['score']>1)$db->query("UPDATE answers SET score = score-1 WHERE id=$id");

        $res = $db->query("SELECT score FROM answers WHERE id=$id");
        $data = $res->fetch_array();

    }

?>

它可能对你有帮助。

我在更新新记录后得到分数。