-3
可有一個人幫我,但我得到這樣的錯誤任何幫助我
警告:mysqli_fetch_assoc()預計參數1被mysqli_result,在/應用程序/ MAMP/htdocs中/現場/ vote_process定的boolean。第45行的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代碼
$(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
});
我冒昧地用一些在線壓頭工具修復了壓痕,現在更容易遵循。你應該在下一次提問時這樣做,如果代碼可讀,人們更傾向於提供幫助。一個注意,你的'INSERT'查詢有一個錯字;它應該是'values(...)'而不是'value(...)'。你能告訴我們順便提一下45號線嗎? – Christoffer 2013-05-11 02:11:21