PHP szavazás regisztráció nélkül
Sziasztok!
Legyetek szívesen segítsetek nekem!
Szeretnék csinálni egy szavazást, regisztráció nélkül. Úgy gondoltam, hogy úgy lesz a szavazás, hogy aki eddig nem szavazott annak bejön a szavazó FORM de aki már igen annak csak az eredmények kiiratésai. Arra gondoltam, hogy ez IP cím alapján történne, és mikor szavazol és nincsen benne a DB-ben az IP-d akkor amikor küldi a szavazatodat akkor küldi be az IP címedet is. De nemigen akar működni, légyetek szívesek segítsetek.
<?php
include("db.php");
#kiiratjuk az első és egyben aktuális szavazás kérdését
$lekerdezes = mysql_query("select * from kerdes order by id desc limit 0,1");
$t_kiiratas = mysql_fetch_array($lekerdezes);
echo "".$t_kiiratas['cim']."";
#leellenőrzöm az IP címet, hogy mi van neki, majd kiválasztok mindent a DB-ből a szavazo-ból
$ipellenorzes = $_SERVER['REMOTE_ADDR'];
$ipcimgyujtes = mysql_query("SELECT ip_cim FROM szavazo");
#ha az IP-je benne van a tömbben a szavazókból, akkor nem jön be neki újra a form
------------------------------------------------------------------
NA ÉS ITT MIT CSINÁLJAK, HOGYAN STB.?
------------------------------------------------------------------
#ha az űrlap nincs elküldve
if ($eztjelolom==""){
echo "<form method=\"post\" action=\"szavazat.php\">";
$sql_valasz = mysql_query("select * from valasz where kerdes_id=".$t_kiiratas['id']."");
while ($t_valasz = mysql_fetch_array($sql_valasz)){
echo "<input type=\"radio\" name=\"eztjelolom\" value=\"".$t_valasz['id']."\">".$t_valasz['valasz']."<br>";}
echo "<input type=\"submit\" value=\"Mehet\">";
echo "</form>";
}else{
#az aktuális válaszhoz hozzáadok 1-et és benyomom az IP-t a szavazo táblába
mysql_query("UPDATE valasz SET szavazat = szavazat+1 WHERE id = $eztjelolom");
$ipcimke = $_SERVER['REMOTE_ADDR'];
mysql_query("INSERT INTO szavazo (id, ip_cim) VALUES ('', '$ipcimke')");
#eddig jó írjuk ki az eredményeket
}
echo "<br>Itt lesz majd az eredmény kiiratása";
?>
■ Legyetek szívesen segítsetek nekem!
Szeretnék csinálni egy szavazást, regisztráció nélkül. Úgy gondoltam, hogy úgy lesz a szavazás, hogy aki eddig nem szavazott annak bejön a szavazó FORM de aki már igen annak csak az eredmények kiiratésai. Arra gondoltam, hogy ez IP cím alapján történne, és mikor szavazol és nincsen benne a DB-ben az IP-d akkor amikor küldi a szavazatodat akkor küldi be az IP címedet is. De nemigen akar működni, légyetek szívesek segítsetek.
<?php
include("db.php");
#kiiratjuk az első és egyben aktuális szavazás kérdését
$lekerdezes = mysql_query("select * from kerdes order by id desc limit 0,1");
$t_kiiratas = mysql_fetch_array($lekerdezes);
echo "".$t_kiiratas['cim']."";
#leellenőrzöm az IP címet, hogy mi van neki, majd kiválasztok mindent a DB-ből a szavazo-ból
$ipellenorzes = $_SERVER['REMOTE_ADDR'];
$ipcimgyujtes = mysql_query("SELECT ip_cim FROM szavazo");
#ha az IP-je benne van a tömbben a szavazókból, akkor nem jön be neki újra a form
------------------------------------------------------------------
NA ÉS ITT MIT CSINÁLJAK, HOGYAN STB.?
------------------------------------------------------------------
#ha az űrlap nincs elküldve
if ($eztjelolom==""){
echo "<form method=\"post\" action=\"szavazat.php\">";
$sql_valasz = mysql_query("select * from valasz where kerdes_id=".$t_kiiratas['id']."");
while ($t_valasz = mysql_fetch_array($sql_valasz)){
echo "<input type=\"radio\" name=\"eztjelolom\" value=\"".$t_valasz['id']."\">".$t_valasz['valasz']."<br>";}
echo "<input type=\"submit\" value=\"Mehet\">";
echo "</form>";
}else{
#az aktuális válaszhoz hozzáadok 1-et és benyomom az IP-t a szavazo táblába
mysql_query("UPDATE valasz SET szavazat = szavazat+1 WHERE id = $eztjelolom");
$ipcimke = $_SERVER['REMOTE_ADDR'];
mysql_query("INSERT INTO szavazo (id, ip_cim) VALUES ('', '$ipcimke')");
#eddig jó írjuk ki az eredményeket
}
echo "<br>Itt lesz majd az eredmény kiiratása";
?>
PPP
Másfelől pedig egy nagyobb vállalatból csak a leggyorsabb emberke...
nemtudom
Kész megoldás
CSS-sel lehet a kinézetét szabályozni, van hozzá demó meg minden. Használd egészséggel. Egy visszalinknek az oldalamra (http://janoszen.hu/) vagy a Weblaborra örülnék, de nem kötelező. Ha commerc. munkához akarod használni, egyeztessünk magánban.
köszi
cookie
Felhő
Jogos
A session meg azért volt jó, mert egyszerű volt. Itt az volt a szemlélet, hogy minél egyszerűbb legyen.
Csak a paraszti ész
A szavazás lezáráskor csinálhatsz egy egyszerű ellenőrzést:
végigméssz minden IP-n (vagy talán inkább subneten), ahonnan szavazat jött, és ha az aktuális IP-t (vagy subnetet) kizárva is ugynaz a nyertes, akkor a vizsgált tartomány érvényes, kümönben nem. Ez egy picit durva szűrő, de lényegesen javítható az eredmény pontossága, ha a csak fenti adatok állnak rendelkezésre.
Ha síma felhesználóktól akarod megvédei a dolgot, akkor ez jó lesz, ha hekkerektől akkor jobban rá kell feküdni a dologra, de nem érdemes.
B
nem mindig elég
Ez nem túl korrekt megoldás, egyrészt a HTTP_X_FORWARDED_FOR sok esetben nincs kitöltve, másrészt pedig több olyan netszolgáltató is van (pl. AOL, de van egy nagyobb kanadai cég is), ahol az IP címek folyamatosan változnak, így ez alpján olyan embereket zársz ki, aki legálisan szavazhatnának.
A dolog egyszerű, ha fontos a szavazás, akkor authentikáció kell, ha nem akkor meg kár nagyon erőlködni, főleg, hogy igazán jó megoldás úgysem lesz.
Felhő
biztos fontos?
1) ha nem olyan fontos az a +-3 szavazat: sztem elég egy cookie is
2) ha fontos a pontos eredmény: regisztrált felhasználók szavazhatnak
Én nem látom értelmét annak, hogy egy szavazáshoz 5 oldalas kódot irkáljak, amiben az IP-ket találgatom, meg nagyítóval fejtegetem, hogy aztán páran az arcomba röhögjenek, hogy "na azért mégiscsak sikerült 2x szavaznom". Kár egy szavazást túlbonyolítani, ha nem életbevágó. Ez pont olyan, mint amikor egy kb 3 szinte statikus lapból álló oldalnál SESSID-t adnak tovább URLben. Csak tudnám, minek?
session url-ben
Kellőképpen megbízható
Néhány ezer szavazatnál biztos nem szigorú, sőt még ha mondjuk egy index.hu-ról beszélünk akkor sem magasabb 8,10%-nál (hasraütésre) az esélye, hogy az IP előző tulajdonosa is megnézte az oldalt, hát még annak, hogy szavazott is rajta (ami az előző eredmény 10%-a).
Az X-FORWARDED pedig elsősorban a sulinet miatt, de amúgy is ad némi információt.
Esetleg cookie-val kombinálva lehetne finomhangolni a dolgot, hogy egy kombinációról nem csak 1 hanem 5 szavazatot fogadunk el, vagy ilyesmi. Persze, hogy nem annyira megbízható, mint a reg (ami szntén ezer sebből vétzik), de erre a problémára elfogadható kompromisszum.
hát nem éppen
Direkt írtam, hogy folyamatosan változnak. Van több ilyen nagyobb szolgáltató is. Így a user nyugodtan szavazgathat, míg mások meg nem tudnak. Ezért laikusok kizárására sokkal célszerűbb cookiet használni.
Felhő