2013-05-11 85 views
-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 
    }); 
+1

我冒昧地用一些在線壓頭工具修復了壓痕,現在更容易遵循。你應該在下一次提問時這樣做,如果代碼可讀,人們更傾向於提供幫助。一個注意,你的'INSERT'查詢有一個錯字;它應該是'values(...)'而不是'value(...)'。你能告訴我們順便提一下45號線嗎? – Christoffer 2013-05-11 02:11:21

回答

3

LIKEreserved 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()失敗並顯示您發佈的錯誤消息。