2010-01-03 112 views
0

這是這個問題的延續: Move div based on user voting我可以在這個php/javascript投票代碼上獲得一些幫助嗎?

我先貼了一個問題,一個未註冊的用戶,再後來註冊的,所以我不能編輯或添加到我原來的問題...

賈斯汀約翰遜真的幫我解決了代碼問題,但是我仍然遇到了一個問題,試圖找出如何整合vote.php頁面。

我不希望在這裏重複提問,我希望有人會看到這個,看看上面的問題(我在「進一步下去」中添加了更多內容,並且1)幫助我解決問題,並且2)賈斯汀的工作 - 因爲我不能再做了,因爲註冊的事情...

謝謝! 喬爾

+0

電子郵件的SO團隊(團隊SO點com),以獲得你的問題了。 – cletus 2010-01-03 02:56:16

+0

謝謝Cletus ...我做了幾個小時後合併這兩個帳戶...但我仍然堅持這個腳本不工作:(不耐煩,我知道: - D – Joel 2010-01-03 02:59:07

回答

1

的MySQL:

CREATE TABLE song (
    song_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    vote INT NOT NULL DEFAULT 0, 
    PRIMARY KEY(song_id) 
); 

的JavaScript:

$(function() { 
    var listContainer = $("#daily-songs"), 
     songs   = []; 
    var songSort = function(a, b) { 
     return +b.vote.text() - +a.vote.text(); 
    }; 

    var submitVote = function(song, delta) { 
     $.post("vote.php", 
      { 
       id: song.node.attr("id").match(/\d+$/)[0], 
       delta: delta, 
      }, 
      function(data) { 
       if (data != 'success') { alert(data); } 
      } 
     ); 

     $.each(songs.sort(songSort), function() { 
      listContainer.append(this.node); 
     }); 
    }; 

    listContainer.find("li").each(function() { 
     var $this = $(this); 
     var song = { 
      node: $this, 
      vote: $this.find(".votes") 
     }; 
     $this.find(".vote-up").click(function() { 
      submitVote(song, 1); 
     }); 
     $this.find(".vote-down").click(function() { 
      submitVote(song, -1); 
     }); 

     songs.push(song); 
    }); 
}); 

PHP:

<?php 

$song_id = !empty($_POST['id']) ? (int)$_POST['id'] : 0; 
$delta = !empty($_POST['delta']) ? (int)$_POST['delta'] : 0; 

if (!$song_id || !$delta || !is_int($song_id) || !is_int($delta)) { 
    die("Invalid parameters"); 
} 

// Make sure the voting value is within the valid range. 
if ($delta != -1 && $delta != 1) { 
    exit("Invalid delta"); 
} 


// Check to see if user has already voted for this song 
session_start(); 
if (isset($_SESSION['voted'])) { 
    exit("You already voted!"); 
} 

// If they haven't voted yet, connect to the database 
// YOU NEED TO CHANGE THIS INFOMATION TO WHATEVER APPLYS TO YOU. 
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; 
$user = 'dbuser'; 
$password = 'dbpass'; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
} 
catch (PDOException $e) { 
    exit('Connection failed: ' . $e->getMessage()); 
} 


// If the database connection is succesful, update song entry 
// UPDATE daily_song SET votes=votes+$delta WHERE daily_song_id=$songId 
$sth = $dbh->prepare('UPDATE song SET votes = votes + :delta WHERE song_id = :song_id'); 
$sth->bindParam(':delta', $delta); 
$sth->bindParam(':song_id', $song_id); 
if (!$sth->execute()) { 
    exit("Unable to update votes"); 
} 

exit("success"); 
+0

謝謝德米特里。你能爲我澄清: 我已經創建了第一個問題中提出的數據庫...我們可以使用該數據庫來代替您的數據庫嗎?我需要更改哪些值?謝謝! – Joel 2010-01-03 04:37:17

+0

基本上,我只是刪除並重命名了一堆列。如果你願意,你可以完全保留它們 - 如果是這樣,只需將$ dbh-> prepare語句更改爲: $ sth = $ dbh-> prepare('UPDATE daily_song SET votes = votes +:delta WHERE daily_song_id =:song_id '); 然後它應該與數據庫沒有變化 – dmitrig01 2010-01-03 18:15:26

+0

謝謝德米特里。我仍然有一些錯誤,但我知道這是我缺乏在這裏體驗。我設法將我的帳戶合併到一起,因此我將關閉此問題,以便我們可以將所有內容保留在一個頁面上。 – Joel 2010-01-03 19:49:07

相關問題