2012-04-02 18 views
1

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

Antwort

1

Ich bin nicht sicher, wie ich keinen Zugriff auf das Rating-System haben Sie verwenden, doch nur Blick auf das, was du hast Ich denke, du könntest den Zähler auf 1 setzen (wenn du es entfernst bricht das jQuery Rating System) und den Wert von der Person aktualisieren, also wenn du sie abrufst, sehen sie nur ihren Wert gehe über 5). Wenn der Wert auf 5 gesetzt wird, dann wird 5 angezeigt, weil er keine anderen Bewertungen findet .... (basierend auf meinem Verständnis) Sie müssen auch eine Benutzer-ID hinzufügen, damit Sie wissen, welche Personen zu holen sind (da du es persönlich willst). Dies hängt davon ab, wie abhängig die Anwendung von einem bestimmten Datenbankentwurf ist.

+0

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

+0

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

+0

Das ist großartig, es hat funktioniert. :) – Kyra