webForumDet fria alternativet

Min ip kontroll funkar bara ibland

PHP

6 svar · 337 visningar · startad av jiggan

Medlem sedan juni 2003175 inlägg
Frågan#1

Tjena. Jag har byggt färdigt min poll nu men jag har stött på ett problem till. Jag har tänkt att man bara skall kunna rösta en gång/poll. Det märkliga är att ibland funkar det, ibland inte. Någon som vet varför? Min kod ser ut så här:

<?php
$link = mysql_connect (".........", ".......", "........") or die (mysql_error());
mysql_select_db ("......", $link);
$sql = "SELECT ip FROM vote_ip";
$resultat = mysql_query($sql, $link) or die (mysql_error());
while ($rad = mysql_fetch_array($resultat))
{
$ip = getenv ("REMOTE_ADDR");
$vote_ip = $rad['ip'];
}
if ($ip == $vote_ip)
{
header("Location:index.php?vote=fel");
}
else
{
här sparar jag då rösterna.
}
?>

Medlem sedan mars 20024 456 inlägg
#2

Har nog inget med din kod att göra...
Utan att IP:n inte e samma och då kan man helt plöttsligt rösta igen...

Medlem sedan juni 2003175 inlägg
#3

Jo ens ip nummer är samma för efter else så sätter jag in ip nummert i den databasen jag kollar i i koden...och när jag kolla i phpmyadmin kan samma ip nummer finnas med flera gånger.

Medlem sedan okt. 20023 030 inlägg
#4
<?php
$link = mysql_connect (".........", ".......", "........") or die (mysql_error());
mysql_select_db ("......", $link);
$sql = "SELECT DISTINCT ip FROM vote_ip WHERE ip = '" . $_SERVER['REMOTE_ADDR'] . "'";
$resultat = mysql_query($sql, $link) or die (mysql_error());
if (mysql_num_rows($resultat) >= 1) {
    header("Location: index.php?vote=fel");
} else {
    // sätt in ip i databasen och spara rösten
}
?>
Medlem sedan juni 2003175 inlägg
#5

Tack så mycket Nexus86! Att jag inte tänkte på att jag kunde kolla så! Det verkar funka nu, men det skummaste är ju att min kod funkar ibland :)

Medlem sedan mars 20025 907 inlägg
#6

jiggan skrev:

Tack så mycket Nexus86! Att jag inte tänkte på att jag kunde kolla så! Det verkar funka nu, men det skummaste är ju att min kod funkar ibland :)

Inte så konstigt egentligen. Din kod loopar igenom alla IP'n som finns sparade i databasen. Det är dock bara det sista numret som jämförs med besökarens aktuella IP.

Medlem sedan okt. 20023 030 inlägg
#7

Kom på att det kanske är mer prestandavänligt att hämta ur databasen DISTINCT. D.v.s den räknar bara med en av varje hittad ip. Detta bör snabba upp det hela litegranna men det är absolut inte så att man märker såvida tabellen är helt fullsmockad med rader.

Har redigerat mitt förra inlägg och gjort om sql-satsen och lagt med DISTINCT. Om du vill använda det är helt upp till dig. :)

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