0

我是使用 ajax 的初学者,正在尝试通过单击图像来更改阅读状态。我有代码工作但没有ajax。现在我没有 php 错误,但 mysql 没有变化。编码:

<script type="text/javascript">
    function sendState(state_id){
        var hd_haveread = $("#hd_haveread").val();
        var hd_toread = $("#hd_toread").val();
        var hd_reading = $("#hd_reading").val();

        var val = 0;
        var baseurl = "img/";

        switch(state_id){
            case 1:
                if (hd_haveread == "0"){
                    document.getElementById('hd_haveread').value = "1";
                    document.getElementById('hd_toread').value = "0";
                    document.getElementById('hd_reading').value = "0";
                    val = 1;
                }
                else{
                    document.getElementById('hd_haveread').value = "0";
                    val = 0;
                }
            break;
            case 3:
                if (hd_toread == "0"){
                    document.getElementById('hd_toread').value = "1";
                    document.getElementById('hd_haveread').value = "0";
                    document.getElementById('hd_reading').value = "0";
                    val = 1;
                }
                else{
                    document.getElementById('hd_toread').value = "0";
                    val = 0;
                }
            break;
            case 2:
                if (hd_reading == "0"){
                    document.getElementById('hd_reading').value = "1";
                    document.getElementById('hd_haveread').value = "0";
                    document.getElementById('hd_toread').value = "0";
                    val = 1;
                }
                else{
                    document.getElementById('hd_reading').value = "0";
                    val = 0;
                }
            break;
        }

        var parameters = {
            "book" : <?php echo $id_book; ?>,
            "state" : state_id,
            "val" : val
        };
        $.ajax({
            cache: false,
            data:  parameters,
            url:   'change_state_ajax.php',
            type:  'post',
            dataType: "html",
            beforeSend: function (){
            },
            success: function (response){
                switch(state_id){
                    case 1:
                        if (hd_haveread == "0"){
                            $("#img_haveread1").css("display","none");
                            $("#img_haveread2").css("display","inline-block");
                            $("#img_toread1").css("display","inline-block");
                            $("#img_toread2").css("display","none");
                            $("#img_reading1").css("display","inline-block");
                            $("#img_reading2").css("display","none");
                        }
                        else{
                            $("#img_haveread1").css("display","inline-block");
                            $("#img_haveread2").css("display","none");
                        }
                    break;
                    case 3:
                        if (hd_toread == "0"){
                            $("#img_haveread1").css("display","inline-block");
                            $("#img_haveread2").css("display","none");
                            $("#img_toread1").css("display","none");
                            $("#img_toread2").css("display","inline-block");
                            $("#img_reading1").css("display","inline-block");
                            $("#img_reading2").css("display","none");
                        }
                        else{
                            $("#img_toread1").css("display","inline-block");
                            $("#img_toread2").css("display","none");
                        }
                    break;
                    case 2:
                        if (hd_reading == "0"){
                            $("#img_haveread1").css("display","inline-block");
                            $("#img_haveread2").css("display","none");
                            $("#img_toread1").css("display","inline-block");
                            $("#img_toread2").css("display","none");
                            $("#img_reading1").css("display","none");
                            $("#img_reading2").css("display","inline-block");
                        }
                        else{
                            $("#img_reading1").css("display","inline-block");
                            $("#img_reading2").css("display","none");
                        }
                    break;
                }
            }
        });
    }
</script>

和 change_state_ajax.php 代码:

<?php

    if(isset($_POST['book']) && isset($_POST['state']) && isset($_POST['val'])){
        include 'connection.php';
        include('php_lib/config.ini.php');
        include_once('php_lib/login.lib.php');

        $lib_id = $_POST['book'];
        $state = $_POST['state'];
        $val = $_POST['val'];

        $result=changeState($lib_id, $state, $val); 
        echo $result;
    }

    function changeState($lib_id, $state, $val){
        session_start();
        $usu_id = $_SESSION['USSER']['id'];
        $mark = 0;
        $pos = 0;

        $query = $pdo->prepare('SELECT uliusu_id, ulilib_id, uliedl_id FROM '.TABLE_USSERS_BOOKS.' WHERE ulilib_id = :fil_lib_id AND uliusu_id = :fil_usu_id');
        $query->bindParam(':fil_lib_id', $lib_id, PDO::PARAM_INT);
        $query->bindParam(':fil_usu_id', $usu_id, PDO::PARAM_INT);
        $query->execute();

        while($row = $query->fetch(PDO::FETCH_OBJ)){
            $mark = 1;
            $state_actual = $row->uliedl_id;
        }

        if($mark == 0){
            $query = $pdo->prepare('INSERT INTO '.TABLE_USSERS_BOOKS.' (uliusu_id, ulilib_id, uliedl_id, uli_posicion, uli_fecha) VALUES (:fil_usu_id, :fil_lib_id, :fil_edl_id, :fil_pos, NOW())');
            $query->bindParam(':fil_usu_id', $usu_id, PDO::PARAM_INT);
            $query->bindParam(':fil_lib_id', $lib_id, PDO::PARAM_INT);
            $query->bindParam(':fil_edl_id', $state, PDO::PARAM_INT);
            $query->bindParam(':fil_pos', $pos, PDO::PARAM_INT);
            $query->execute();
        }else{
            if($state == $state_actual){
                $query = $pdo->prepare('DELETE FROM '.TABLE_USSERS_BOOKS.' WHERE ulilib_id = :fil_lib_id AND uliusu_id = :fil_usu_id');
                $query->bindParam(':fil_usu_id', $usu_id, PDO::PARAM_INT);
                $queryquery->bindParam(':fil_lib_id', $lib_id, PDO::PARAM_INT);
                $query->execute();
            }else{
                $query = $pdo->prepare('UPDATE '.TABLE_USSERS_BOOKS.' SET uliedl_id = :fil_edl_id WHERE ulilib_id = :fil_lib_id AND uliusu_id = :fil_usu_id');
                $query->bindParam(':fil_edl_id', $state, PDO::PARAM_INT);
                $query->bindParam(':fil_usu_id', $usu_id, PDO::PARAM_INT);
                $query->bindParam(':fil_lib_id', $lib_id, PDO::PARAM_INT);
                $query->execute();
            }
        }

        if($state == 1){
            $result = 0;
        }else{
            $result = 1;
        }

        return $result;
    }
?>

谁能帮我解决这个问题?

谢谢。

4

2 回答 2

1

您没有检查正确的变量。您的 JavaScript 传递了一个名为的 var,estado但您在 PHP 中检查了一个名为state.

而且因为您需要设置所有三个变量,所以您的条件失败。

就像 Hank 在他的评论中所说的那样,您的jQuery.Ajax调用使用 POST ( type: 'post',),但是在您的 PHP 脚本中,您检查GET了当然没有设置的变量。

要么将您的 jQuery 调用类型更改为,要么将GET您的 PHP 脚本中的检查更改为POST

if(isset($_POST['book']) && isset($_POST['state']) && isset($_POST['val'])){
    include 'connection.php';
    include('php_lib/config.ini.php');
    include_once('php_lib/login.lib.php');

    $lib_id = $_POST['book'];
    $state = $_POST['state'];
    $val = $_POST['val'];

    $result=changeState($lib_id, $state, $val); 
    echo $result;
}
于 2013-09-30T18:30:46.440 回答
0

我注意到的事情:

1)首先你在发布,但在 PHP 中,你使用的是 $_GET。

2)您正在传递“book”、“estado”、“val”,但正在尝试获取“book”、“state”、“val”,因此它永远不会进入 if 条件

于 2013-09-30T18:31:30.647 回答