为什么我的 ajax 调用不将数据存储在数据库中?没有 PHP 或控制台错误

Why doesn't my ajax call store data in database? No PHP or console errors

本文关键字:没有 PHP 错误 控制台 数据库 调用 ajax 我的 存储 数据 为什么      更新时间:2023-09-26

>im 试图建立一个评级系统,您可以从 1-5 星进行评级,然后显示平均评级。

为此,请使用Ajax,jQuery,PHP,MySQL和HTML ofc。

以下是包含脚本和基本 html 的基本代码:

<?php 
    include('includes/config.php');
    $post_id = '1';
?>
<div class="ratesite">
    <h4>Betygssätt denna webbplats!</h4>
        <div class="rate-ex1-cnt">
            <div id="1" class="rate-btn-1 rate-btn"></div>
            <div id="2" class="rate-btn-2 rate-btn"></div>
            <div id="3" class="rate-btn-3 rate-btn"></div>
            <div id="4" class="rate-btn-4 rate-btn"></div>
            <div id="5" class="rate-btn-5 rate-btn"></div>
        </div>
<?php require_once 'includes/avgrate.php'; ?>
        <div id="avg-rate">
            <h5>Snittvärdet är <strong><?php echo $rate_value; ?></strong>.</h5>
        </div>
</div>
<!-- Script för rating -->
    <script>
        $(function(){ 
            $('.rate-btn').hover(function(){
                $('.rate-btn').removeClass('rate-btn-hover');
                var therate = $(this).attr('id');
                for (var i = therate; i >= 0; i--) {
                    $('.rate-btn-'+i).addClass('rate-btn-hover');
                };
            });
            $('.rate-btn').click(function(){    
                var therate = $(this).attr('id');
                var dataRate = 'act=rate&post_id=<?php echo $post_id; ?>&rate='+therate; //
                $('.rate-btn').removeClass('rate-btn-active');
                for (var i = therate; i >= 0; i--) {
                    $('.rate-btn-'+i).addClass('rate-btn-active');
                };
                $.ajax({
                    type : "POST",
                    url : "includes/ajax.php",
                    data: dataRate,
                    success:function(){}
                });
            });
        });
    </script>

从我使用"console.log"在脚本中搜索错误可以看出,脚本正在正常工作,所以我认为错误在我的 ajax 中.php这里:(我收到 0 个 PHP 错误,控制台中没有错误)

<?php
require_once 'config.php';
    if($_POST['act'] == 'rate'){
        //Kontrollera ifall användaren (IP) redan röstat.
        $ip = $_SERVER["REMOTE_ADDR"];
        $therate = $_POST['rate'];
        $thepost = $_POST['post_id'];
        $sql = "SELECT * FROM ratings where ip= '$ip'";
        $result = mysqli_query($conn, $sql); 
        while($data = mysqli_fetch_assoc($result)){
            $rate_db[] = $data;
        }
        if(@count($rate_db) == 0 ){
            mysqli_query("INSERT INTO ratings (id_post, ip, rate)VALUES('$thepost', '$ip', '$therate')");
        }else{
            mysqli_query("UPDATE ratings SET rate= '$therate' WHERE ip = '$ip'");
        }
    } 
?>

数据库连接工作正常,因为我是ajax的初学者,我认为最好在这里问问某人是否有人可以找到故障。

此外,脚本链接等的HTML头。

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" />
<!-- Visa användarnamn som titel i sidfliken -->
<title>Album</title>
<link rel="stylesheet" href="css/stylesheet.css" type="text/css" />
<!-- PIROBOX -->
<!--         -->
<link rel="stylesheet" type="text/css" href="css_pirobox/style_1/style.css"/>
<!--::: OR :::-->
<!-- <link rel="stylesheet" type="text/css" href="css_pirobox/style_2/style.css"/> -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.2.custom.min.js"></script>
<script type="text/javascript" src="js/pirobox_extended.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $().piroBox_ext({
        piro_speed : 900,
        bg_alpha : 0.1,
        piro_scroll : true //pirobox always positioned at the center of the page
    });
});
</script>
</head>

**编辑

我包含这样的连接:

<?php 
    $dbhost = 'xxxxx';
    $dbuser = 'xxxxx';
    $dbpass = 'xxxxx';
    $dbname = 'xxxxx';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) 
    or die('Kunde inte ansluta till databas');
    $db_connected  = mysqli_select_db($conn, $dbname);
?>
<?php
require_once 'config.php';
    if($_POST['act'] == 'rate'){
        //Kontrollera ifall användaren (IP) redan röstat.
        $ip = $_SERVER["REMOTE_ADDR"];
        $therate = $_POST['rate'];
        $thepost = $_POST['post_id'];

注意到将$sql声明为 SQL 查询的位置吗?注意到mysqli_query中的$conn了吗?$conn是指向数据库的指针/连接器。它允许您并行运行对不同服务器的不同查询。

    $sql = "SELECT * FROM ratings where ip= '$ip'";
    $result = mysqli_query($conn, $sql); 

现在。。。您在以下mysqli_fetch_assoc中的$conn在哪里?

    while($data = mysqli_fetch_assoc($result)){
        $rate_db[] = $data;
    }

为什么下面的mysqli_query没有以前$conn?

    if(@count($rate_db) == 0 ){
        mysqli_query("INSERT INTO ratings (id_post, ip, rate)VALUES('$thepost', '$ip', '$therate')");
    }else{
        mysqli_query("UPDATE ratings SET rate= '$therate' WHERE ip = '$ip'");
    }
} 

?>

最后,您的控制台.log将仅显示来自客户端/浏览器的错误。你的服务器上应该有一个php.log文件,其中包含有关你滥用mysqli_query的错误 - 如果你不知道这些在哪里,你只会给自己带来额外的工作和头痛,当你在实践中你接近你的目标

祝你好运!

从 php.net...

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] );

您没有为mysqli_query提供$link