Перейти к содержимому


Как сделать проверку валидности e-mail во внешней форме


Сообщений в теме: 23

#1 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 31 Июль 2014 - 22:18

Что необходимо добавить в ява скрипт, который выдает КБ в настройках формы.

Сейчас так:

<script>

var k_form_rand_10=Math.random()+"_"+(new Date()).getTime(); // Уникальный id формы, используется в файлах и для получения ответа анкеты
var k_upload_in_progress=0;
var k_answer_hide_form10=1;
var k_was_submited10=0;
var k_10_curr_hash = '';

function k_save_qst10()
{
k_answer_hide_form10=1;
var page_charset=window.document.charset;
if (!page_charset) page_charset=window.document.characterSet;

if (typeof(custom_save_qst10) == 'function') {
if (!custom_save_qst10()) return ;
}
if (k_was_submited10) return;
k_was_submited10=1;
document.getElementById('k_savebutton10').disabled=true;

var qst_form=document.createElement("form");
qst_form.setAttribute('enctype', 'multipart/form-data');
qst_form.setAttribute('action', 'http://kamin2.clientbase.ru/questionare.php?page_charset='+page_charset+'&ts'+new Date().getTime());
qst_form.setAttribute('target', 'k_frame_upload_10');
qst_form.setAttribute('method', 'post');
document.body.appendChild(qst_form);
var qst_input;
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1690');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1690').value;
if (!qst_input.value) {alert('Введите пожалуйста свое имя.."'); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1700');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1700').value;
if (!qst_input.value) {alert('Введите пожалуйста свой телефон. '); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1710');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1710').value;
if (!qst_input.value) {alert('Введите пожалуйста свой e-mail. "'); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
;
if(k_10_curr_hash != '') {
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','hash');qst_form.appendChild(qst_input);
qst_input.value=k_10_curr_hash;
} else {
if(document.location.href.split('hash=')[1]) {
if(document.location.href.split('hash=')[1].split('.').length>1) {
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','hash');qst_form.appendChild(qst_input);
qst_input.value=document.location.href.split('hash=')[1].split('.')[0];
}
}
}

qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_rand_10');qst_form.appendChild(qst_input);
qst_input.value=k_form_rand_10;
qst_form.submit();
document.body.removeChild(qst_form);
};
function k_save_resp10(event)
{
if (document.getElementById('k_frame_upload_10').src=='') return ; // Выходим если загрузки не было

var page_charset=window.document.charset;
if (!page_charset) page_charset=window.document.characterSet;
if (k_upload_in_progress)
{ // Загрузка файлов
var obj=event.target; if (!obj) obj=event.srcElement;
// Убираем значек загрузки
$(".k_upload_progress").removeClass('k_upload_progress_img');
// Необходима проверка - загружен ли файл
for (var i = 0; i < k_upload_files_list.length; i++)
{
var f_name=k_upload_files_list[i].name;
var f_obj =k_upload_files_list[i].obj;
var rnd_sess=Math.floor(Math.random()*10000);
var ss = document.createElement('script');
ss.src="http://kamin2.clientbase.ru/questionare.php?sel=test_upload&qst_id=10&k_rand="+k_form_rand_10+"&k_resp="+rnd_sess+"&f_name="+f_name+"&page_charset="+page_charset;
ss.setAttribute('i_pos',i);
ss.setAttribute('rnd_sess',rnd_sess);
var done = false;
ss.onload=ss.onreadystatechange=function(){
if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") )
{
done = true;
var i=this.getAttribute("i_pos");
var rnd_sess=this.getAttribute("rnd_sess");
var f_name=k_upload_files_list[i].name;
var f_obj =k_upload_files_list[i].obj
var field_id =k_upload_files_list[i].field_id;
eval("var data=k_resp"+rnd_sess+";");
if (data.indexOf(' uploaded.')!=-1)
{
var size = parseInt(data)+"";
size=size.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
// Отображем размер
f_obj.find(".k_upload_progress").html(" - "+size+" B");
}
else
{
f_obj.find(".k_upload_progress").html(" - Провалено");
}
document.getElementById('k_sbmt_file_'+'10'+'_'+field_id).setAttribute('was_upload',1);

ss.onload = ss.onreadystatechange = null;
document.body.removeChild(ss);
}
}
document.body.appendChild(ss);
}
k_upload_in_progress=0;
return ;
}
if (document.getElementById('k_frame_upload_10').getAttribute('second_load'))
{
if (!k_was_submited10) return;
k_was_submited10=0;
document.getElementById('k_savebutton10').style.display='none';
document.getElementById('k_savebutton10').disabled=false;
if (typeof(custom_qst_res10) == 'function') {
custom_qst_res10();
}
else
{
// Получаем результат формы
var ss = document.createElement('script');
ss.src="http://kamin2.clientbase.ru/questionare.php?sel=get_answer&qst_id=10&k_rand="+k_form_rand_10;
var done = false;
ss.onload=ss.onreadystatechange=function(){
if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") )
{
done = true;
eval("var data=k_answer"+10+";delete k_answer"+10+";");
if (data.done !== undefined)
{
if (data.done != ' ')
$('#k_qst_res_10').append(data.done);
document.getElementById('k_savebutton10').style.display='';
}
else if(data.error !== undefined)
{
$('#k_qst_err_res_10').html('');
if (data.error != ' ')
$('#k_qst_err_res_10').append(data.error);
data = false;
k_answer_hide_form10 = 0;
document.getElementById('k_savebutton10').style.display = '';
}
else
{
document.getElementById('k_qst_res_10')
}
if (k_answer_hide_form10)
{
document.getElementById('k_qst_10').style.display='none';
location.href ='thanks-page.php';
}

ss.onload = ss.onreadystatechange = null;
document.body.removeChild(ss);
}
}
document.body.appendChild(ss);
}
document.getElementById('k_frame_upload_10').src=""; // Четвертый уровень защиты от повторной загрузки
}
else
document.getElementById('k_frame_upload_10').setAttribute('second_load',1);
}
$(function(){
if(document.getElementById('k_frame_upload_10').onload == null) {
$('#k_frame_upload_10').on('load', function(event) { k_save_resp10(event); });
}
});
</script>

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 08:37

Цитата

Что необходимо добавить в ява скрипт, который выдает КБ в настройках формы

Не понял вопроса. Вы что хотите то конкретно?

#3 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 14:38

Нужно, чтобы поле внешней формы e-mail имело проверку по типу как в php.

Что-то наподобе:

<?php
function is_email($email) {
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
return false;
} else {
return true;}
}
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail";
?>
Пытался подключить, но не вышло. Знаний в программировании нет, изучаю только неделю.

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 14:50

Если вы не знаете яваскрипт, то лучше и не пытаться, т.к. можете только сломать форму. Я сам то не могу сразу сообразить где и куда что помещать. Проверяйте через php, как в примере. Разумеется с учетом документации по вычислениям для внешних форм.

Хотя по идее без знаний в программировании вообще не рекомендуется вычисления писать. Будете как начинающий сапер на минном поле.

#5 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 16:38

Вот тыркался в скрипте, так и не получилось. А пшп как подключить? но самое главное как на него ссылку задать? в поле $email прописывает то что у нас в поле id. Верно? Где input type=text id=example. Делал так, результата ноль

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 16:43

Цитата

но самое главное как на него ссылку задать?

Какую еще ссылку? Почитайте документацию, там все описано.

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 16:48

Там кстати есть и описание как javascript вставить, т.е. править код самой формы, как вы выше предлагали, никакой нужды нет. И даже готовый пример есть для валидации e-mai.

#8 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 17:05

Спасибо, сейчас пытаюсь сделать с помощью масок которые КБ предлагает, в таблице заявки>e-mail вставил нужный шаблон [а-я,a-z,0-9]1-10[@]1[а-я,a-z,0-9]1-10[.]1C2-3 а код яваскрипта даже не поменялся в форме. Это ошибка или я что то не так делаю?

Сообщение отредактировал yKa3: 01 Август 2014 - 17:06


#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 17:07

Не факт что маски вообще работают во внешних формах. Делайте валидацию лучше, уже есть пример готовый ведь.

#10 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 17:11

Тогда зачем были добавлены на сайте КБ? Они по сути только для внешних форм и необходимо. Пробую через вычисления.

#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 17:18

Просмотр сообщенияyKa3 (01 Август 2014 - 17:11) писал:

Тогда зачем были добавлены на сайте КБ?

В первую очередь для таблиц, и там они точно работают. Просто не уверен, что добавляли и во внешние формы, может да, а может и нет, проверять надо. Хотя, если не работают, это не значит что так и должно быть, можно отправить заявку в техподдержку с просьбой исправить этот момент.

#12 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 17:20

Добавил скрипт вычислений. Работает, НО. Он теперь перекрывает проверку остальных полей на заполнение. Т.е. у меня первое поле имя, второе поле телефон, третье почта. Раньше если клиент не заполнил первое поле, ему сразу алерт вылазил, чтобы он заполнил. А теперь сразу вылазит неккоректный e-mail. Вообще не дело.

Вставил скрипт сразу после проверки на заполнение полей в скрипте.

Сообщение отредактировал yKa3: 01 Август 2014 - 17:21


#13 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 17:24

Вставил скрипт в отельные теги <script></script> после основного скрипта. Ситуация та же.

#14 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 01 Август 2014 - 17:38

Та же ситуация если даже включать скрипт вычисления через настройки КБ в настройках формы. Ошибка или я снова что-то не так делаю?

#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Август 2014 - 14:07

Цитата

Вставил скрипт в отельные теги <script></script> после основного скрипта

После какого "основного скрипта"? Вы куда вообще код js вставляли, в поле JavaScript вкладки Вычисления, или нет?

#16 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 03 Август 2014 - 14:31

Вставлял вручную с помощью NotePad++ , основной скрипт это скрипт в первом посте. И вставлял в поле Java Script вкладки Вычисления. Результат один и тот же. Сразу пишет "Некорректный e-mail" минуя проверку заполнения других полей.

#17 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Август 2014 - 14:36

А причем тут проверка заполнения? Какая взаимосвязь?

#18 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 03 Август 2014 - 14:57

Объясню еще раз. У меня в форме три поля. Первое имя. Второе телефон. Третье почта. Так вот без это скрипта идет проверка полей на заполнение. Т.к. если человек нажимает отправить и ничего не вводит, то ему показывается алерт Введите свое имя. Если он ввел Имя а другх два поля оставил, ему вылетает алерт введите телефон. Если он два поля заполнил, а третье оставил ему вылетает алерт введите почту. И так и должно все работать. Тут претензий нет. Но как только я подключаю вычисления по полю почта, то проверка заполнения полей отключается и если человек вообще ничего не ввел в три поля ему вылетает алерт Неккоретный e-mail. Чего само собой быть не должно. Должна работать сначала проверка заполнения полей и когда заполнено уже первых два поля, включаться вычисление на проверку валидности почты.

А такого не происходит не при самостоятельном добавлении вычислений в скрипт, ни при добавлении через Поле Яваскрипт в вычислениях.

#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Август 2014 - 15:36

Эта "проверка на заполнение" откуда берется? Вы ее сами добавляли (например, через js в поле), или она уже была в таблице?

#20 yKa3

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 03 Август 2014 - 15:47

Была в таблице уже. Выставил в настройках КБ обязательные поля и добавился в скрипт код:

var qst_input;
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1690');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1690').value;
if (!qst_input.value) {alert('Введите пожалуйста свое имя.."'); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1700');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1700').value;
if (!qst_input.value) {alert('Введите пожалуйста свой телефон. '); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','k_input_field_10_1710');qst_form.appendChild(qst_input);
qst_input.value=document.getElementById('k_input_field_10_1710').value;
if (!qst_input.value) {alert('Введите пожалуйста свой e-mail. "'); document.getElementById('k_savebutton10').disabled=''; k_was_submited10=0; return;}
;
if(k_10_curr_hash != '') {
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','hash');qst_form.appendChild(qst_input);
qst_input.value=k_10_curr_hash;
} else {
if(document.location.href.split('hash=')[1]) {
if(document.location.href.split('hash=')[1].split('.').length>1) {
qst_input=document.createElement('input');qst_input.setAttribute('type','hidden');qst_input.setAttribute('name','hash');qst_form.appendChild(qst_input);
qst_input.value=document.location.href.split('hash=')[1].split('.')[0];
}
}
}

Вот этот код перестает работать при добавлении вычислений

Сообщение отредактировал yKa3: 03 Август 2014 - 15:48






Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных