Llevo ya algunas horas dandole vueltas al problema, y no le encuentro solucion, es por eso que vengo a pedirle ayuda a esta comunidad que me recomendaron.
Se trata el script de un rating con estrellas (el ejemplo lo baje), conformado el codigo html por el siguiente:
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>jQuery Tutorial : Simple ajax star rating</title>
<meta name="Keywords" content="Star rating, jQuery, ajax">
<meta name="Description" content="jQuery Tutorial : Simple ajax star rating">
<meta http-equiv="Content-Language" content="en">
<meta name="robots" content="index,follow">
<style>
body{
font:12px Arial, Helvetica, sans-serif;
padding:40px;
}
</style>
<script src="http://dock.ronggur.com/tutorial/jquery_tutorial_starrating/rating/jquery.min.js" type="text/javascript"></script>
<link href="starstyle.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<?php $url="".$_SERVER['REQUEST_URI'];?>
<script type="text/javascript">
var direccion =document.URL;
var palabra=""+direccion;
// JavaScript Document
$(document).ready(function() {
// get current rating
getRating();
// get rating function
function getRating(){
$.ajax({
type: "GET",
url: "update.php",
data: "do=getrate",
cache: false,
async: false,
success: function(result) {
// apply star rating to elemen
},
error: function(result) {
alert("some error occured, please try again later");
}
});
}
// link handler
$('#ratelinks li a').click(function(){
$.ajax({
type: "GET",
url: 'update.php?rating='+$(this).text()+'&do=rate&actual=<?php echo $url."'";?>,
cache: false,
async: false,
success: function(result) {
// remove #ratelinks element to prevent another rate
$("#ratelinks").remove();
// get rating after click
getRating();
},
error: function(result) {
alert("some error occured, please try again later");
}
});
});
});
</script>
<h2>Star Rater</h2>
<ul class='star-rating'>
<li class="current-rating" id="current-rating"><!-- will show current rating --></li>
<span id="ratelinks">
<li><a href="javascript:void(0)" title="1 star out of 5" class="one-star">1</a></li>
<li><a href="javascript:void(0)" title="2 stars out of 5" class="two-stars">2</a></li>
<li><a href="javascript:void(0)" title="3 stars out of 5" class="three-stars">3</a></li>
<li><a href="javascript:void(0)" title="4 stars out of 5" class="four-stars">4</a></li>
<li><a href="javascript:void(0)" title="5 stars out of 5" class="five-stars">5</a></li>
</span>
</ul>
</body>
</html>
Basicamente lo que hace es , por medio de una lista y css, seleccionar una opcion, una ves hacer clic a la que sea, utiliza una funcion por medio del handler, en el cual el codigo tiene ajax; se supone que envia los parametros de la siguiente manera:
url: 'update.php?rating='+$(this).text()+'&do=rate&actual='+palabra,
donde la parte importante es el parametro actual, que en si es la variable palabra, donde contiene la direccion actual de donde se encuentre el archivo (esto lo hice para que cada rating fuera diferente sobre los demas).
El metodo ajax manda los parametros al archivo update.php:
Código :
Código PHP :
<?php // connect to database $dbh=mysql_connect('localhost', 'root', 'pass'); mysql_select_db('ratings', $dbh); $actual=$_GET['actual']; $actual=substr($actual,1,-1); if($_GET['do']=='rate'){ // do rate rate(); }else if($_GET['do']=='getrate'){ // get rating getRating(); } // function to retrieve function getRating(){ $sql= "select * from ratings where actual='".$_GET['actual']."' "; $result=@mysql_query($sql); $rs=@mysql_fetch_array($result); // set width of star $rating = (@round($rs[value] / $rs[counter],1)) * 20; echo $actual; } // function to insert rating function rate(){ $text = strip_tags($_GET['rating']); $update = "update ratings set counter = counter + 1, value = value + ".$_GET['rating']." where post_name='".$_GET['actual']."'"; $result = @mysql_query($update); if(@mysql_affected_rows() == 0){ $insert = "insert into ratings (counter,value,actual) values ('1','".$_GET['rating']."','".$_GET['actual']."')"; $result = @mysql_query($insert); } echo $actual; } ?>
Se supone que dependiendo del parametro do que se envie, hace la funcion de obtener rating(getrating) o votar(rate).
Se pasan los parametros con la funcion$_GET y se ejecuta dependiendo que es lo que se iva a ser.
El problema a como veo yo, es el parametro "actual" que yo le envio, ya que quitandole eso al codigo funciona perfectamente,pero lo que quiero es una nueva celda para que al momento de entrar al post, identifique en donde esta ubicado y votar en el correspondiente.
He intentado muchas cosas, inclusive en lugar de poner el parametro actual con una variable javascript, la puse con php, pero aun asi no puedo enviar el parametro.
La base de datos se conforma de la siguiente manera
counter(int,long 8,not null,index)
value(int,long 8,not null)
actual(string,30,not null).
¿Alguien sabe que esta pasando?
De navegador uso chrome, no se si tenga que ver algo de eso.