2010-01-03 41 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

相关问题