За последние 24 часа нас посетил 15501 программист и 1609 роботов. Сейчас ищут 907 программистов ...

JS - проверка данных формы и отправка

Тема в разделе "PHP для новичков", создана пользователем VLK, 9 май 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    JS не знаю, по этому методом тыка, благо начальное знание PHP, C# и C++ помогают, вот такое соорудил:

    есть JS скрипт
    Код (Text):
    1. <script>
    2. function check() {
    3.  
    4. var field = document.getElementById('test_field');
    5. var span = document.getElementById('test_span');
    6.  
    7. if (field.value.length < 5) {
    8. span.innerHTML = 'Длина текста меньше 5 символов';
    9. }
    10. else if (field.value.length > 10) {
    11. span.innerHTML = 'Длина текста больше 10 символов';
    12. }
    13. else {
    14. var submit_button = document.getElementById('submit_button');
    15. submit_button.removeAttribute('disabled');
    16. span.innerHTML = 'Все ОК, можно отправлять';
    17. }
    18.  
    19. }
    20. </script>
    и форма
    Код (Text):
    1. <form method="post" >
    2.  
    3. <textarea name="test_field" id="test_field"> </textarea>
    4. <br><span name="test_span" id="test_span"></span><br><br>
    5.  
    6. <input type="button" name="check_button" id="check_button" onclick="check()" value="Проверить" />
    7. <input type="submit" name="submit_button" id="submit_button" value="Отправить" disabled />
    8.  
    9. </form>
    В форме 2 кнопки, одна проверить введенные данные, вторая отправить их, изначально отправка заблокирована, если данные успешно прошли проверку кнопка разблокируется и можно отправлять, вопрос как эти 2 кнопки превратить в одну, что при нажатии осуществлялась проверка, если все ок, отправлялось (само, без повторного нажатия, так же как и при обыкновенном нажатии кнопки), а если нет не отправлялось, а выводило ошибки.
    action в форме на ту же страницу.

    Напишите пожалуйста.
     
  2. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Повесь на поле test_field onkeypress="check();", а на кнопку submit_button - onclick="submit();"
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (Text):
    1. <form id="myform">
    Код (Text):
    1. document.getElementById('myform').submit();
    Можно также сделать выполнение функции check(), которая разблокирует кнопку submit - при нажатии кнопок в textarea. Тогда вторая кнопка будет не нужна

    Код (Text):
    1. <textarea name="test_field" id="test_field" onkeyup="check();"> </textarea>
    Добавлено спустя 1 минуту 12 секунд:
    Об одном и том же :)
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Спасибо, из ваших ответов я скомпоновал решение, оно не совсем такое как вы пишите, в частности, за счет:
    будет проверяться поле (поля) и в зависимости от заполнения кнопка будет активироваться / блокироваться, единственный недостаток, я не смогу очищать поля от HTML тегов.

    наверное тут ошибка, т.к. кнопка submit_button имеет тип submit ( type="submit" ) по-этому как не крути а отправка и так происходит.
    Можно в принципе поменять тип с submit на button, тогда все великолепно, но тогда в POST не попадает сама кнопка (submit_button), а заполнение формы как раз проверяется "по нажатию кнопки", с другой стороны выходом будет добавить скрытое поле и по нему уже судить "нажата кнопка или нет".

    Вообщем есть над чем поразмыслить, возможно все переделаю так, еще раз спасибо за информацию.


    А можно пользуясь случаем такой вопрос задать, регулярные выражения в PHP и JS одинаковые?
     
  5. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну да)

    Добавлено спустя 10 минут 42 секунды:
    Но я бы не советовал что-то резать из передаваемых данных)
     
  6. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    почему нет? допустим есть ряд условий для данных, не больше не меньше и без HTML тегов, допустим пользователь вставил текст с HTML тегами и по длине они подходят, а если удалить, уже слишком короткое сообщение, надо бы его об этом уведомить, ни так ли?
    или как быть в подобной ситуации?
     
  7. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну ок, а если пользователь захочет вставить тег?

    Добавлено спустя 4 минуты 14 секунд:
    не больше я еще понимаю... не меньше - уже не совсем понимаю... html - тоже часть сообщения.
    Вот смотри:
    - Петя, какой тег отвечает за перенос строк?
    - <br />
    Почему сообщение не может иметь такой вид?
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    еще как в книге для новичков писали что надо бояться HTML тегов, которые могут вставить посторонние лица, т.к. он может быть вредоносным, по этому и очищаем от тегов
     
  9. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Бояться, наверное, стоит, если эти теги не преобразовать в html сущности. Чтобы преобразовать строку в html-сущности воспользуйся функциями htmlspecialchars или htmlentities.

    Добавлено спустя 3 минуты 3 секунды:
    Но это уже при выводе данных...
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну при выводе, т.е. PHP тоже будет проверять все данные, на современных пользователей совсем нельзя положиться :)
     
  11. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Я к тому, что сообщения пользователя лучше хранить в базе в том виде, в каком он его написал. Можно, конечно, ограничить по кол-ву символов. Чтобы избежать XSS уязвимостей можно использовать функции, которые я написал выше. Проверять пыха на выводе информации ничего не будет, просто преобразуешь сообщение пользователя таким образом, чтобы специальные символы стали html сущностями и все - межсайтового скриптинга нет.
     
  12. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    1. Есть поле которое не должно содержать HTML теги, зачем мне тогда хранить в БД данные с HTML? по меньшей мере это не разумно, т.к. это будет занимать больше места.

    2. введенные данные должно соответствовать требованиям, в них не должно быть HTML тегов и длина не больше и не меньше, может с HTML оно будет соответствовать длине, а вот без них нет, для этого надо еще у пользователя очистить текст от HTML и сообщить ему о том что маловато символов, или зачем тогда проверять у пользователя, можно и все это сделать на стороне сервера при помощи PHP (хотя на стороне сервера оно и так тоже будет фильтроваться).
     
  13. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну продолжай, а то лезут тут всякие с советами дурацкими))
     
  14. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Ну просто я не совсем понимаю почему нельзя очищать при помощи JS еще у пользователя, кроме того "да пускай будет как хочет пользователь", какие опасности могут быть от этого?