Avatar billede adionditsak Nybegynder
06. maj 2011 - 18:30 Der er 10 kommentarer og
1 løsning

Rating system

Hej Eksperten

Jeg har lige nu et rating systemet kørende på en side jeg skal lave til en.

Systemet er dog lavet til at brugere kun kan rate 1 gang, det vil sige den bruger man er logget ind som.

Så den tjekker ens $_SESSION['brugernavn'];

Jeg skal til at sætte den op uden brugersystem og vil høre hvad muligheder der er til at man kan fortælle via ens script at man kun må rate én gang per computer.

Er der en global variabel eller lignende til dette?

Venlig hilsen
Anders
Avatar billede Slettet bruger
06. maj 2011 - 18:40 #1
Du kan smide en cookie på brugerens computer, der siger, at han allerede har rated. Se evt. http://php.net/manual/en/features.cookies.php .
Avatar billede adionditsak Nybegynder
06. maj 2011 - 18:43 #2
Tak for dit svar.

Jeg kender godt til cookies. Tænker bare at det ikke er særlig holdbart da brugeren jo så bare kan rydde sine cookies?`

men kan jo være jeg bliver nød til at bruge dette.

Så når man stemmer smider den en cookie på brugerens computer kaldet $_COOKIE['ratedonce']; el.... og hvis den ikke kan finde cookien kan man stemme ..

tja kunne være en ide i hvertfald :-)
Avatar billede Slettet bruger
06. maj 2011 - 18:50 #3
Alternativt skal du tjekke på information gemt på serversiden - dvs. via lagring af IP-adresser. Det har dog to store ulemper:
1) Brugeren kan bare gå igennem en proxy for at få en anden IP-adresse
2) Du kan ikke adskille brugere med samme IP, hvilket for det første kan være uhensigtsmæssigt for dig og for det andet kan være udgøre en risiko for brugerens privatliv, da andre med samme IP-adresse (f.eks. i samme husstand) vil kunne se, at en anden fra denne adresse har benyttet siden.
Avatar billede adionditsak Nybegynder
06. maj 2011 - 18:57 #4
Tak for dette :-)

Super cool information.

Findes der en variabel til gemte serverinformationer?

Ved der findes en kaldet $_SERVER...
Avatar billede adionditsak Nybegynder
06. maj 2011 - 19:53 #5
Har du nogen ide til hvordan hvert produkt kan have deres egen cookie, man kan vel ikke have en GET variabel liggende inde i en COOKIE når man kalder den vel?

Kan jeg på nogen måde sige noget lignende:

$app = $_GET['produkt'];

if($_COOKIE["$app"] == 0){ ...
Avatar billede Slettet bruger
06. maj 2011 - 22:01 #6
#4
http://php.net/manual/en/reserved.variables.server.php
Brugerens IP-adresse er givet ved $_SERVER['REMOTE_ADDR'].

#5
Ja, noget i den stil... Her er et hurtigt eksempel:

== index.php ==
<?php
//Har vi specificeret et produkt?
if (isset($_GET["p"]) && $_GET["p"]!="") {
    //I dette tilfælde henter vi et unikt ID for produktet via GET-variablen "p"
    $product = $_GET["p"];
    //Har vi tidligere sat en cookie, der indikerer, at vi har rated produktet?
    $cookie = "product_".$product;
    if (isset($_COOKIE[$cookie]) && $_COOKIE["$cookie"]) {//Findes cookie && er cookie sand
        //I så fald må vi ikke rate igen
        $form = "Du har allerede rated produktet ".$product;
    } else {
        //Ellers må vi gerne rate
        $form = "<form action=\"rate.php\" method=\"post\"><label>Rating til ".$product.":</label><input name=\"p\" value=\"".$product."\" type=\"hidden\"><input name=\"r\" type=\"text\"><input type=\"Submit\" value=\"Send rating\"></form>";
    }
} else {
    $form = "<form action=\"index.php\" method=\"get\"><label>Produkt:</label><input name=\"p\" type=\"text\"><input type=\"Submit\" value=\"Find produkt\"></form>";
}
?><!DOCTYPE html>
<html>
    <head>
        <title>Rate produkt</title>
    </head>
    <body>
        <p><?php echo $form; ?></p>
    </body>
</html>

== rate.php ==
<?php
if (isset($_POST["p"]) && isset($_POST["r"])) {
    $product = $_POST["p"];
    $rating = $_POST["r"];
    //Gøt noget med rating her - f.eks. tilføj til database
    //I dette tilfælde vil $rating bruges, men det er selvf. vilkårligt
    $cookie = "product_".$product;
    setcookie($cookie, true, time()+365*24*60*60);
}
header("Location: index.php");//Send os tilbage til index
?>
Avatar billede Slettet bruger
06. maj 2011 - 22:03 #7
Det vigtige i ovenstående er, at vi sætter en cookie specifikt for det valgte produkt, når en rating sendes - og at vi tjekker, om en sådan cookie eksisterer for et produkt (samt hvorvidt indholdet er "true", men det kan du sådan set godt undvære med denne tilgang), når man forsøger at rate det.
Avatar billede adionditsak Nybegynder
06. maj 2011 - 22:39 #8
Det er for fedt, tusind tak for hjælpen.

Det ser dog ud som om at den ikke kan sette cookien for de produkter som indeholder mellemrum?

Nogen måde at løse dette.

Det går fint med for eksempel Bomberman, men ikke for Donkey Kong så sætter den ikke cookien og man kan blive ved med at stemme
Avatar billede adionditsak Nybegynder
06. maj 2011 - 22:45 #9
som IKKE indeholder mellemrum*
Avatar billede adionditsak Nybegynder
07. maj 2011 - 11:32 #10
Har løst den med en str_replace :-)

Tusind tak for hjælpen, er det noget med at jeg kan give dig point el.? Er helt ny på siden.
Avatar billede Slettet bruger
07. maj 2011 - 15:05 #11
Jeg skal først skrive et indlæg, der er markeret som et "Svar" (i stedet for "Kommentar"). Hermed gjort :)
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