webForumDet fria alternativet

spärr mot flera röstningar per dag i mitt script

PHP

5 svar · 362 visningar · startad av Fuze

Medlem sedan nov. 200428 inlägg
Frågan#1

Hejsan!

Jag kör ett omrösstningsscript på min sida, men tyvärr så är det möjligt för de som röstar att rösta hur många gånger som helst samma dag.
Någon som kunde vara snäll och kika på det och redigera koden lite så att man bara kan rösta en gång??
Vet inte hur svårt det är att lägga en cookie som fixar det. annars bara spara röstarens ip i databasen.
Vore väldigt bussigt!

// Flack

<?php
 
// poll v1.0 av sl0k (antn@telia.com)
 
 
// databaskoppling o val av databas
include("admin/data.php");
$db = mysql_pconnect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$databas");
 
// om rosta är tom eller 0.. dvs när de inte röstar visas följande
if (!$_GET['rosta']) {
   // sql fråga för att välja den poll som ska visas för dagens datum
   $fraga = "SELECT * FROM poll WHERE startdatum<=NOW() AND slutdatum>=NOW()";
   $resultat = mysql_query($fraga);
   $svar = mysql_fetch_array($resultat);
   $tot = $svar['totalt'];
   $id = $svar['id'];
   // om $tot existerar och inte är 0
   if ($tot) {
      $s1 = 201 - ($svar['svar1']/$tot)*200;
      $s2 = 201 - ($svar['svar2']/$tot)*200;
      $s3 = 201 - ($svar['svar3']/$tot)*200;
      $s4 = 201 - ($svar['svar4']/$tot)*200;
      $s5 = 201 - ($svar['svar5']/$tot)*200;
   }
   // om $tot däremot är 0 får variablerna sättas manuellt då division med 0 inte är tillåtet
   else { $s1=201; $s2=201; $s3=201; $s4=201; $s5=201; }
 
   // följande rader skriver ut resultat
   print "<p><b>{$svar['rubrik']}</b> </p>
<A HREF=\"default.php?id=$id&rosta=1\">{$svar['svarrubrik1']}</A> ({$svar['svar1']}) <br>
<A HREF=\"default.php?id=$id&rosta=2\">{$svar['svarrubrik2']}</A> ({$svar['svar2']}) <br> \n";
// om 3 svarsrubriker eller fler valts
if ($svar['antalrubr'] >= 3) { print "   <A HREF=\"default.php?id=$id&rosta=3\">{$svar['svarrubrik3']}</A> ({$svar['svar3']}) <br> \n";
   }
// om 4 svarsrubriker eller fler valts
if ($svar['antalrubr'] >= 4) { print "   <A HREF=\"default.php?id=$id&rosta=4\">{$svar['svarrubrik4']}</A> ({$svar['svar4']}) <br> \n";
   }
// om 5 svarsrubriker eller fler valts
if ($svar['antalrubr'] >= 5) { print "  <A HREF=\"default.php?id=$id&rosta=5\">{$svar['svarrubrik5']}</A> ({$svar['svar5']}) <br> \n";
    }
 
// skriver ut antal röster totalt
print "   <HR STYLE=\"position:relative; top:5px; left:-2px;\" WIDTH=\"93%\"><DIV STYLE=\"position:relative; left:6px; top:2px;\">Totalt: $tot röster</DIV>
</DIV>";
 
 
}
// här är det som bearbetar röstningen
else {
   $svar = "svar{$_GET['rosta']}"; // röst svaret läggs till 'svar' så att det tex blir svar2
   $id = $_GET['id']; // id på pågående fråga
   // följande ökar den kolumn som ska ökas och ökar även totala antalet röster
   $fraga = "UPDATE poll SET {$svar} = {$svar}+1, totalt=totalt+1 WHERE id='$id'";
   mysql_query($fraga);
   // skickar tillbaka användaren till resultatet 
   print "<SCRIPT>self.location=document.referrer;</SCRIPT>";
}
 
?>
Medlem sedan juni 20034 013 inlägg
#2

Enda sättet att lösa det på är genom att identifiera besökarna med inloggning. Du kan då i en särskild tabell ange vilka användare som har röstat en viss dag. IP-adresser är inte unika. Flera användare kan ha samma IP och samma användare kan ha flera IP. Cookies sparas hos användaren och är lätta att ta bort.

Medlem sedan sep. 2005114 inlägg
#3

om du inte har något problem med att användare själv riktigt lätt kan clear:a sina cookies, om dom nu tycker det är värt det... så kan du använda:

$entimme = 3600;
setcookie("voted", $voting, time()+($entimme*24)); // rösta en gång per 24 timmar.

sen kan du komma åt den med:
$_COOKIE["voted"];

(setcookie måste användas innan någon output till läsaren)

Medlem sedan nov. 200428 inlägg
#4

okay det där låter ju vettigt! då har man gjort något iallafall.
Men skulle du vilja vara snäll att hjälpa mig lägga in det i min kod??
Kan ju grunderna men inte så mycke mer.
// Flack

Medlem sedan sep. 200522 inlägg
#5

Lättast är att använda en databas med ipaddr och ett unixstamp när han röstade, och ut efter det visa om han kan rösta eller inte.

Medlem sedan nov. 200428 inlägg
#6

Säger mig tyvärr inte särskillt mycke det heller. skulle gärna vilja se det i min kod =)

275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)