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 で という名前の var をチェックインしますstate

また、3 つの変数すべてを設定する必要があるため、条件は失敗します。

また、ハンクがコメントで言ったように、jQuery.Ajax呼び出しは POST ( ) を使用しますが、PHP スクリプトでは、もちろん設定されていない変数をtype: 'post',チェックします。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 に答える