EDIT: Das betreffende Plugin befindet sich here.JQuery & PHP Star Rating vereinfacht
PHP Anfänger hier mit einem JQuery Star Rating Schnipsel und haben es perfekt funktioniert. Mein Problem ist, dass es derzeit so konfiguriert ist, dass es den Durchschnitt vieler Bewertungen (für öffentliche Anwendungen) zählt und anzeigt. Ich versuche, das Plugin so zu vereinfachen, dass man eine persönliche Bewertung vornehmen kann (als würde man seine eigenen Songs in iTunes bewerten). Der Benutzer kann seine Bewertung aktualisieren, aber keine Teilsterne würden jemals existieren. Ich habe das Plugin viele Male gebrochen, um es zum Laufen zu bringen, aber ohne Erfolg. Die MySQL-Datenbank vorhanden ist, wie folgt:
CREATE TABLE IF NOT EXISTS `pd_total_vote` (
`id` int(11) NOT NULL auto_increment,
`desc` varchar(50) NOT NULL,
`counter` int(8) NOT NULL default '0',
`value` int(8) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
Wenn ich daran zu arbeiten, wie ich vorstellen bekommen, würde ich nicht verlangen sowohl die counter
und value
Spalten, einfach eine einzelne INT-Spalte, die einen Wert zwischen 1 und 5 hält Derzeit akkumuliert counter
die Anzahl der Stimmen, während value
die Bewertungen aggregiert. Die Sterne werden dann mit (Wert/Zähler) * 20 (in Prozent) angezeigt. Die PHP ist unter (original):
<?php
// connect to database
$dbh=mysql_connect ("localhost", "user", "pass") or die ('Cannot connect to the database');
mysql_select_db ("thenally_pd",$dbh);
if($_GET['do']=='rate'){
rate($_GET['id']);
}else if($_GET['do']=='getrate'){
// get rating
getRating($_GET['id']);
}
// get data from table
function fetchStar(){
$sql = "select * from `pd_total_vote`";
[email protected]_query($sql);
while($rs = @mysql_fetch_array($result,MYSQL_ASSOC)){
$arr_data[] = $rs;
}
return $arr_data;
}
// function to retrieve
function getRating($id){
$sql= "select * from `pd_total_vote` where id='".$id."' ";
[email protected]_query($sql);
[email protected]_fetch_array($result);
// set width of star
$rating = (@round($rs[value]/$rs[counter],1)) * 20;
echo $rating;
}
// function to set rating
function rate($id){
$text = strip_tags($_GET['rating']);
$update = "update `pd_total_vote` set counter = counter + 1, value = value + ".$_GET['rating']." where id='".$id."' ";
$result = @mysql_query($update);
}
?>
Vielen Dank für einen Punkt in der richtigen Richtung,
Mike
das ist eine gute Idee. Ich werde das ausprobieren und werde so schnell wie möglich zurückkommen. Danke für die Eingabe. Ich habe das OP bearbeitet, um einen Link zum Plugin zu zeigen. – TheNally
Ich habe es verstanden! Danke, @Kyra. Durch Setzen des Zählers = 1 konnte der Wert noch erhöht werden, was zu verzerrten Ergebnissen führte. Was am Ende funktionierte, war das Ändern von $ update in "function to setting" am Ende. Die Arbeitszeile sieht folgendermaßen aus: '$ update =" UPDATE 'pd_total_vote' SET-Zähler = 1, Wert = ". $ _ GET ['rating']." WHERE id = '". $ Id."' ";' Immer Zähler ist gleich 1 und macht es so, dass jeder neue Wert nicht zu den vorherigen hinzugefügt wird. Mir ist klar, dass dies immer noch ein halber Fehler ist, aber es wird für jetzt ausreichen. Danke noch einmal. – TheNally
Das ist großartig, es hat funktioniert. :) – Kyra