Potřeboval bych vědět, jak chránit pomocí cookies php skripty proti vícenásobnému použítí. Díky
http://www.pcsvet.cz/art/article.php?id=2580&search=cookies+php
zkus mrknout sem
Díky! Fungovalo yb to teda, kdybych tuhle v tom hodnoceni dal misto * setCookie a pak bych tim isset zjistil jestli uz ho tam ma a kdyz jo tak by mu to zakazalo hlasovat?
<?php
if (file_exists("Povidky/mpavelek1/znamky.dat")):
$fp = fopen("Povidky/mpavelek1/znamky.dat", "r");
$data_znamkovani = FRead ($fp, FileSize("Povidky/mpavelek1/znamky.dat"));
list($z1,$z2,$z3,$z4,$z5) = Explode(":", $data_znamkovani);
endif;
if (isset($odpoved)) {
if (!file_exists("Povidky/mpavelek1/znamky.dat")):
$z1 = "0";
$z2 = "0";
$z3 = "0";
$z4 = "0";
$z5 = "0";
$fp = fopen("Povidky/mpavelek1/znamky.dat", "w");
fwrite ($fp, $z1 .":" . $z2 .":" . $z3 .":" . $z4 .":" . $z5);
fclose($fp);
endif;
if (1) {
if (isset($odpoved)):
if ($odpoved == '1') $z1++ *;
if ($odpoved == '2') $z2++;
if ($odpoved == '3') $z3++;
if ($odpoved == '4') $z4++;
if ($odpoved == '5') $z5++;
$data_znamkovani = $z1 . ":" . $z2 . ":" . $z3 . ":" . $z4 . ":" . $z5;
endif;
$fp = fopen ("Povidky/mpavelek1/znamky.dat", "w");
fwrite ($fp, $data_znamkovani);
fclose ($fp);
}
}
?>
pokud chces aby to bylo jako hodnoceni, tak bych doporucoval pouzit databazi, je to slozitejsi, ale mozna vyhodnejsi, nezapomen, ze pokus odstrani cookies ze sveho pocitace, tak muze zase hlasovat. Na tom linku v pcsvet.cz dej hledat php+mysql a najdes furu skriptu, do databaze si nactes ip adresu navstevnika, a pocet hlasu ke kazde odpovedi, jako do souboru. Pak das na zacatek skript, ktery projde ip adresy v databazi a porovna je s ip adresou navstevnika, pokud nebude v databazi, povoli mu hlasovat, po hlasovani se zapisou hlasy a pripise se jeho ip na seznam.
Hodne stesti, taky jsem si s tim hral, pouzivej na zacatek MyPHPAdmin. Spust si MySQL.wz.cz
Cusik
2george:
Ja bych radsi pouzil kombinaci IP adresy i cookies (a mozna i session a samozrejme casove razitko), kdyby se chtelo mit tu anketu opravdu verohodnou, tak ti to pokazi veci jako internetove kavarny, skolni a univerzitni pocitacove haly, atd. Tam u jednoho pocitace sedi milion lidi, ale porad jsou videt pod jednou IP adresou, takze nekdo novy prijde a ono mu to nepovoli hlasovat, protoze nekdo pred nim uz hlasovat ze stejneho pocitace.
To by ale opet nazabranilo uzivateli smazat cookie a hlasoovat znovu, takze tam bych pouzil to casove razitko, tzn. pri hlasovani si zaznamenat cas a dalsi hlasovani povolit az treba za nekolik hodin, nebo pristi den, za tyden... cojavim... :)
No ono to je spíš pro takový debílky, co prostě mačkaj pořád jedno a to samý za sebou třeba 50x jenom, aby byla sranda, jinak je to O.K. takže by stačilo to Cookies, ale stejně dík.
Jo a mám tu s tim problém, proč mi to vypisuje:
Warning: Cannot modify header information - headers already sent by (output started at /3w/mysteria.cz/f/foxcentrum/index.php:83) in /3w/mysteria.cz/f/foxcentrum/Povidky/mpavelek1/znamkovani.php on line 20
?
Původní skript je:
<?php
if (file_exists("Povidky/mpavelek1/znamky.dat")):
$fp = fopen("Povidky/mpavelek1/znamky.dat", "r");
$data_znamkovani = FRead ($fp, FileSize("Povidky/mpavelek1/znamky.dat"));
list($z1,$z2,$z3,$z4,$z5) = Explode(":", $data_znamkovani);
endif;
if (isset($odpoved)) {
if (!file_exists("Povidky/mpavelek1/znamky.dat")):
$z1 = "0";
$z2 = "0";
$z3 = "0";
$z4 = "0";
$z5 = "0";
$fp = fopen("Povidky/mpavelek1/znamky.dat", "w");
fwrite ($fp, $z1 .":" . $z2 .":" . $z3 .":" . $z4 .":" . $z5);
fclose($fp);
endif;
if($hlasovano!="ano"):
if (1) {
if (isset($odpoved)):
if ($odpoved == '1') $z1++;
if ($odpoved == '2') $z2++;
if ($odpoved == '3') $z3++;
if ($odpoved == '4') $z4++;
if ($odpoved == '5') $z5++;
$data_znamkovani = $z1 . ":" . $z2 . ":" . $z3 . ":" . $z4 . ":" . $z5;
$fp = fopen ("Povidky/mpavelek1/znamky.dat", "w");
fwrite ($fp, $data_znamkovani);
fclose ($fp);
endif;
};
else:
echo "Už jste hlasoval/a. Zkuste to zítra...
<a href='javascript:history.back()'>Zpět</a>";
endif;
}
?>
Ten původní script je v pořádku ne? Tohle hlaseni se ti vypise, pokud chces uzivateli zaslat cookies a uz jsi něco zapsal na výstup scriptu. Cookies se odesilaji v Http hlavičce, tak jeho nastaveni musis provect uplne na zacatku...
Je treba chybne:
<?
echo "<head><title>stranka s chybou</title>";
.
.
.
SetCookie("hlasovano","ano", Time()+(3600*24);
?>
to Eagleeye:
http://sk2.php.net/manual/sk/function.ob-start.php
ob_start(); - mozes posielat cookies aj po odoslani headers.
Karry: Aha, já tam zapomněl dát to SetCookie. Nicméně to by šlo to dát na začátek, ale k čemu je tam header("Location: $refer"); ? Můžu to vynechat?