Avatar billede TumseMM Nybegynder
02. oktober 2011 - 17:24 Der er 27 kommentarer og
1 løsning

Ratingsystem, der er kun én der kan rate?

Hej eksperter!

Har dette ratingsystem på min side, hvor folk rater hinandens svar til en sætning. Problemet er bare at hvis man rater én gang, så er den der <select><option> dropdown box væk??

Det skulle være sådan at alle brugere kan rate én gang om dagen, på hver sætning.

Tak på forhånd!




$res_rating = mysql_query("SELECT * FROM ratings WHERE a_id = $id AND user_id != $user_id");
        if(mysql_num_rows($res_rating) == 0)
        {
            echo'
            <div style="position:absolute">
            <form method="post" action="store-rating.php">
            <input type="hidden" name="a_id" value="'.$id.'">
            <select name="rating" id="rating">
            <option value="">Vælg rating</option>
            <option value="1">1 - Dårligt</option>
            <option value="2">2 - Hmm..</option>
            <option value="3">3 - OK</option>
            <option value="4">4 - Godt</option>
            <option value="5">5 - Fantastisk!</option>
            </select>
            <input type="submit" name="ratingsystem" value="Rate!">
            </form>
            </div>';
        }
        else
        {
            $res_avg = mysql_query("SELECT AVG(rating) AS avg_rating FROM ratings
                                    WHERE a_id = '$id'") or die(mysql_error());
            $row_avg = mysql_fetch_array($res_avg);
            $avg_rating = $row_avg['avg_rating'];
            echo '<table><tr>
                    <td><i>Gennemsnits rating:</i></td>
                    <td>'.$avg_rating.'</td>
                </tr></table>
               
               
            ';
       
        }
           
        echo'   
        </div>
        ';
    }
?>

Avatar billede hansepeter2 Praktikant
02. oktober 2011 - 18:03 #1
prøved med = i stedet for...

user_id != $user_id
Avatar billede TumseMM Nybegynder
02. oktober 2011 - 18:45 #2
Så kan man rate sine egne sætninger :(
Avatar billede hansepeter2 Praktikant
02. oktober 2011 - 19:05 #3
Så skal du have knyttet noget ejerskab til. Hvordan ser tabllerne med ratings og sætninger ud?
Avatar billede majbom Novice
02. oktober 2011 - 20:00 #4
hvad har du af felter i din ratings tabel?
Avatar billede hansepeter2 Praktikant
02. oktober 2011 - 22:28 #5
Du kan nemlig ikke umiddelbart ud fra ovenstående afgøre hvorvidt vedkommende har lov til at stemme eller ej.

Men hvis du kobler artiklens ejermand sammen med ovenstående, så kan du udelukke ham. Dvs du skal slå op i to tabeller.
Avatar billede TumseMM Nybegynder
03. oktober 2011 - 08:22 #6
har et user_id i min tabel, ratings :)
Avatar billede TumseMM Nybegynder
03. oktober 2011 - 08:22 #7
disse har jeg i 'ratings':

    id    a_id    rating    time    user_id
Avatar billede JensPeterSvensson Nybegynder
03. oktober 2011 - 09:59 #8
Jeg antager at du henter artikel data før din rating, så er det jo bare lige at teste om artiklens forfatter id er brugerens id.

if($user_id != $forfatter_id){
  -- Din rating kode.
}else{
  -- Noget andet kode.
}

Hvis du ikke har hentet artiklens data så noget i retning af dette:

$art_res = mysql_query('SELECT * FROM artikler WHERE `a_id`='.$id);
if(mysql_num_rows($art_res) == 0){
  -- Din rating kode.
}else{
  -- Noget andet kode.
}
Avatar billede TumseMM Nybegynder
03. oktober 2011 - 19:42 #9
skal man ikke lave noget med timestamp og ip adresser?

Det der sørger jo bare for at man ikke rater sin egen gør det ik?
Avatar billede majbom Novice
03. oktober 2011 - 19:53 #10
skal lige være med efter at have læst #0 igen - skal man kunne rate samme sætning flere gange, bare ikke samme dag? eller kun dagens sætning én gang og ikke andre sætninger end dagens sætning?
Avatar billede TumseMM Nybegynder
04. oktober 2011 - 08:18 #11
der er en hovedsætning som f.eks: Hvis jeg vandt i Lotto ville jeg...

-den skal man ikke rate.

og så skal brugerne svare sætningen med f.eks: købe en båd.

- og det er alle de sætninger folk svarer med at brugerne skal kunne rate.



Man skal kunne rate hver af de sætninger brugerne skriver, men højst én gang om dagen.
Avatar billede majbom Novice
04. oktober 2011 - 19:10 #12
så man kan rate samme sætning flere gange, bare kun én gang om dagen?
Avatar billede TumseMM Nybegynder
04. oktober 2011 - 20:06 #13
man kan rate alle de sætninger brugerne skriver. bare ikke den man selv har skrevet.:) og man kan kun rate én gang pr sætning :)
Avatar billede majbom Novice
05. oktober 2011 - 06:21 #14
okay, fint nok

hvis du så henter id'et ud på den bruger der har lavet sætningen og når det er forskelligt fra den der er logget ind, kører du din kode i #0
Avatar billede TumseMM Nybegynder
05. oktober 2011 - 12:25 #15
noget i den her stil?

if(mysql_num_rows($res_rating) == 0) && if ($_SESSION['username']) == $username
Avatar billede majbom Novice
05. oktober 2011 - 19:30 #16
altså jeg ville lave det sådan så koden der henter rating-formularen kun bliver kørt hvis den bruger der er logget ind er forskellig fra den bruger der har skrevet sætningen:

if($_SESSION['username'] != $username)


og i en else på ovenstående if-sætning viser du den aktuelle rating.
Avatar billede TumseMM Nybegynder
05. oktober 2011 - 21:18 #17
Det fungerer sådan, at når man er logget ind og man svarer på dagens sætning. så kommer der ikke nogen rating box frem - som er perfekt! så kan man ikke rate på ens egen sætning! genialt :)

men jeg spurgte efter, hvordan man sørgede for, at der ikke KUN kunne være én enkelt bruger, der kunne rate på en sætning. Lige nu er det sådan at hvis jeg logger ind med en bruger og skriver en sætning, så kommer der ingen rating box frem (perfekt)!

Hvis jeg så logger ind på en anden bruger, og rater (perfekt)!.

Hvis jeg så derefter logger ind på en tredje bruger, så er den rated. og jeg kan ikke rate igen..

Det vil sige, at jeg gerne ville have, at der var mere end én bruger, der kunne rate på en sætning. og derfor give et gennemsnit, i stedet for at den første bruger der rater, giver sætningens rating :)
Avatar billede majbom Novice
05. oktober 2011 - 21:25 #18
altså hvis $user_id er id'et på den bruger der er logget ind og $id er id'et på den givne sætning, så burde der ikke være problemer.

kan du ikke prøve at udskrive dine variabler for at se om de har det ønskede indhold?
Avatar billede TumseMM Nybegynder
06. oktober 2011 - 18:53 #19
$res = mysql_query("SELECT * FROM a WHERE q_id = $q_id ORDER BY id DESC");              //answers
    while($row = mysql_fetch_array($res))
    {
       
       
        $username = $row['username'];
        $user_id = $row['user_id'];
        $text = $row['text'];
        $time = $row['time'];
        $id = $row['id'];


sætter pris på din hjælp ;)
Avatar billede majbom Novice
06. oktober 2011 - 18:57 #20
?
Avatar billede TumseMM Nybegynder
06. oktober 2011 - 21:06 #21
tror jeg lukker dette spørgsmål, det virker lidt for indviklet. prøver mig bare lidt frem :)
giv et svar, hvis du er interesseret i nogle point.

tak for hjælpen ellers :)
Avatar billede majbom Novice
07. oktober 2011 - 06:25 #22
arh nu er vi der næsten - jeg forstår bare ikke hvor du vil hen med #19..?
Avatar billede TumseMM Nybegynder
07. oktober 2011 - 18:17 #23
ved ikke helt hvad du mener med at udskrive variabler. Men tror du ikke det er noget med opstillingen af scriptet:


    $res = mysql_query("SELECT * FROM a WHERE q_id = $q_id ORDER BY id DESC");              //answers
    while($row = mysql_fetch_array($res))
    {
       
       
        $username = $row['username'];
        $user_id = $row['user_id'];
        $text = $row['text'];
        $time = $row['time'];
        $id = $row['id'];
        echo '
       
        <div style="padding: 20px; border: 1px dotted red; margin: 20px;">   
            <b><text style="color:white">'. $username .' siger:</text></b><br>
            <span style="color:blue">...</span><span style="color:blue">'. $text .'</span><br>
            <text style="color:white">'. $time .'</text>';
   
        $res_rating = mysql_query("SELECT * FROM ratings WHERE a_id = $id");
        if(mysql_num_rows($res_rating) == 0)
        {
            if ($_SESSION['username'])
            {
                if($_SESSION['username'] != $username)
                {           
            echo'
            <div style="position:absolute">
            <form method="post" action="store-rating.php">
            <input type="hidden" name="a_id" value="'.$id.'">
            <select name="rating" id="rating">
            <option value="">Vælg rating</option>
            <option value="1">1 - Dårligt</option>
            <option value="2">2 - Hmm..</option>
            <option value="3">3 - OK</option>
            <option value="4">4 - Godt</option>
            <option value="5">5 - Fantastisk!</option>
            </select>
            <input type="submit" name="ratingsystem" value="Rate!">
            </form>
            </div>';
        }
    }
}

        else
        {
            $res_avg = mysql_query("SELECT AVG(rating) AS avg_rating FROM ratings
                                    WHERE a_id = '$id'") or die(mysql_error());
            $row_avg = mysql_fetch_array($res_avg);
            $avg_rating = $row_avg['avg_rating'];
            echo '<table><tr>
                    <td><i>Gennemsnits rating:</i></td>
           
                    <td><u><b>'.$avg_rating.'</b></u></td>
                </tr></table>
               
               
            ';
       
        }
       
        echo'   
        </div>
        ';
    }
?>
Avatar billede majbom Novice
07. oktober 2011 - 19:51 #24
http://pastebin.com/9yemB462

det kræver så at du har id'et på den bruger der er logget ind i
$_SESSION['user_id']
Avatar billede majbom Novice
07. oktober 2011 - 19:53 #25
hov - sådan: http://pastebin.com/nP1J64DF

og hvad er <text> lige for et tag?
Avatar billede TumseMM Nybegynder
08. oktober 2011 - 13:34 #26
giv et svar splazz :) du er genial
Avatar billede majbom Novice
08. oktober 2011 - 18:32 #27
kommer her :)
Avatar billede majbom Novice
09. oktober 2011 - 21:51 #28
tfp :)
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