Autor Zpráva
Manny
Profil *
Ahojte,
pokouším se nastavit cookies tak, abych zabránil opakovanému hlasování. A to zamezit hlasováni jedné IP k jedné položce. Stejná IP by k jiné položce mohla hlasovat. Myslel jsem, že nastavím jméno cookie jako položku a hodnotu jí dám IP. Ale v tomhle stavu mi to nejde. Poradí mi někdo?
if (!empty($_GET["hodnoceni"]))  //zjistí, jestli se už hodnotilo (jestli není parametr GET prázdný)
{
	
	$hodnoceni = $_GET["hodnoceni"];  //zjednodušení proměnné
	$cisloslozky = basename(realpath(dirname(__FILE__) . '/'));  //zjistí název(číslo) adresáře a uloží ho do proměnné
	$ip = $_SERVER["REMOTE_ADDR"];  //zjistí se IP hlasujícího
	$adresa = $ip;
		if (isset($_COOKIE['$cisloslozky']))
			if ($adresa == $ip)	exit ('<script>alert("Už jste hlasoval!")</script>');
			
		else
			setcookie('$cisloslozky', $ip, time()+(60 * 60 * 24));
		
		
	$spojeni=mysql_connect('localhost','root',''); //spojení se serverem

atd...
Jan Tvrdík
Profil
Manny:
Místo '$cisloslozky' používej "$cisloslozky". Tím vyřešíš syntaktický problém, ale pořád bude problémem, že ten kód obsahuje logickou chybu.
Manny
Profil *
Jan Tvrdík:
Díky, ale zatím to líp neumím.:-(
fuckin
Profil
Manny:
Jakou funkci tam má $cisloslozky ?
Manny
Profil *
fuckin:
$cisloslozky mi identifikuje položku, pro kterou se hlasuje. V podstatě mám x očíslovaných adresářů, jejichž čísla odpovídají řádkům v databázi.
fuckin
Profil
Manny:
Poté je celkový návrh logiky scriptu katastrofální.

Jestliže uložíš IP adresu do cookie a pak to porovnáváš tak se nediv, že to nefunguje jak má. Každý uživatel má vlastní PC kde má vlastní cookie. Tudíž i kdyby měl stejnou IP jak soused ale byl na jiném pc, tak soused i on může hlasovat pro stejnou položku.

Tyto data budeš muset ukládat buď do databáze. Sloupce např. - ip adresa, položka.

Nebo do souborů. Název souboru bude roven IP a jeho obsah bude roven položce/kám.

Tedy např.
$polozka = $_GET['hodnoceni']; //zvolena polozka
$ip = $_SERVER["REMOTE_ADDR"]; //ip

if (file_exists('cesta/'.$ip)) { //zkontrolujem zda uz ip hlasovala
    $hlasoval_pro = explode(";",file_get_contents('cesta/'.$ip)); //rozdelime na pole pro pripad vice polozek
}
if (in_array($polozka,$hlasoval_pro)) { //jestlize polozka je v souboru
    exit('<script>alert("Už jste hlasoval!")</script>'); //pak exit
} else {
    file_put_contents('cesta/'.$ip,$hlasoval_pro.';'.$polozka); //pridame polozku
    /** a tady zvysime pocet hlasu v polozce o 1 **/
}
  


";" funguje jako oddělovač položek v souboru
AM_
Profil
Jan Tvrdík:
Místo '$cisloslozky' používej "$cisloslozky".
z deště pod okap, místo obojího používej $cisloslozky. V těch dvojitých uvozovkách to sice fungovat bude, ale je to ošklivý zlozvyk.
Manny
Profil *
fuckin:
Díky za pomoc. Pokusím se tvým postupem nějak probrat (ale zatím to moc nechápu). Začal jsem s php před měsícem, takže moje snahy asi nejsou ideální:-) Původně jsem se chtěl vyhnout ukládání do databáze nebo souboru. Myslel jsem, že by to šlo nejjednodušeji přes cookie. Chtěl jsem totiž povolit opkované hlasování třeba po týdnu. Takže jsem zase na záčátku:-(
AM_
Profil
Manny:
Myslel jsem, že by to šlo nejjednodušeji přes cookie. Chtěl jsem totiž povolit opkované hlasování třeba po týdnu.
tohle nevím, jak spolu souvisí - když si do DB uložíš IP a datum poslední návštěvy, budeš při hlasování ověřovat, zda IP nehlasovala v minulém týdnu.

Jinak často omílané obecné moudro: PHP není dobré se učit metodou pokus/omyl, protože v tom jazyce je spousta zavrženého balastu (nejen) z dob minulých, který se takovouto metodou naučíš používat a budeš mít problémy. Raději si kup nějakou knihu nebo projdi aspoň nějaký tutoriál (hlavně aktuální! co bylo před pěti lety v PHP novinka, se dnes ukázalo jako zmíněný balast, se kterým se kvůli tomu ani do budoucna nepočítá).
Manny
Profil *
AM:
když si do DB uložíš IP a datum poslední návštěvy, budeš při hlasování ověřovat, zda IP nehlasovala v minulém týdnu.
Dobrá, asi to tak zkusím.

Jinak: Mě právě učení metodou pokusů vyhovuje. Chápu, že se tak můžu naučit spoustu nepotřebného (to už jsem zjistil, když jsem se učil html a css), ale pro začátečníka je to příliš mnoho informací, které musí vstřebat a teprve potom vyhodnotit, co je potřeba a co ne. Začal jsem s tutoriálem p. Ponkráce na živě.cz (to mi dalo asi nejvíc) a pak Petr Zajíc na Linuxsoftu.cz. I knih už jsem měl několik, ale málokterá je skutečně učebnice a když už, tak jak říkáš 5 let stará. To si nestěžuju, ale jen hodnotím stav věci. Takže se snažím procházet i toto fórum, abych se něco naučil. A když nenajdu, píšu.:-)
fuckin
Profil
Manny:
A proto tva programátorska technika je tam kde je. Nejlepší je php se učit na větších projektech kde si důkladně prostuduješ kód pro zjisteni ruznych fíglů či jiných užitečných věcí.

Pamatuj, kvalita programátora se nehodnotí podle výčtu funkcí, které zná nazpaměť.
Manny
Profil *
fuckin:
Pamatuj, kvalita programátora se nehodnotí podle výčtu funkcí, které zná nazpaměť.
To se ani nesnažím. Učím se to proto, že mě to baví a ne že s tím budu živit. Právě proto se snažím převést svoje doposud statické stránky do dynamičtější podoby. Takže mám konkrétní představu, kterou se snažím naplnit. Výpis z db, třídění, hodnocení atd. V první fázi je pro mě důležité, že to funguje a teprve potom můžu ladit další věci (fígle).

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: