您将需要一个中心位置来存储此歌曲信息,主要是选票,但您也可以通过其中的其他歌曲信息(如标题、音乐文件路径等)。我建议一个简单的MySQL表如下
CREATE TABLE daily_song (
daily_song_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
vote INT NOT NULL DEFAULT 0,
title VARCHAR(255) NOT NULL DEFAULT "" COMMENT "Name of the song",
path VARCHAR(255) NOT NULL DEFAULT "" COMMENT "Path to the song on the server",
ctime DATETIME NOT NULL COMMENT "Datetime the song was added",
PRIMARY KEY(daily_song_id)
);
我使用了以下 HTML 结构:
<ul id="daily-songs">
<li id="song-id-1">
<h3>Song 1</h3>
<div class="voting-controls">
<a href="#" class="vote-up">Up</a>
<div class="votes">8</div>
<a href="#" class="vote-down">Down</a>
</div>
<div class="player"></div>
</li>
<li id="song-id-2">
<h3>Song 2</h3>
<div class="player"></div>
<div class="voting-controls">
<a href="#" class="vote-up">Up</a>
<div class="votes">5</div>
<a href="#" class="vote-down">Down</a>
</div>
</li>
<li id="song-id-3">
<h3>Song 3</h3>
<div class="player"></div>
<div class="voting-controls">
<a href="#" class="vote-up">Up</a>
<div class="votes">4</div>
<a href="#" class="vote-down">Down</a>
</div>
</li>
</ul>
还有一点 CSS
#daily-songs li { clear: both; list-style: none; }
#daily-songs h3 { margin: 0 10px 0 0; float: left; }
#daily-songs .voting-controls { height: 1em; }
#daily-songs .voting-controls * { float: left; }
#daily-songs .voting-controls .votes { padding: 0 10px; }
这是 JavaScript,使用 jQuery
$(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,
votes: song.vote.text() // temporary
},
function(data) {
if ( isNaN(data) ) { return; }
song.vote.text(data);
// Re-order the song list
$.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 vote.php
:
<?php
$songId = !empty($_POST['id']) ? (int)$_POST['id'] : 0;
$delta = !empty($_POST['delta']) ? (int)$_POST['delta'] : 0;
if ( !$songId || !$delta ) {
die("Invalid parameters");
}
// Make sure the voting value is within the valid rang
$delta = $delta > 0 ? 1 : -1;
// Check to see if user has already voted for this song,
// If they haven't voted yet, connect to the database
// If the database connection is succesful, update song entry
// UPDATE daily_song SET votes=votes+$delta WHERE daily_song_id=$songId
// If the UPDATE is successful, SELECT the new vote value
// SELECT vote FROM daily_song WHERE daily_song_id=$songId
// Output the new vote value
// But for now, just accept the current vote and apply the delta
echo $_POST['votes'] + $delta;
我将把 PHP 留给你填写。不应该太多。如果您有任何问题,请告诉我。