Avatar billede TheYaXxE Juniormester
29. november 2013 - 15:28 Der er 11 kommentarer og
1 løsning

Ratingsystem for medlemmer på side

Hej alle.

Jeg har store problemer med at få lavet et rating system, som medlemmerne af min side kan bruge.
Det skal fungere på den måde at når en bruger rater en side, så bliver der gemt en række i en tabel med brugerens bruger-ID, side-ID, selve raten og dato for hvornår brugeren ratede.

For hver bruger der rater, skal dette gemmes i en ny række.

På den måde kan systemet nemlig gå ind og se om den enkelte bruger allerede har rated på den pågældende side.

Dette skal selvfølgelig gemmes i en MySQL database.



Jeg har prøvet at søge en del på google, men den eneste jeg har fundet er af denne type:
http://net.tutsplus.com/tutorials/html-css-techniques/building-a-5-star-rating-system-with-jquery-ajax-and-php/


Denne type gemmer alle stemmer i én række, hvilket ikke er det jeg søger.
Syntes næsten jeg har søgt over alt, men kan simpelthen ikke finde den type jeg mangler, og ved heller ikke lige helt, hvordan jeg selv skulle kunne lave den fra bunden af. :/


Håber der er noge venlige sjæle der kunne hjælpe mig. Endten med hvordan det laves, eller en tutorial der viser hvordan :)

Tak på forhånd
- TheYaXxE
Avatar billede keysersoze Guru
29. november 2013 - 15:39 #1
Det jeg ville gøre var at bryde opgaven ned i mindre bidder for lettere at kunne overskue opgaven. Det lyder som om at du har datastrukturen på plads og er den først det kan du bygge hvad du end vil ovenpå - så hvor præcist er det du går i stå? Manglende PHP eller SQL viden eller?
Avatar billede TheYaXxE Juniormester
29. november 2013 - 17:09 #2
Den del jeg har sværrest ved, er delen, hvor man trykker på en stjerne, og værdien (rating-scoren) så bliver gemt i databasen.
Avatar billede keysersoze Guru
29. november 2013 - 17:39 #3
Lad det være sagt med det samme; der findes ikke én korrekt løsning. En mulighed kunne være at du bare har et billede, din stjerne, som du indsætter 5 gange på din side med hver deres link, fx ?rate=4, og så kan du samle den querystring op som den stemte værdi - en anden mulighed kunne være skjulte formfelter, fx en hidden tekstboks eller skjulte radio buttons du vha JavaScript sætter værdien i ved klik på et billede og så kan du submitte som en normal form - og en tredje kunne være at du sender dine data afsted med AJAX når der klikkes på et billede.
Avatar billede TheYaXxE Juniormester
29. november 2013 - 22:23 #4
Takker :)
Det vil jeg lige se nærmere på :D
Avatar billede MadsHaupt Juniormester
29. november 2013 - 23:40 #5
Der er ikke nogle tutorials lige precist for det, men der er nogle tutorials om mysql og Ajax og så er det jo kun fantasien der sætter grænser.

PHP tutorials:
http://www.nemprogrammering.dk/Tutorials/PHP/oversigt_php.php

MySQL tutorials:
http://www.nemprogrammering.dk/Tutorials/MySQL/oversigt_mysql.php

Ajax tutorials:
http://m.youtube.com/watch?v=woNQ2MA_0XU
http://m.youtube.com/results?q=ajax%20tutorial&sm=1
Avatar billede TheYaXxE Juniormester
03. december 2013 - 18:31 #6
Brugte AJAX til at lave systemet.
Man kan nu ved at klikke på en stjerne tilføje sin stemme til databasen, men et problem er nu opstået.

Efter at have tilføjet sin stemme og hentet det nye stemmeantal via AJAX, kan man ikke længere angive en ny stemme, uden at skulle refreshe siden.

Nogle der ved hvad det kan skyldes?

Min ajaxkode ser således ud:

$('span').bind('click', function() {
   
    // Define data to send
    var id = $(this).parent().attr("id");
    var star = $(this).attr("class");
   
    // Put data together and send request with ajax
    var post = "id="+id+"&stars="+star;
    $.ajax( {
        url:"includes/rate.php",
        cache:0,
        data: post,
        success:function(result) {
            document.getElementById(id).innerHTML=result;
        }
       
    });
Avatar billede MadsHaupt Juniormester
03. december 2013 - 19:47 #7
Det der er galt er at når du ændre innerHTML'en på "span" elementets parent så vil "span" elementet jo blive fjernet, fordi den er en del af innerHTML'en.

Linen er markeret med fed.

$('span').bind('click', function() {
 
    // Define data to send
    var id = $(this).parent().attr("id");
    var star = $(this).attr("class");
 
    // Put data together and send request with ajax
    var post = "id="+id+"&stars="+star;
    $.ajax( {
        url:"includes/rate.php",
        cache:0,
        data: post,
        success:function(result) {
            document.getElementById(id).innerHTML=result;
        }
     
    });
Avatar billede TheYaXxE Juniormester
03. december 2013 - 20:25 #8
inde i rate.php sender den span elementerne tilbage igen.
Hvis man bruger "Kontroller element" i Google Chrome er koderne fuldstændig identiske
Avatar billede keysersoze Guru
03. december 2013 - 22:06 #9
som udgangspunkt vil man aldrig sende html frem og tilbage men derimod et pænt dataformat, fx JSON.

Vil du endelig gøre det på din måde må du lave dit JavaScript om, for du binder din click-event til et element du efterfølgende nedlægger og det nye vil ikke have samme funktionalitet på sig. Det kan fx være

$('.dit_parent_element').on('click', '.din_span', function() { ...
Avatar billede TheYaXxE Juniormester
04. december 2013 - 00:41 #10
Har hørt en smule om det der JSON.
Men hvordan bruger man det i denne sammenhæng?
Avatar billede keysersoze Guru
04. december 2013 - 09:31 #11
Jeg har ikke forstand på PHP så hvordan du teknisk gør det tør jeg ikke gætte på, men mon ikke der er en masse eksempler hvis du søger på noget a la "json php example".
Avatar billede TheYaXxE Juniormester
05. december 2013 - 18:13 #12
Brugte..
$('.dit_parent_element').on('click', '.din_span', function() {

.. for at kunne 'gentrykke' på stjernerne og..

og $('#' + id).html(result);

.. for at få resultatet printet ordenligt ud.

Så nu spiller det hele perfekt :D

Mange tak for svarene ;)
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

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