我收到的错误如下:
警告:mysqli_fetch_assoc()要求参数1为mysqli_result,第45行/Applications/MAMP/htdocs/live/vote_process.php中给出布尔值
当我喜欢(竖起大拇指)内容或文章并且数据库表中的记录永远不会更新时,会显示此错误。但是,当我不喜欢(竖起大拇指)内容或文章时,错误永远不会出现。
不喜欢(拇指朝下)记录会在您不喜欢时显示在页面上,但一旦刷新页面就会显示0。有没有更好的方法来纠正这个?以下是我的代码:
PHP代码
<?php
if ($_POST) {
### connect to mySql
$sql_con = mysqli_connect($db_host, $db_username, $db_password, $db_name) or die('could not connect to database');
//get type of vote from client
$user_vote_type = trim($_POST["vote"]);
//get unique content ID and sanitize it (cos we never know).
$music_id = filter_var(trim($_POST["music_id"]), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
//Convert content ID to MD5 hash (optional)
$music_id = hash('md5', $music_id);
//check if its an ajax request, exit if not
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
switch ($user_vote_type) {
##### User liked the content #########
case 'up':
//check if user has already voted, determined by unique content cookie
if (isset($_COOKIE["voted_" . $music_id])) {
header('HTTP/1.1 500 Already Voted'); //cookie found, user has already voted
exit(); //exit script
}
//get vote_up value from db using music_id
$qur = mysqli_query($sql_con, "SELECT like FROM music_like WHERE music_id='$music_id' LIMIT 1");
$get_total_rows = mysqli_fetch_assoc($qur);
if ($get_total_rows) {
//found record, update vote_up the value
mysqli_query($sql_con, "UPDATE music_like SET like=like+1 WHERE music_id='$music_id'");
} else {
//no record found, insert new record in db
mysqli_query($sql_con, "INSERT INTO music_like (music_id, like) value('$music_id',1)");
}
setcookie("voted_" . $music_id, 1, time() + 7200); // set cookie that expires in 2 hour "time()+7200".
echo ($get_total_rows["like"] + 1); //display total liked votes
break;
##### User disliked the content #########
case 'down':
//check if user has already voted, determined by unique content cookie
if (isset($_COOKIE["voted_" . $music_id])) {
header('HTTP/1.1 500 Already Voted this Content!'); //cookie found, user has already voted
exit(); //exit script
}
//get vote_up value from db using unique_content_id
$qur = mysqli_query($sql_con, "SELECT dislike FROM music_like WHERE music_id='$music_id' LIMIT 1");
$get_total_rows = mysqli_fetch_assoc($qur);
if ($get_total_rows) {
//found record, update vote_down the value
mysqli_query($sql_con, "UPDATE music_like SET dislike=dislike+1 WHERE music_id='$music_id'");
} else {
//no record found, insert new record in db
mysqli_query($sql_con, "INSERT INTO music_like (music_id, dislike) value('$music_id',1)");
}
setcookie("voted_" . $music_id, 1, time() + 7200); // set cookie that expires in 2 hour "time()+7200".
echo ($get_total_rows["dislike"] + 1); //display total disliked votes
break;
##### respond votes for each content #########
case 'fetch':
//get vote_up and vote_down value from db using unique_content_id
$qur = mysqli_query($sql_con, "SELECT like, dislike FROM music_like WHERE music_id='$music_id' LIMIT 1");
$row = mysqli_fetch_assoc($qur);
//making sure value is not empty.
$like = ($row["like"]) ? $row["like"] : 0;
$dislike = ($row["dislike"]) ? $row["dislike"] : 0;
//build array for php json
$send_response = array(
'like' => $like,
'dislike' => $dislike
);
echo json_encode($send_response); //display json encoded values
break;
}
}
?>
JQUERY CODE
$(document).ready(function() {
//####### on page load, retrive votes for each content
$.each( $('.voting_wrapper'), function(){
//retrive music_id from this voting_wrapper element
var music_id = $(this).attr("id");
//prepare post content
post_data = {'music_id':music_id, 'vote':'fetch'};
//send our data to "vote_process.php" using jQuery $.post()
$.post('vote_process.php', post_data, function(response) {
//retrive votes from server, replace each vote count text
$('#'+music_id+' .like').text(response.like);
$('#'+music_id+' .dislike').text(response.dislike);
},'json');
});
//####### on button click, get user vote and send it to vote_process.php using jQuery $.post().
$(".voting_wrapper .voting_btn").click(function (e) {
//get class name (down_button / up_button) of clicked element
var clicked_button = $(this).children().attr('class');
//get unique ID from voted parent element
var music_id = $(this).parent().attr("id");
if (clicked_button === 'down_button') //user disliked the content
{
//prepare post content
post_data = {
'music_id': music_id,
'vote': 'down'
};
//send our data to "vote_process.php" using jQuery $.post()
$.post('vote_process.php', post_data, function (data) {
//replace vote down count text with new values
$('#' + music_id + ' .dislike').text(data);
//thank user for the dislike
alert("Thanks! Each Vote Counts, Even Dislikes!");
}).fail(function (err) {
//alert user about the HTTP server error
alert(err.statusText);
});
}
else if (clicked_button === 'up_button') //user liked the content
{
//prepare post content
post_data = {
'music_id': music_id,
'vote': 'up'
};
//send our data to "vote_process.php" using jQuery $.post()
$.post('vote_process.php', post_data, function (data) {
//replace vote up count text with new values
$('#' + music_id + ' .like').text(data);
//thank user for liking the content
alert("Thanks! For Liking This Content.");
}).fail(function (err) {
//alert user about the HTTP server error
alert(err.statusText);
});
}
});
//end
});
答案 0 :(得分:3)
LIKE
是 reserved word 。因此,当您使用保留字作为对象名称(列,表等)时,请始终在查询中使用反向标记。
E.g。你需要改变
SELECT like FROM music_like WHERE music_id='$music_id' LIMIT 1
到
SELECT `like` FROM music_like WHERE music_id='$music_id' LIMIT 1
^ ^
同样在这里:
UPDATE music_like SET like=like+1 WHERE music_id='$music_id'
应该是
UPDATE music_like SET `like`=`like`+1 WHERE music_id='$music_id'
并且
SELECT like, dislike FROM music_like WHERE music_id='$music_id' LIMIT 1
到
SELECT `like`, dislike FROM music_like WHERE music_id='$music_id' LIMIT 1
如果不这样做,您的查询将无效。因为mysqli_query()
失败并返回布尔FALSE
而不是资源。这就是mysqli_fetch_assoc()
因您发布的错误消息而失败的原因。