Hola, me acabo de bajar hace unos momentos un script prefabricado en jquery, css, que permite enviar ratings a la base de datos, y ejecutarlos con estrellas, solo que se añadia en la misma celda, por lo que le intente modificar para que se añadiera dependiendo de la url actual, para que cada post o pagina tenga su propios puntos.
Principalmente el codigo html esta conformado de la siguiente manera:
Código :
Cita: <!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&actu al=<?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&actu al='+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 :
Cita: <?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.