Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

egbmix

Votação em estrelas

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.