【发布时间】:2021-10-31 05:53:42
【问题描述】:
我一直在研究一个问题,但我不知道如何解决它或解决方案是什么。我正在使用infinityfree 作为免费用户在我的网站上工作。我正在创建一个简单的评论页面,用户可以在其中输入然后用星号对其进行评分。评论被提交到我的数据库,文本正确,但星数没有添加到($_POST["ratedIndex"])。
当我尝试回显变量 ratedIndex 时,它是空的。似乎它没有按预期通过 Ajax 发送,我不知道为什么。警报不会触发,但对星星的点击会在 chrome 检查元素的网络面板上注册。希望我不是一个彻头彻尾的傻瓜,因为我是创建网站的新手,所以我没有错过一些必不可少的东西,并且任何帮助都是非常学徒的。
gameInfo.php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST"){
require_once 'DBConnect.php';
$game;
$user;
$review;
$userid;
$ratedIndex;
$stmt = $conn->prepare("INSERT INTO reviews(game, user, userid, review, indexStar) VALUES (?,?,?,?,?)");
$stmt->bind_param("sssss",$game, $user, $userid, $review, $ratedIndex);
$userid = $_SESSION["userid"];
$game = $gameTitle;
$user = $_SESSION["username"];
$review = $_POST["uploadReview"];
$ratedIndex = ($_POST["ratedIndex"]);
$stmt->execute();
}
?>
<?php
$id = $_SESSION["userid"];
$gamename = $gameTitle;
$rowzero ="0";
$sql_ifreviewexist ="SELECT * FROM reviews WHERE reviews.game=?";
$exist = $conn->prepare($sql_ifreviewexist);
$exist->bind_param('s', $gamename);
$exist->execute();
$res = $exist->get_result();
$reviewexist_row = mysqli_num_rows($res);
if((isset($_SESSION["username"])) && ($reviewexist_row==$rowzero)) {
echo ' <div id="noreviewsExists">
<div class="instructions"><p>Write a review for '.$gamename.'</p></div>
<form id="reviewForm" method="POST" action="">
<textarea type="text" id="reviewTextarea" name="uploadReview"></textarea>
<div class="reviewStars">
<i class="fa fa-star" data-index="0"></i>
<i class="fa fa-star" data-index="1"></i>
<i class="fa fa-star" data-index="2"></i>
<i class="fa fa-star" data-index="3"></i>
<i class="fa fa-star" data-index="4"></i>
</div>
<div id="submitReview">
<button id="submitButton" type="submit" form="reviewForm">Submit</button>
</div>
</form>
</div>';
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var ratedIndex = -1;
$(document).ready(function () {
resetStarColors();
$('.fa-star').on('click', function (){
ratedIndex = parseInt($(this).data('index'));
$.ajax({
url: "gameInfo.php",
method: "POST",
dataType: 'json',
data: {
ratedIndex: ratedIndex
}, success: function (data){
alert("ok");
}
});
});
$('.fa-star').mouseover(function () {
resetStarColors();
var currentIndex = parseInt($(this).data('index'));
setStars(currentIndex);
});
$('.fa-star').mouseleave(function () {
resetStarColors();
if(ratedIndex != -1)
setStars(ratedIndex);
});
});
function setStars(max) {
for (var i=0; i <=max; i++)
$('.fa-star:eq('+i+')').css('color', 'yellow');
}
function resetStarColors() {
$('.fa-star').css('color', 'black');
}
</script>
编辑:
在ADyson 的一些见解之后,我做了这样的事情:
$test = $_POST["ratedIndex"];
if((isset($_SESSION["username"])) && ($reviewexist_row==$rowzero)) {
echo '<div>'.$test.'</div>';
...}
所以现在我更加疑惑为什么我尝试将它插入到表格中时它不起作用。
【问题讨论】:
-
@MainulHasan 这正是他们想要做的。它将评分值发送到服务器
-
the number of stars doesn't register....这到底是什么意思?你是说当 Ajax 运行时它不会在数据库中插入一行? -
附言。您正在使用一个名为 $gameTitle 的变量,但其值似乎并未在代码中的任何位置定义
-
@ADyson 我试图用
echo查看为什么当我提交星数不存在时,我知道$_POST["ratedIndex"])是空的。$gameTitle来自我的另一个页面选择语句,到目前为止这不是问题$gameTitle = "counterstrike"; -
您到底在哪里寻找回显值?请记住,Ajax 请求不会自动显示在屏幕上...您需要在浏览器网络工具中查看该 Ajax 请求的响应
标签: javascript php jquery ajax