Обязательная строка

Тема в разделе "JavaScript", создана пользователем AGENT131313, 24 ноя 2012.

Модераторы: ZiX
  1. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    Необходимо добавить обезательное поле в форму, тоесть чтобы просто проверяло ответ в ней.
    Капчу немогу поставить т.к. не двиг а обічная html страница.
    Суть вопроса, почему неработает? чего не хватает?
    <script type="text/javascript">
    function validateForm()
    {
    var x=document.forms["myForm"]["fname"].value;
    if (x==null || x=="16")
    {
    alert("Необходимо ответить на вопрос!");
    return false;
    }
    }
    </script>
    <form action="sendmes.php" name="myForm" method="post" id="form" onsubmit="return validateForm()">
    <input type="text" name="send_name" class="sendname">
    <input type="text" name="send_email" class="sendname">
    9+7=? <input type="text" name="fname" class="sendname">
    <textarea onkeyup="textCounter(this,'text-counter',350)" class="sendmes" name="send_mes"></textarea>
    <input type="SUBMIT" VALUE="Отправить заказ" class="sendbut" VALUE="SUBMIT"></form>
     
  2. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21

    так вроде работает)
     
    AGENT131313 нравится это.
  3. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    Да работает, но и боты дальше пишут..

    Как по другому от них защитица?
     
  4. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    Вопрос сложней сделай, может поможет. Сложение для них не проблема видимо. Что-нибудь из такого бреда: "Сколько лап у кошки", "С какой планеты ты пишешь" :)
     
  5. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    456
    Боты отправляют POST запросы, им на ваши скрипты ...
    Проверку правильности ввода полей нужно еще и делать на стороне обработки формы после отправки, а не только на стороне клиента.
     
  6. Delfi

    Delfi Создатель

    Регистр.:
    16 июн 2011
    Сообщения:
    45
    Симпатии:
    11
    Неплохой способ озвучивали, чтобы избежать капчу.
    Делаем два скрытых поля в форме, называем их, например captcha и key. В одном передаем параметр, который можем вычислить на сервере. А во второй - ничего.

    На сервере проверяем переданный параметр captcha и наличие key, и чтобы оно было пустое.

    Фишка в чем - боты чаще автоматические находят куда слать запрос. Видя поля captcha и key - они будут пытаться забить в них данные. Если это человек, то в key он ничего не запишет, даже не будет знать о существовании. А вот боты в 90% случаев будут заполнять это поле, либо вообще не передавать пустое значение.

    Знаю, что так устроен один из плагинов в WordPress, ставил себе - боты стали заметно реже заваливать спамом.

    Если не понятна суть - могу накидать небольшой пример кода.

    И правильно описали выше - боты вообще игнорирует js. Он идет больше для удобства настоящего пользователя.
     
  7. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    Выложи примерный код, пример пожалуйста
     
  8. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    В файле "sendmes.php", добавь



    По простому как-то так, это конечно не то что предложил Delfi, но уже будет проверятся переменная.
     
    AGENT131313 нравится это.
  9. Delfi

    Delfi Создатель

    Регистр.:
    16 июн 2011
    Сообщения:
    45
    Симпатии:
    11
    Выше пример схож.

    PHP:
    if ((isset($_POST["key"]) && $_POST["key"] == "") && (isset($_GET["captcha"]) && $_GET["captcha"] == check_code())) {
    // Отправляем почту или что-то еще.
    }
    При ошибке лучше ничего не выводить, т.к. скорее всего бот может парсить ответ и увидев ошибку - будет искать другой подход

    Как вариант - сделать только ajax отправку. Процент пользователей с выключенным js очень мал. А на сервере можно проверять - идет ajax запрос или нет. Если нет, то тоже ничего не проводить.

    check_code() - это функция, которая генерирует данные для проверки.
    Можно, скажем, взять ip адрес пользователя и id его сессии, а затем взять от этого md5 хэш. Т.е. при выводе формы этот хэш записывать в captcha и проверять это значение на сервере. Получается недокапча, но в таком случае мы не напрягаем пользователя с ее вводом.
     
    AGENT131313 нравится это.