Avatar billede zurekk Nybegynder
27. april 2006 - 16:27 Der er 14 kommentarer og
1 løsning

Replace rating med billede.

Hej eksperter.

Jeg har et ret så simpelt rating system som ser således ud:

Stemme:
            if(isset($_GET['rate']))
        {
        mysql_query("UPDATE film SET rates=rates+1, rated=rated+$_GET[rate] WHERE id = '$_GET[id]'") or die(mysql_error());
        ?>
        <script type="text/javascript">
        alert("Tak for din stemme!");
        </script>
        <?
        }
        ?>



Udtræk:
        $sql = mysql_query("SELECT *,ROUND(rated/rates) as rate FROM film WHERE id = '$id'") or die(mysql_error());


Men resultatet er nu bare et tal. Men jeg vil gerne have det vist med stjerner, altså et billede med 5 stjerner, men hvordan 'replacer' jeg et evt. 3 tal med 3.gif?
Avatar billede terrak Nybegynder
27. april 2006 - 16:46 #1
med en løkke -

for ($i = 0; $i < $rated; $i++) {
echo "<img src='stjerne.gif' alt='stjerne' />";
}

lad os sige at $rated = 3. hvis du vil have de sidste to stjerner, vist med et andet billede, bruger du

$maxstjerner = 5;
$resterendestjerner = $maxstjerner-$rated;

for ($i = 0; $i < $resterendestjerner; $i++) {
echo "<img src='stjerne2.gif' alt='stjerne2' />";
}

Hvis du vil have et billede for hver mulighed for tildeling af stjerner, bruger du bare
echo "<img src='".$rated.".gif' alt='stjerner' />";


er det sådan du mener ?
Avatar billede terrak Nybegynder
27. april 2006 - 17:09 #2
Sådan ser scriptet ud (med tegn i stedet for billeder):

http://83.90.161.4/rating.php?rate1=5

Du kan selv sætte flere rates på, ved at tilføje rate2, rate3, rate4 eller hvor mange der skal være. eks.:

http://83.90.161.4/rating.php?rate1=3&rate2=4&rate3=5

Bemærk at du kan bruge en højere værdi end 5 og en lavere værdi end 1. Dette vil gøre det muligt at snyde, så jeg vil råde dig til at tjekke, at værdien er fra 1-5 eks:
if (is_numeric($_GET['rate']) && $_GET['rate'] >= 1 && $_GET['rate'] <= 5) {
-indsæt i mysql database-
}
Avatar billede zurekk Nybegynder
27. april 2006 - 18:01 #3
ahh.. Ja, ser fint ud :D Prøver lige at få det lavet, du kan evt. smide et svar indtil da.
Avatar billede zurekk Nybegynder
27. april 2006 - 18:19 #4
Den vil kun vise stjerne 2 -.-
Avatar billede terrak Nybegynder
27. april 2006 - 18:30 #5
Har du evt. link til siden? Ellers prøv at vis hvor du har sat koden ind.
Avatar billede terrak Nybegynder
27. april 2006 - 18:33 #6
Koden til rating-scriptet på min side er:
<?php

$rates = 0;
$rating = 0;
foreach ($_GET as $key => $value) {

if (substr($key,0,4) == "rate") {
$rates++;
$rating += $value;
}

}

$rated = round($rating/$rates);

echo "
Rates: ".$rates."<br />
Rating: ".$rating."<br />
Rated: ".$rated." ";
for ($i = 0; $i < $rated; $i++) {
echo "(*)";
}

$maxstjerner = 5;
$resterendestjerner = $maxstjerner-$rated;

for ($i = 0; $i < $resterendestjerner; $i++) {
echo "( )";
}

?>

--
Det er dog kun der hvor den første for-løkke begynder, at du skal bruge koden. den ovenstående kode sætter bare de variabler, du henter fra din database.
Avatar billede zurekk Nybegynder
27. april 2006 - 18:33 #7
"Ellers prøv at vis hvor du har sat koden ind."
- Hvad mener du helt præcist med det :D?
Avatar billede terrak Nybegynder
27. april 2006 - 18:36 #8
Det er eksempelvis ikke specielt godt at sætte min kode ind i toppen eller uden for if-sætningen, men ellers var det bare for at få et overblik over hvordan dit script er sat sammen.
Avatar billede zurekk Nybegynder
27. april 2006 - 18:37 #9
Altså.. Ved ikke hvor smart det ville være at smide 180 linjer herind, men kan godt gøre hvis det vil være nemmere for dig :D
Avatar billede zurekk Nybegynder
27. april 2006 - 18:41 #10
Avatar billede terrak Nybegynder
27. april 2006 - 19:25 #11
Ved dit udtræk bruger du:

$sql = mysql_query("SELECT *,ROUND(rated/rates) as rate FROM film WHERE id = '$id'") or die(mysql_error());

$rated = mysql_result($sql,0,"rate");

for ($i = 0; $i < $rated; $i++) {
echo "<img src='graphic/_a/stjerne.gif' alt='stjerne' />";
}

$maxstjerner = 5;
$resterendestjerner = $maxstjerner-$rated;

for ($i = 0; $i < $resterendestjerner; $i++) {
echo "<img src='graphic/_a/stjerne2.gif' alt='stjerne2' />";
}
Avatar billede zurekk Nybegynder
27. april 2006 - 19:49 #12
Det virker :D Tak.
Smid et svar.
Avatar billede terrak Nybegynder
27. april 2006 - 21:35 #13
Så lidt :-)

Sig til hvis der er noget der mangler.
Avatar billede terrak Nybegynder
27. april 2006 - 22:17 #14
Hvis ikke du har tilføjet det, så husk lige begrænsinger på størrelsen af $_GET['site']

Se her hvad der sker hvis en bruger prøver at snyde systemet ved at skrive værdien direkte ind i adresselinjen:
http://83.90.161.4/rating.php?rate1=-15
og
http://83.90.161.4/rating.php?rate1=15

dvs:

if(isset($_GET['rate']) && is_numeric($_GET['rate']) && $_GET['rate'] >= 1 && $_GET['rate'] <= 5)
        {
        mysql_query("UPDATE film SET rates=rates+1, rated=rated+$_GET[rate] WHERE id = '$_GET[id]'") or die(mysql_error());
Avatar billede zurekk Nybegynder
28. april 2006 - 13:26 #15
Det har jeg skam :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester