Autor Zpráva
Uraku98
Profil *
Zdravim,

potrebujem poradit ohladom hlasovania v anketach.

Mam anketu a moznosti su cez normalne linky, teda v tvare linku odkazujuce na
napr. ankety.php?idanketa=5. Ale je ten problem, ze takto mi aj hlasuju roboti a
podobne, teda by sa to malo dat cez JS osetrit.

Teoreticky by mohlo byt hlasovanie cez FORM, ale to tak nechcem.

<a href="javascript:;" onclick="hlasuj(idanketa);>Odpoved</a>


Ten tvar by zrejme mal takto priblizne vyzerat, len neviem vobec co mam urobit
dalej.

Poradite?

Dakujem.

P.S. Ak sa to viac hodi do kategorie JS, tak to prosim prehodte, ale tu je to myslim lepsie.
Jack Finger
Profil
Uraku98
<script type="text/javascript">
function hlasuj(anketa_id){
  window.location.href = 'ankety.php?idanketa=' + anketa_id;
}
</script>

?
Uraku98
Profil *
Fajn, toto ma tiez teoreticky napadlo, ale pouzivatel toto moze vycitat z kodu, a nasledne uz hlasujucu adresu zadat do proxy serverov a tie uz budu hlasovat, teda sa zabrana prelomila :(

Nemate napad este, ako to ofintit?
Jack Finger
Profil
Uraku98
leda přes AJAX.
Uraku98
Profil *
fiiha, a neporadili by ste mi, ze ako?
Prosiiiim, prosiiiim....
Jack Finger
Profil
Uraku98
funkce hlasuj() v javascriptu pošle přes AJAX příslušné parametry (např. číslo ankety a číslo hlasu) zpracujícímu PHP skriptu, který vše zapíše do databáze a vrátí true nebo false.
Uraku98
Profil *
Jack Finger
wow, dik. Znie to pekne, len v mojom pripade je to neuskutocnitelne...

je to nadlho? Nepomohol by si mi len s takou kostrou, to spracovanie PHP uz vsetko mam, len ten zaciatok toho ajaxu by mi velmi pomohol.

Prosiiim.
Jack Finger
Profil
já to teda dělám přes JS knihovnu jQuery (normálně to chápu, ale nepamatuju si), tam je to na pár řádků:
<script type="text/javascript">
  function hlasuj(anketa_id, vote_id){
    $.ajax({
      type: "GET",
      url: "hlasuj.php?anketa_id=" + anketa_id + "&vote_id=" + vote_id,
      success: function(){
        // div s anketou
        $("#anketa").empty();
        $("#anketa").append('Hlas byl započítán!');
      }
    });
  }
</script>

musíš si k tomu ale z jquery.com stáhnout knihovnu JS a vkládat pomocí HTML do skriptu (nebo vkládat z jquery.com latest version) :o) snad je to správně.
Uraku98
Profil *
Dakujem, ale mam otazky:

1.) akoze budem mat moznost odpovede v tvare:
<a href="javascript:;" onclick="hlasuj(1,8);>Odpoved</a> 
a nasledne by to malo zaratat?

2.) Nechapem
$("#anketa").empty();
        $("#anketa").append('Hlas byl započítán!');
co to robi a kde sa vypise to hlas byl zapocitan?

3.) ktore presne .js si mam stiahnut z jquery.com?


Dakujem moooc krat, velmi si to cenim.
Jack Finger
Profil
Uraku98
ad 1) nepochopil jsem otazku :oP
ad 2) anketa by musela být v <div id="anketa">anketa</div>, potom první funkce vyprázdní celej DIV (od hlasovacích odkazů a spol.) a druhej tam přidá text 'Hlas...'. samozřejmě to tam nemusí být, to je jen zkopírovaný a upravený z mých skriptů, můžeš tam mít třeba alert('Započítáno!') :o)
ad 3) toto ;o)
Uraku98
Profil *
Jack Finger
Wow, super, funguje!

Ale, vyskusal som to spravit potom priamo cez prehliadac (napr. hodil by som to cez proxy servere) a zadal domena.com/hlasuj.php?anketa_id=2&vote_id=25 a ono to zahlasovalo!!! Preco? Ved to tak nechceme a chceli sme sa toho vyvarovat.

V com je problem?
Jack Finger
Profil
Uraku98
no to už je práce v PHP ne? teda jestli chápu správně...
Uraku98
Profil *
Jack Finger
No zrejme sa nechapeme...
Ako, ono to pekne vsetko zahlasuje, ale mne ide o to, aby hlasovanie islo iba v pripade, ked sa na to klikne medzi tymi moznostami, ale teraz staci z kodu vycitat domena.com/hlasuj.php?anketa_id=2&vote_id=25 a hlasovat moze jeden clovek vdaka proxy aj milion krat a to nechceme...

Ved, to nie je vec PHP... dufam, ze ma uz chapes...

Poradis?
Jack Finger
Profil
Uraku98
jde ti o to, aby se nehlasovalo vícekrát? můžeš kontrolovat IP adresu a ještě kontrolovat, jestli vote_id je existující hlas, ale jinou obranu neznám, kdo bude chtít, může si při pasivním připojení měnit IP. a generovanej kód prostě neschováš, je jedno jestli je v podobě hlasuj() nebo je až v 30 includovanejch souborech, ale pořád tam je a dá se najít a jinak se to udělat nedá, protože jinak od uživatele data dojít nemůžou. jediná možnost je kontrola na straně PHP (IP a pod.)
Uraku98
Profil *
Jack Finger
kontrolu mam samorejme cez IP, ale existuju take servere, kde ked zadas url tak sa na nu pripoji z roznych pocitatoc s inymi IP, takze mozu hlasovat kolkrat chcu a teda lubovolny clovek dokaze dosiahnut pre nejaku moznost lubovolny pocet odpovedi, neda sa to nejako osetrit?

A co znamena "ještě kontrolovat, jestli vote_id je existující hlas"? Ako to tam dorobim?

Dik
Jack Finger
Profil
Uraku98
tomu nezabráníš, nedá se to nijak schovat, aby to člověk-"spammer" nenašel.

třeba máme 3 odpovědi: Ano, Nevím, Ne. Ano má číslo 1, Nevím je 2 a Ne je 3. Potom zpracujícímu skriptu posíláš vote_id (číslo hlasu), nebo aspoň se to tak většinou dělá, jak to děláš ty, to nevím. no a pak zkontrolovat jestli vote_id patří do existujících hlasů nebo ne (aby někdo nehlasoval třeba pro 8, což neexistuje)
Uraku98
Profil *
Jack Finger
To je, ale vec PHP a to samorejme mam vsetko osetrene.

Ale pozri si stranku http://vybrali.sme.sk/ a tam su hlasovania clankov, je tam IP, cookies kontrola a tiez cez AJAX hlasovanie. Ale ked z kodu vycitam tu hlasovaciu url a hlasujem cez prehliadac, tak to nejde, teda to musia mat nejako osetrene.

Oni tam este davaju nejaku md5, mozno to je nejaka finta.

Ako to ty vidis?

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: