js проверки на полета

gearfight

Registered
Ако имам следното инпут поле:
Код:
<input type="text" name="kod" />
И през него минават различни кодове (captcha с картинка)
Как да проверя с js дали стойността от captcha-та съответства ?

В момента използвам това за да проверя дали полето е попълнено:

Код:
<script type="text/javascript" language="javascript"> 
function formValidate(form) { 
if (form.kod.value == "") 
{ 
alert('Моля въведете антибот въпроса!'); 
form.kod.focus(); 
return false; 
} 
return true; 
}
</script>

Та мисълта ми е, че е желателно да е в попъп, защото иначе контакната форма ще се изпрати, трябва да става в същата страница.
Ще съм много благодарен на човека който вкара някаква проверка в js-то за captcha-та.

Давам пример как се проверяваше с PHP:
Код:
if(isset($_POST['submit']))
{
    $kod = htmlspecialchars($_POST['kod']);
    if($kod != $_COOKIE['imgcodepage'])
    {
        $errMsg = "<img src='chat/ban.png' alt='wrong code' /> Не сте въвели правилно кода!<br>";
        if(!empty($errMsg))
        {
            echo $errMsg;
        }
    }
}

Ако това евентуално не може да стане с js, как да стане с PHP и по-начина по-който аз искам с popup ?
 
Не би трябвало да имаш JS проверка за валидността на CAPTCHA-та, иначе много лесно може да се напише бот, който минава през тази защита. Това е работа на сървъра. Дори решение, базирано на Ajax също не е добра идея.

Винаги трябва да правиш валидиране на данните (и) от страна на сървъра. Валидирането с JS е хубава глезотия, но единствено валидирането и филтрирането на данните от страна на сървъра, ти дава необходимата сигурност.

Добавено:
А пък този РНР код дето си пуснал за валидиране на капчата, като запазваш кода в cookie все едно нямаш captcha! Запазвайки кода в cookie, ти реално го изпращаш на потребителя. С други думи ако напиша един РНР скрипт който да зарежда твоята страница, веднага ще получа стойността от кукито, ще мога автоматично да попълня формуляра и да се логна. Тая "защита" с кода в куки, може да изпоти нормалния потребител, дето се опитва да се логне като човек, но не и за РНР код който е писан за да преодолее проверката.
 
Да, вероятно е така, но все пак надали някой ще тръгне да пише ботове точно пък за моята контактна форма.
Ако има някакъв начин ще се радвам да го споделите, защото с PHP ако е, трябва отново да има някакъв ajax защото всичко трябва да става в индекса (всички проверки), иначе при събмит се препраща на друга страница и... става мазало.
 
Искам да ти дам една идея - може да проверяваш дали в полето за капча са въведени необходимия брой символи 3, 4, 5 или колкото искаш, БЕЗ да се прави проверка за тяхната валидност. Това е един вид подсещане.

Иначе да проверяваш капча по този начин според мен е безмислено.
 
Да, вероятно е така, но все пак надали някой ще тръгне да пише ботове точно пък за моята контактна форма.
Това означава, че не ти трябва captcha. Тя се поставя не за да затрудниш реалния потребител, а автоматизирания достъп. Ако не очакваш такъв, не използвай captcha, защото това само ще се отрази негативно на потребителите - да ти намразят сайта.

Ако стойността на captcha-та се пази в сесия, правиш ajax заявка за да получиш кода и го сравняваш с въведения.

[js]$.get('captcha_code.php', function(data){
if(data != form.kod.value){
alert("Грешен код!");
return false;
}
return true;
});[/js]

captcha_code.php
PHP:
<?php
session_start();
echo $_SESSION['captcha_secret_code'];

Но сериозно - не го прави. Това, че има начин, не означава, че трябва да го използваш. Реално сам си правиш пробив в защитата. Има един термин "user experience" който трудно се превежда на български език, но се отнася до това до колко потребителите са доволни от твоя сайт като цяло. CAPTCHA-та определено е нещо, което се мрази най-искренно и лично. Ако смяташ, че сайта ти няма да е подложен на опити за автоматизиран достъп, не го прави. Иначе - трябва ти сериозно решение, а не като това по-горе. Да слагаш captcha само за да покажеш пред потребителите колко сме велики, няма смисъл :) С най-добри пожелания, все пак, да не се изтълкува негативно!

Забравих:
Този код по-горе, за мое удобство, ползва jQuery. Ако в твоя сайт не използваш jQuery, няма смисъл да вкарваш излишен код, Ajax request може да се направи и без jQuery буквално с няколко реда код. Ще намериш много примери в нета.
 
Мен ако ме питаш сложи едно ограничение за въвеждане да кажем веднъш на 20 секунди да може да се пуска пост през формата . Не е нужно да дразниш абонатите си ако до сега не са те нападали със спам . Принципно ако те захванат е хубаво до имаш готов интегриран код и после само да качиш страницата и ще секне , но до тогава можеш спокойно просто да сложиш един ограничител от към време . Имай в предвид , че един нормален рефреш на браузера е около 2- 3 секунди като сложиш ограничение да кажем 10 секунзи един НЕ добре измислен бот ще овяхне .
 

Back
Горе