ugrás a tartalomhoz

PHP szavazás regisztráció nélkül

Anonymous · 2006. Júl. 30. (V), 10.48
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";


?>
 
1

PPP

dummy · 2006. Júl. 30. (V), 12.20
Szóval minden dinamikus IP-vel rendelkező látogató minden felcsatlakozás után szavazhat?

Másfelől pedig egy nagyobb vállalatból csak a leggyorsabb emberke...
2

nemtudom

Anonymous · 2006. Júl. 30. (V), 12.50
Akkor rosszul álltam neki. Akkor hogyan lehet ezt megoldani? Cookieval?
3

Kész megoldás

janoszen · 2006. Júl. 30. (V), 13.21
Miután egy rakás kérés volt ilyesmire, csináltam egy kész megoldást a problémára. Nagyon egyszerű, nagyon buta, nincs DB, nincs semmi, session kell hozzá meg copy-paste tudás. Pontosan azért ilyen egyszerű, hogy egyszerű legyen kezelni. Olvasd el a readmet, ami hozzá van.

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.
4

köszi

Anonymous · 2006. Júl. 30. (V), 13.38
köszi szépen, végülis csak egy falu bemutatkozó honlapját csináltam meg (napi 10-20 látogató) és a vendégkönyv aktív emberek (3-4 ember) kértek szavazást szóval nem komoly dolog, de ha felhasználom, mindenképpen ott lesz a forrás embere is. :)
5

cookie

Hodicska Gergely · 2006. Júl. 30. (V), 20.52
Bár nagyon az sem ér sokat, de azért egy COOKIE-t érdemes lenne beállítani, ha szavazott valaki. Ja és isset elé nincs értelme @-t tenni.


Felhő
6

Jogos

janoszen · 2006. Júl. 30. (V), 22.02
Mindkét megjegyzés jogos. Az @ egyszerű régi, hibás berögződés, majd csinálok vele valamit.
A session meg azért volt jó, mert egyszerű volt. Itt az volt a szemlélet, hogy minél egyszerűbb legyen.
7

Csak a paraszti ész

vbence · 2006. Júl. 31. (H), 02.43
Lehet olyat csinálni hogy egy REMOTE_ADDR és HTTP_X_FORWARDED_FOR és HTTP_USER_GAENT kombinációról csak napi 1 szavazatot fogadjon el, emellett viszont szükség van valkire, aki a végén (vagy akár naponta) átnézi, hogy minden kóser-e. Legfőképpen, hogy egy proxy-n keresztül csak értelmes számú szavazatot fogadjon el.

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
8

nem mindig elég

Hodicska Gergely · 2006. Júl. 31. (H), 10.45
REMOTE_ADDR és HTTP_X_FORWARDED_FOR és HTTP_USER_GAENT

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ő
9

biztos fontos?

Marcell · 2006. Júl. 31. (H), 19.29
Csak csatlakozni tudok, 2 lehetőség van:

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?
11

session url-ben

vbence · 2006. Aug. 2. (Sze), 16.37
A session URL-ben mindig "csak tunám minek" kategóra, sőt, szerintem a Jééézusom szintet is eléri.
10

Kellőképpen megbízható

vbence · 2006. Aug. 2. (Sze), 16.30
Ár/eredmény arányban (reg nélkül) szerintem elég hatákony megoldás. Az IP változásra a 24 órás korlát nem hiszem, hogy olyan sok embert zárna ki.

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.
12

hát nem éppen

Hodicska Gergely · 2006. Aug. 2. (Sze), 17.46
Az IP változásra a 24 órás korlát nem hiszem, hogy olyan sok embert zárna ki.

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ő