Autor Zpráva
lesiak307
Profil
Pozdravujem všetkých. S PHP robím len krátko. Mám stránku, ktorú som chcel trošku spestriť anketou a tak som na nete našiel niekoľko už pripravených ankiet, kde stačilo len zmeniť otázku a odpovede. Tak som si vybral jednu, o ktorej som myslel že je pre mňa najlepšia.
Otázka a odpovede sa ukladajú do DB, kontrola hlasovania je pomocou COOKIES. Všetko zo začiatku fungovalo v najlepšom poriadku, až pred pár dnami som si všimol, že odpovede začínajú byť nereálne. To preto, lebo ide o stránku obce a v ankete bola otázka či návštevník pochádza z danej obce. Počet hlasom za ÁNO je už veľmi vysoký... - tak to je prvá vec ktorá nesedí. Preto som sa rozhodol, že anketu zastavím a to takým spôsobom, že odstránim <a href> z hlasovacích odpovedí. No dnes pozerám, že niekto zase hlasoval, čo by už nemalo byť možné. A tu je otázka: vedel by mi niekto povedať, či to mohol spôsobiť najaký robot, alebo ČO??? Ďakujem....
mckay
Profil
lesiak307:
Pravděpodobně ano. Jestli ten robot maže pravidelně cookies tak si může hlasovat dokola jak se mu zachce - na to se používá rel="nofollow", aby na to boti neklikaly. Ukaž živou ukázku, nepochopil jsem úplně jak si to myslel, že si odstranil <a href> ;).
shaggy
Profil
Nemusí ísť o robota, stačí aby som si vymazal cookies a môžem hlasovať znova.
lesiak307
Profil
<div id="anketa">
<?php
include 'anketa.php'
?>
<div>Pochádzate z Bunkoviec?</div><hr>
<a href="anketa.php?hlas=3&amp;back=<?php echo $_SERVER["REQUEST_URI"]; ?>"> Áno<br> <?php showCount("1"); ?><br><hr> <!-- pôvodne bolo toto-->   
Nie<br> <?php showCount("2"); ?><br><hr>  <!-- aby sa nedalo hlasovať, nechal som len toto-->  
<div>Počet hlasov: <?php echo all(); ?></div>
</div>
shaggy
Profil
lesiak307:
A môžeš nám ukázať, ako vyzerá vygenerovaný kód? Konkrétne, aký je výstup funkcie showCount?
lesiak307
Profil
<?php
$refer = $_GET['back'];
$cnt_sql = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS);
mysql_select_db($MYSQL_DB, $cnt_sql);

if(isset($_GET['hlas'])) {
	$hlas = urlencode($_GET['hlas']);

	$cookie = 'anketa';

	$query = "SELECT * FROM anketa WHERE hlas = '$hlas'";
	$result = mysql_query($query, $cnt_sql);

	if(!$result) 
	{
		echo mysql_error();
		exit;
	}
	
if(mysql_num_rows($result) == 0) 
{
		$query = "INSERT INTO anketa VALUES('$hlas', 0)";
		$result = mysql_query($query, $cnt_sql);
}
	else 
	{
			if(!isset($_COOKIE[''.$cookie])) 
			{
			$query = "UPDATE anketa SET anketa = anketa + 1 WHERE hlas = '$hlas'";
			$result = mysql_query($query);
			setcookie($cookie, "ok", time() + 5184000);
			}
		}
		header("Location: ".$refer);
	}


//funkcia na vykreslenie grafu, počtu hlasov a percent
function showCount($hlasID)
{
	global $cnt_sql;
	$query = "SELECT anketa FROM anketa WHERE hlas = '$hlasID'";
	$result = mysql_query($query, $cnt_sql);
	$vse = "SELECT sum(anketa) FROM anketa";
	$result1 = mysql_query($vse, $cnt_sql);
	if(mysql_num_rows($result) == 0) 
	{
		echo '0(0%)';
	}
		else {
				$count = mysql_fetch_row($result);
				$pocet = mysql_fetch_row($result1);
				
				$pruh = 110; //dlazka grafu
				
					if ($pocet[0] == 0)
					{
					echo $count[0]."(0%)";
					}
					
				else echo '<img src="sloupec'.$hlasID.'.gif" align="middle" height="10" width="'.round($count[0]/$pocet[0]*$pruh, 1).'"> '.$count[0].' ('.round($count[0]/$pocet[0]*100, 1).' %)';
				}

}
//funkcia na vypisanie celkového počtu hlasov
function all()
{
	global $cnt_sql;
	$query = "SELECT sum(anketa) FROM anketa";
	$result = mysql_query($query, $cnt_sql);
	$count = mysql_fetch_row($result);
	return $count[0];
}
?>
shaggy
Profil
lesiak307:
Si Slovák, takže predpokladám, že jazyková bariéra medzi nami nie je. Preto sa ťa pýtam ešte raz, ako vyzerá kód, ktorý ti php vygeneruje (vieš, to html, čo vidím ja, ty, návštevníci a aj prípadný robot)... aj keď je to viacmenej jedno, stále si myslím, že to môže robiť niekto, kto si z teba robí srandu (vymaže cookies a opäť zahlasuje).

Najlepšie by bolo, ak by si dal odkaz na stránku, kde by sme si pozreli počet hlasov (ak ide o navýšenie v desiatkach, tak to určite robí človek) a aj samotný kód.
lesiak307
Profil
www.bunkovce.sk

navšenie nie je v desiatkach, ale stranka funguje len 2 mesiace a pochybujem, žeby už na ňu chodilo toľko ľudí a žeby z obce pochádzalo 236 ľudí - ktorí by chodili na stránku. Obec má asi 400 ľudí aj s deťmi a starými občanmi...
lesiak307
Profil
shaggy:
Tak..., prišiel si na niečo?
lesiak307
Profil
Alebo inač sa opýtam. Ako by som mohol upraviť tuto anketu aby nebola kontrolovaná COOKIES, ale iným spôsobom...? Vlastne celý script už vidíte... Ďakujem za rady.
Chazzy
Profil *
Kontrolovat IP adresu
mckay
Profil
shaggy:
Nemusí ísť o robota, stačí aby som si vymazal cookies a môžem hlasovať znova.
A komu by se chtělo stále si mazat cookies a přidávat nereálné počty hlasů? Buď to bude nějaké malé dítě, které se nudí, tak maže cookies a myslí si, jak strašně ten web hackuje, a nebo to bude bot (dle mého).
lesiak307
Profil
[#12] mckay:
Kurňa, ale najviac ma na tom štve to, že už by sa nemalo dať hlasovať, ale zase niekto hlasoval!!! Včera bolo za ÁNO odhlasované 236 krát a dnes je už 257 x !!!!

[#11] Chazzy:
Asi to budem musieť spraviť cez IP. No problém je v tom, že ide o stránku obce. No a v tej obci je jeden poskytovateľ siete - wifi. Málo kto ma iné pripojenie (asi nikto). Nie som si istý, ale asi budu mať rovnakú IP.
mattyZEM
Profil
lesiak307:
Nie som si istý, ale asi budu mať rovnakú IP.
U hlasů si loguj IP adresu a hnedka zjistíš...
lesiak307
Profil
Ďakujem za rady... idem na to
mckay
Profil
lesiak307:
Mimochodem, úplně jsem to nepochopil - nechtěl jsi v předminulém příspěvku místo obce napsat vesnice? Nebo na slovensku obec == vesnice? :) Pokud všichni mají stejnou IP, tak řešení pravděpodobně nebude ;)
panther
Profil
<mimo-téma>
mckay:
nechtěl jsi v předminulém příspěvku místo obce napsat vesnice?
je k tomu nějaký důvod?

Jen podle počtu obyvatel raději nesuď (i tak je to obec, vzhledem k tomu, že má s největší pravděpodobností „obecní úřad“). Například Přebuz je také město, přestože má pár desítek obyvatel.
</mimo-téma>
lesiak307
Profil
Tak ma napadlo, a je to aj vďaka vaším úvahám a radám... asi to spravím tak, že nechám tie cookies, ale len pre svoju vedomosť do databázy si budem ukladať IP adresy hlasujúcich. Tak by som mal mať aspoň nejaký ten prehľad....

[#16] mckay:
No jasne že obec == vesnice ...
lesiak307
Profil
Ďakujem Vám všetkým za rady, veľmi ste mi pomohli!
lesiak307
Profil
Len pre informáciu ako to dopadlo... V PHP som vytvoril aplikáciu, ktorá presne sleduje každý jeden hlas a zistil som, že to robil robot spider53.yandex.ru a googlebot - ****** :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0