Ale zpátky k tomu omezení. Číselný kód je blbost - i lidé ze zahraničí umí číst, tohle by tak akorát zastavilo nějaké zbloudilé spamovací roboty, kteří by omylem kliknuli na "Stahuj". Chtělo to něco, co budou vědět jen Češi. A pak mě to napadlo. Před tím, než budete stahovat jakýkoli soubor, budete muset odpovědět na nějakou totálně primitivní otázku. Prozatím jsem tam umístil otázky na barvy aut. Jak jinak než přimitivní - na dotaz Jakou barvu má zelené auto? ví odpověď jen Čech (nebo Slovák). Zahraniční návštěvník si sice otázku může přeložit ve slovníku, ale pak už nedokáže dát odpověď do správného pádu - zelenou (ukázka). Pro české návštěvníky ze zahraničí, kteří nemají k dispozici českou klávesnici s diakritikou, je řešení jednoduché - musí tak dlouho obnovovat stránku, dokud se neobjeví otázka, na jejíž odpověď není potřeba diakritika.
A jak je to vůbec řešené?
V databázi mám uložené id otázky, otázku a odpověď, struktura tabulky vypadá takto:
CREATE TABLE `upload_otazky` (
`id` int(11) NOT NULL auto_increment,
`otazka` varchar(100) NOT NULL default '',
`odpoved` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `otazka` (`otazka`)
) ENGINE=MyISAM ;U formuláře k stahování souboru stačí náhodně vybrat id a otázku -
SELECT id,otazka FROM upload_otazky ORDER BY RAND() LIMIT 1 a dále vložit skrytý input, který bude obsahovat id aktuální otázky. Po odeslání (= kliknutí na "Stahuj") vyberu z databáze odpověď, která je u příslušného id (odesláného tím skrytým inputem) a porovnám ji s odeslanou odpovědí :). Pokud je vše v pořádku, pošlu soubor, v opačném případě přesměruji zpět :).Tak uvidíme, jak se to osvědčí. Samozřejmě se to dá použít, jak název článku napovídá, i proti spam robotům - ti nemají ani nejmenší ponětí, jaká je správná odpověď.