Comunidad de diseño web y desarrollo en internet online

Problemas al intentar enviar parametros con jquery por ajax

Citar            
MensajeEscrito el 10 Ago 2011 11:47 pm
Hola que tal.
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.

Por harklesmaster

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Ago 2011 11:52 pm
Disculpen por el doble post, quise editar el tema, pero no vi donde esta la opcion.
Lo quise editar para hacer mas agradable a la vista el codigo html que presente antes(no lo puse con las etiquetas):

Código HTML :

<!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> 

Por harklesmaster

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Ago 2011 10:10 pm
No se, pero puede intentar meter la url actual con javascript en vez de con PHP y ver si arregla algo.

Código Javascript :

url: 'update.php?rating='+$(this).text()+'&do=rate&actual=' + document.location.href


Igualmente intente hacer esto en una parte mas sencilla (solo el javascript) y de esa forma le debe quedar mas facil ver error.

Por cierto tiene un hueco de seguridad severo metiendo en la base de datos valores sin limpiar pasados por get; lea acerca de inyecciones SQL y de mysql_real_escape_string

MM... este foro lamentablemente no tiene la opcion de editar... si... bastante molesto eso.

Por ViejoIvan

7 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.