ich habe ein kleines voting mit ip-sperre am laufen - ich weiss, ip-sperre ist nicht optimal aber der aufwand durfte nicht zu grosse sein - und jetzt gibt es trotzdem doppelte ip-nummer einträge... gibt's noch eine schlaue lösung, wie ich das verhindern kann?
hier der code
Code: Alles auswählen
<?php
// rexpoll: Show Poll
// ausgabe.
if(OOAddon::isAvailable("rexpoll"))
{ if (intVal("REX_VALUE[1]") > 0)
{ # do a basic security check to see if the user has voted in the last 24 hours, only cookie based
echo '<div class="rexpoll">';
if (isset($_POST['REXpoll']))
{ $ip=$_SERVER['REMOTE_ADDR'];
$usql=new rex_sql;
$usql->setTable($REX['ADDON']['dbpref']['rexpoll']."rexpoll_answers");
$usql->setValue('fANSWER',intVal($_POST['REXpoll']['answer']));
$usql->setValue('rPOLLID',"REX_VALUE[1]");
$usql->setValue('fIP',$ip);
$usql->insert();
if ("REX_LINK[1]"!="")
{ header('Location:'.rex_getUrl("REX_LINK_ID[1]"));
}
else
{ header('Location:'.rex_getUrl($this->article_id));
}
exit();
}
else
{ # query db for polls
$sql=new rex_sql;
$sql->setQuery('SELECT * FROM '.$REX['ADDON']['dbpref']['rexpoll'].'rexpoll WHERE fID='.intVal("REX_VALUE[1]"));
# if the poll exists, show it
if ($sql->getRows()==1)
{
# explode the answers into an array
$values=$sql->getValue('fFIELDS');
$values=trim($values);
$values=explode("\n",$values);
if (count($values)>0)
{ # if any answers are found, show the poll form
echo '<form action="index.php" name="REXpoll" method="post">';
echo '<h2>Online-Abstimmung</h2>';
// IP aus der DB auslesen
$ip=$_SERVER['REMOTE_ADDR'];
$IPsql=new rex_sql;
$IPsql->setQuery("SELECT * FROM `rex_250_rexpoll_answers` WHERE `fIP` LIKE '$ip'");
$rows = $IPsql->getRows();
# if IP exists
if ($rows != 0)
{
echo '<p class="voted"><b>Sie haben bereits abgestimmt!</b></p>';
}
foreach ($values as $k=>$v)
{ if ($k==0)
{ $sel=' checked="checked"';
}
else
{ $sel='';
}
echo '<input'.$sel.' type="radio" id="REXpoll_'.$k.'" name="REXpoll[answer]" value="'.$k.'" />'."\n";
echo '<label for="REXpoll_'.$k.'">'.htmlentities($v,ENT_QUOTES,'UTF-8').'</label><br />'."\n";
}
echo '<input type="hidden" name="REXpoll[poll]" value="'."REX_VALUE[1]".'">'."\n";
echo '<input type="hidden" name="article_id" value="'.$this->article_id.'">'."\n";
echo '<input type="hidden" name="clang" value="'.$REX['CUR_CLANG'].'">'."\n";
if ($rows != 0)
{
if ("REX_LINK[1]"!="")
{ echo '<p class="result"><a href="'."REX_LINK[1]".'" title="Ergebnisse anzeigen">» Ergebnisse anzeigen</a></p>';
}
}
else
{ echo '<input type="submit" class="submit" name="REXpoll[submit]" value="» Abstimmen" />';
}
echo '</form>';
}
}
else
{ echo 'REXpoll - no polls found';
}
}
echo '</div>';
}
}
else
{ echo "Dieses Modul benötigt das REXpoll Addon!";
}
?>
pat