egbmix 0 Denunciar post Postado Janeiro 7, 2010 Bom dia á todos, estou com uma dúvida é não consigo resolver, baixei na net um script para votação com estrelas com o plugin jquery sendo que a votação só funciona com um único registro da tabela não funciona com os outros registros o que devo fazer vou postar o script para que vocês possam me ajudar. index.php < ? include " $sql = mysql_query("SELECT * FROM ##### WHERE pp='{$pp}' "); $check = mysql_num_rows($sql); if($check > 0){ while($row = mysql_fetch_array($sql)){ foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } //para exibir os valores na página consultada $_SESSION['id'] = $id; $_SESSION['pp'] = $pp; $_SESSION['nome'] = $nome; $_SESSION['view'] = $view; $_SESSION['votos'] = $votos; $_SESSION['pontos'] = $pontos; } } ?> <head> <link rel="stylesheet" type="text/css" href="../css/ratings.css" /> <script type="text/javascript" src="../js/jquery.js"></script> <script type="text/javascript" src="../js/jquery.rating.js"></script> <script type="text/javascript"> jQuery(function(){ jQuery('form.rating').rating(); }); </script> </head> <body> <? $r = number_format($pontos / $votos ,2,'.','.'); ?> <form style="display:none" title="Average Rating: <?=$r?>" class="rating" action="rate.php"> <input type="hidden" name="valor" value="1" /> <select name="select" id="r1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </form> <? echo $votos; ?> rate.php <? mysql_connect('################','########','######'); mysql_select_db('######'); $rate = explode('#',$_POST['rating']); $r = $rate[1]; $SQL = " UPDATE tabela SET votos = votos + 1, pontos = pontos + ".$r." WHERE id = ".$_POST['id']; mysql_query($SQL); ?> jquery.ratings.js (function($) { var buildRating = function(obj) { var rating = averageRating(obj), obj = buildInterface(obj), stars = $("div.star", obj), cancel = $("div.cancel", obj) var fill = function() { drain(); $("a", stars).css("width", "100%"); el = stars.index(this) + 1; for(x = 0; x < el; x++) stars.eq(x).addClass("hover"); //stars.lt(stars.index(this) + 1).addClass("hover"); }, drain = function() { stars.removeClass("on").removeClass("hover"); }, reset = function() { drain(); el = rating[0]; for(x = 0; x < el; x++) stars.eq(x).addClass("on"); }, cancelOn = function() { drain(); $(this).addClass("on"); }, cancelOff = function() { reset(); $(this).removeClass("on") } stars .hover(fill, reset).focus(fill).blur(reset) .click(function() { rating = [stars.index(this) + 1, 0]; $.post(obj.url, { rating: $("a:first", this)[0].href.slice(1), id: $("a:first", this)[0].id.slice(0) }); stars.unbind().addClass("done"); $(this).css("cursor", "default"); return false; }); reset(); return obj; } var buildInterface = function(form) { var container = $("<div></div>").attr({"title": form.title, "class": form.className}); $.extend(container, {url: form.action}) var optGroup = $("option", $(form)); var input = $("input", $(form)); var size = optGroup.length; optGroup.each(function() { container.append($('<div class="star"><a id="' + input.val() + '" href="#' + this.value + '" title="Give it ' + this.value + '/'+ size +'">' + this.value + '</a></div>')); }); $(form).after(container).remove(); return container; } var averageRating = function(el) { return el.title.split(":")[1].split(".") } $.fn.rating = function() { return $($.map(this, function(i) { return buildRating(i)[0] })); } if ($.browser.msie) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { } })(jQuery) rating.css .rating { cursor: pointer; display: block; width: 100px; } .rating:after { content: '.'; display: block; height: 0;width: 0;clear: both; visibility: hidden; } .cancel, .star {float: left; width: 17px;height: 15px;overflow: hidden;text-indent: -999em;cursor: pointer; } .star, .star a {background: url(../img/star.gif) no-repeat 0 0px;} .star a { display: block; width: 100%; height: 100%; background-position: 0 0px; } div.rating div.on a { background-position: 0 -16px;} div.rating div.hover a, div.rating div a:hover { background-position: 0 -32px; } div.done, div.done a { cursor: default; } /*fim ratings-------------------------------------------------------------------------------------------------------------------------/* Compartilhar este post Link para o post Compartilhar em outros sites
Holt 1 Denunciar post Postado Janeiro 7, 2010 Você pode sempre só pegar e somar... Digamos que o primeiro voto seja 5 então 0+5 = 5 dai voce divide pelo número de votos... 5 / 1 = 5 O segundo voto seria 3... 3 + 5 = 8... 8 / 2 = 4... O terceiro voto seria 4... 4 + 8 = 12... 12 / 3 = 4... Assim por diante precisaria de 2 campos na tabela para cada usuário... ou 1, mas dai ten que tratar as informações Compartilhar este post Link para o post Compartilhar em outros sites
egbmix 0 Denunciar post Postado Janeiro 7, 2010 Sim entendi sendo que os outros votos simplesmente não funciona já adicionei um campo voto e ponto em cada registro da tabela onde tem um artigo pra ser votado, sendo que só funciona o primeiro registro os outros não funciona. como devo solucionar isso. Compartilhar este post Link para o post Compartilhar em outros sites
Holt 1 Denunciar post Postado Janeiro 7, 2010 Sim entendi sendo que os outros votos simplesmente não funciona já adicionei um campo voto e ponto em cada registro da tabela onde tem um artigo pra ser votado, sendo que só funciona o primeiro registro os outros não funciona. como devo solucionar isso. O primeiro registro você diz o primeiro registro da tabela... Diga-se o primeiro artigo...Ou o primeiro voto? Compartilhar este post Link para o post Compartilhar em outros sites
egbmix 0 Denunciar post Postado Janeiro 7, 2010 Primeiro Artigo Compartilhar este post Link para o post Compartilhar em outros sites
Holt 1 Denunciar post Postado Janeiro 7, 2010 Não entendo muito de MySQL então não posso te ajudar, alguém outro talvez possa lhe dar a informação... Mas tendo a informação que o se funciona o primeiro artigo... Você deve procurar a parte em que selecionas a linha do registro que vais editar... Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Janeiro 10, 2010 Olha, tem várias coisas estranhas no seu código. Veja: <? mysql_connect('################','########','######'); mysql_select_db('######'); // de onde vem $_POST['rating'], já que não existe nenhum campo com este nome no formulário? $rate = explode('#',$_POST['rating']); $r = $rate[1]; $SQL = " UPDATE tabela SET votos = votos + 1, pontos = pontos + ".$r." WHERE id = ".$_POST['id']; // aqui da mesma forma. De onde vem $_POST['id']? mysql_query($SQL); ?> Aqui tem mais: // você faz um while... // se a idéia é retornar somente uma linha, não faz sentido utilizar o while // se a idéia é retornar mais de uma linha, você está sobrescrevendo os valores de $_SESSION a cada iteração do while. while($row = mysql_fetch_array($sql)){ foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } //para exibir os valores na página consultada $_SESSION['id'] = $id; $_SESSION['pp'] = $pp; $_SESSION['nome'] = $nome; $_SESSION['view'] = $view; $_SESSION['votos'] = $votos; $_SESSION['pontos'] = $pontos; } Coisas gerais: - troque <? por <?php e <?= por <?php echo, pois assim seu script funcionará em todos os servidores. - habilite todas as mensagens de erro do seu script. - não jogue valores direto em querys SQL, para evitar SQL Injection. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites