Avatar billede d.kryger Praktikant
21. februar 2003 - 08:14 Der er 6 kommentarer og
3 løsninger

Afstemning, hvor ip logges

Hej eksperter.

Jeg har pt. en afstemning på min side hvor jeg ligger en cookie ind. Det virker også meget fint sålænge folk har slået cookie til i browseren.

Jeg vil gerne have lavet en ny afstemning hvor ip'en logges. Hvordan gør jeg det?

Herunder ses koderne for min afstemning.

index.php:
<html>

<head>
<title>Afstemning</title>
<script language="JavaScript1.2" src="/script/fodnote.js"></script>
<link rel=stylesheet href="/script/link.css" type="text/css">
</head>

<body leftmargin="5" rigthmargin="5" topmargin="5" marginwidth="0" marginheight="0">

<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%">
<p align="center"><b><font face="Verdana" size="4">Afstemning:</font></b></p>

<?php

print "<div align='center'>";
print "<center>";
print "<table border='0' width='300' cellspacing='0' cellpadding='4'>";
print "  <tr>";
print "    <td width='100%' bgcolor='#808080'>";
print "      <p align='center'><font face='Verdana' size='1' color='#FFFFFF'>";

$connection = mysql_connect("**--**","**--**","**--**");
$db = "**--**";
mysql_select_db($db);

$result = mysql_query("SELECT nr, overskrift FROM afstemning ORDER BY nr DESC");

$row = mysql_fetch_array($result);
$overskrift = $row["overskrift"];
$nr = $row["nr"];

print $overskrift;

print "</b></font></td>";
print "</tr>";
print "</table>";

print "<br>";

print "<table border='0' width='300' cellspacing='0' cellpadding='0'>";
print "  <tr>";

if (!isset($_COOKIE["harStemt"]) || $_COOKIE["harStemt"]!=$nr)
{

print "    <td width='100%' valign='top'><form action='stem.php' method='post'>";
print "      <font size='1' face='Verdana' color='#000000'>";

$result = mysql_query("SELECT indeks, svar FROM svar WHERE afstemningsnr=$nr ORDER BY indeks");

while($row = mysql_fetch_array($result))
{ $indeks = $row["indeks"];
$svar = $row["svar"];

print "<input type='radio' value='$indeks' name='afstemning'>$svar<br>";
}

print "<img border='0' src='/grafik/afstand.gif' width='1' height='5'><br>";
print "<center><br><input type='submit' class='input_knap' value='Stem' name='submit' style='font-family: Verdana'></center></font></form></td>";
}
else
{
print "<td width='300' valign='top'>";
print "<font size='1' face='Verdana' color='#000000'>";

$result = mysql_query("SELECT SUM(antalStemmer) FROM svar WHERE afstemningsnr=$nr");
$row = mysql_fetch_array($result);
$sum = $row["SUM(antalStemmer)"];

$result = mysql_query("SELECT svar, antalStemmer FROM svar WHERE afstemningsnr=$nr ORDER BY indeks");

while($row = mysql_fetch_array($result))
{ $svar = $row["svar"];
$antalStemmer = $row["antalStemmer"];

$procentTal = round(($antalStemmer / $sum * 100), 0);

print "<img border='0' src='/grafik/afstand.gif' width='4' height='1'>$svar<br>";
print "<img border='0' src='/grafik/afstand.gif' width='4' height='11'><img border='0' src='/grafik/afstemningsbar.gif' width='".($procentTal * 1.57)."' height='10'>  $procentTal%<br>";
print "<img border='0' src='/grafik/afstand.gif' width='1' height='2'><br>";
}

print "<p align='center'><font size='1' face='Verdana' color='#000000'>Antal stemmer: $sum</font></p>";

}

print "</tr>";
print "</table>";
print "</center>";
print "</div>";

?>

<p align="center"><font face="Verdana" size="1" color="#000000"><a href='/afstemning/tidligere_afstemninger.php'>Tidligere afstemninger</a><br>
<br>
</font></p>

</td>
</tr>
<tr>
<td width="100%" align="center"><hr size="1" color="#000000"><font face="Verdana" size="1" color="#000000"><br>
<script language="JavaScript1.2">document.write(text)</script></font></td>
</tr>
</table>

</body>

</html>

stem.php:
<?php

if (isset($_POST["afstemning"]))
{
$connection = mysql_connect("**--**","**--**","**--**");
$db = "**--**";
mysql_select_db($db);

$result = mysql_query("SELECT nr FROM afstemning ORDER BY nr DESC");

$row = mysql_fetch_array($result);
$nr = $row["nr"];

setcookie("harStemt", $nr, time()+60*60*24*31, "/");
}

?>

<html>
<head>
<title>**--**</title>
</head>

<body>


<?php

if (isset($_POST["afstemning"]))
{
mysql_query("UPDATE svar SET antalStemmer=antalStemmer+1 WHERE afstemningsnr=$nr AND indeks=".$_POST["afstemning"]);
}

?>


<SCRIPT LANGUAGE="JavaScript1.2">
<!--

location.href='<?php print "/afstemning/index.php"; ?>'

// -->
</SCRIPT>


</body>
</html>
Avatar billede mufoxe Nybegynder
21. februar 2003 - 09:31 #1
Du kan få fat i en brugers IP med variablen $_SERVER['Remote_Addr']. Denne gemmer du så i DB, når en bruger har stemt. Inden den gemmes tjekker du om den findes i database ved f.eks. at oprette et nyt felt på en afstemning, som hedder IP. Her laver du så noget i retning af SELECT ip FROM svar WHERE IP = $_SERVER['Remote_Addr']

Hvis ovenstående SQL spytter mere end 0 rækker ud ved du, at brugeren allerede har stemt.

Du skal være opmærksom på at IP er en ret dårlig måde at kontrollere på i disse dage, hvor de fleste brugere har dynamiske IP adresser, hvilket betyder at du i princippet kan komme til at modtage en stemme fra en person og blokere for en anden, som senere overtager dennes IP. Jeg ville anvende IP løsningen til at falde tilbage på og så have cookie som primær kontrol.
Avatar billede avminarm Juniormester
21. februar 2003 - 11:30 #2
Jeg er enig med mufoxe - det med IP'en er en dårlig ide, så hellere lave et tjek der undersøger om brugeren accepterer cookies og hvis han ikke gør så kan han ikke stemme!
Avatar billede d.kryger Praktikant
24. februar 2003 - 10:27 #3
Avminarm -> Hvordan gør man det? (Helst et eksempel med kode)
Avatar billede avminarm Juniormester
25. februar 2003 - 08:18 #4
En simpel løsning kunne jo vøre at i starten af dit script kunne du sætte en cookie som f.eks hed tjek - hvis du ikke senere kan finde denne tjek-kage med
if (!isset($_COOKIE["tjek"]) {
  echo "dit system har ikke accepteret en cookie som afstemningsscriptet prøvede at sætte....."
}
Avatar billede avminarm Juniormester
25. februar 2003 - 08:56 #5
ellers kan du bruge dette java script:

<script type="text/javaScript">
<!--
if (navigator.cookieEnabled){
  // Cookies er slået til
}else{
  // Cookie er slået fra
} 
</script>
Avatar billede Slettet bruger
25. februar 2003 - 08:59 #6
hehe...og hvis brugeren har slået JavaScript fra?

Vil nok holde på at lave tjekket med PHP.
Avatar billede d.kryger Praktikant
25. februar 2003 - 13:04 #7
Jeg har lige prøvet lidt forskelligt, men jeg kan ikke få det til at virke optimalt. Jeg har slået cookie til i min browser, men når jeg loader siden med koden nedenunder, så skriver den: Dit system har ikke osv...
Men den har lagt en cookie ind på min cookie mappe...

Hvis jeg så trykker på F5 (Opdaterer) skriver den: Fint.

Hvorfor det?

Koden:
<?php

setcookie("tjek", "ja", time()+60*60*24);

?>
<html>

<head>
<title>Afstemning</title>
</head>

<body leftmargin="5" rigthmargin="5" topmargin="5" marginwidth="0" marginheight="0">

<?php

if (!isset($_COOKIE["tjek"]))
{
print "Dit system har ikke accepteret en cookie som afstemningsscriptet prøvede at sætte.....";
}

else
{
print "Fint";
}

?>

</body>

</html>
Avatar billede avminarm Juniormester
25. februar 2003 - 14:00 #8
er du sikker på cookien er sat, prøv at echo kagen
Avatar billede d.kryger Praktikant
25. februar 2003 - 14:28 #9
Jeg har fundet ud af at man ikke kan sætte en cookie og tjekke den på samme side...
http://www.eksperten.dk/spm/321559
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

IT-JOB

Politiets Efterretningstjeneste

GenAI-specialist i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Chef for SAP-forretningsspecialister

Capgemini Danmark A/S

AI/Data Engineer