Проверка полей при оформлении заказа.

#
Re: Проверка полей при оформлении заказа.
phantik, У меня правки меньше в 2 раза. Но тоже не работает правильная проверка мыла. Если вставляю выражение в форму check_pattern="^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$" XML Начинает ругаться не цензурной бранью.
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
#
Re: Проверка полей при оформлении заказа.
у меня работает, только для запроса количества товара нужно сделать SQL запрос, а проверку мыла я пока не делал
#
Re: Проверка полей при оформлении заказа.
Вот пока что сделал так, но тут проверка на заполненность, например если стоит максимальное кол-во знаков 350, мы не вводим не одного символа, кнопка "Отправить" не загорается, как только мы вводим хотя бы один символа она становится активной. Как сделать чтобы некоторые поля можно было оставлять пустыми и ограничение вводилось только по количеству знаков?

<script language="JavaScript">
<!--// Проверка введенного имени и сообщения и "включение" кнопки submit-->
function checkreq()
{
   path = document.myform;
   tmp = (path.advertisement_title.value == "");
   if (!tmp && (path.advertisement_title.value.length < 10)) tmp = true;
   path.add_advertisement.disabled = tmp;
   if (tmp) return;
   tmp = (path.advertisement_title.value == "");
   if (!tmp && (path.advertisement_title.value.length > 120)) tmp = true;
   path.add_advertisement.disabled = tmp;
   if (tmp) return;
   tmp = (path.advertisement_text.value == "");
   if (!tmp && (path.advertisement_text.value.length > 350)) tmp = true;
   path.add_advertisement.disabled = tmp;
}
<!--// Проверка корректности заполнения полей формы-->
function check()
{
        p_advertisement_title = document.myform.advertisement_title.value.toString();
   if(advertisement_title != "")
   {
      if(p_advertisement_title.length<10 || p_advertisement_title.length>120)
      {
         alert ("Длина заголовка 10-120 символов!");
         document.myform.advertisement_title.focus();
      }
   }
        else
        {
                alert("Необходимо ввести заголовок!");
      document.myform.advertisement_title.focus();
        }
   
        p_advertisement_text = document.myform.advertisement_text.value.toString();
        if (p_advertisement_text.length > 350)
        {
                alert ("Текст объявления (не более 350 символов)!");
           document.myform.advertisement_text.focus();

   }
}
</script>

      <form name="myform" method="POST" action="./" onSubmit="return check();" enctype="multipart/form-data">
<table><tr><td>
      <!-- Проверка юзера -->
      <?
      $SiteUsers = new SiteUsers();
      $current_site_user_id = $SiteUsers->GetCurrentSiteUser();
      if ($current_site_user_id > 0)
      {
          $name = $SiteUsers->GetSiteUser($current_site_user_id);
          $treat = "";
          if ($name['site_users_login'] != '')
          {
              $treat = $name['site_users_login'];
          }
          $text_user_user = "Вы вошли на сайт под логином: $treat";
      }
      else
      {
          $text_user_user = 'Вы не авторизированы на сайте.';
      }
      print_r($text_user_user);
      ?>
     <table style="margin-top: 10px;">
         <tr>
            <td>
            Заголовок<span style="color: #ff0000;">*</span> <i style="color: #888888;">10-120 символов</i><br />
            <input type="text" name="advertisement_title" size="63" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()" value="<?=$advertisement_title;?>" />

<script language=javascript type="text/javascript">
<!--//
document.write("<input type=text name=curtxt size=2 class=forms>");
//-->
</script>
<script language=javascript type="text/javascript">
<!--//
function gettxt()
{
document.myform.curtxt.value=document.myform.advertisement_title.value.length;
setTimeout("gettxt()",300);
}
gettxt();
//-->
</script>
            </td>
         </tr>
         <tr>
            <td>
            Цена (руб.)<br />
            <input type="text" name="advertisement_price" size="70" value="<?=$advertisement_price;?>" />
            </td>
         </tr>
         <tr>
            <td>
            Текст объявления<span style="color: #ff0000;">*</span> <i style="color: #888888;">не более 350 символов</i><br />
            <textarea name="advertisement_text" rows="5" cols="53"  onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"><?=$advertisement_text;?></textarea>
            </td>
         </tr>
        
         <tr>
            <td>
            Фото<br />
            <input type="file" name="advertisement_file" size="59" />
            </td>
         </tr>
        
         <tr>
            <td>
            ФИО<br />
            <input type="text" name="advertisement_fio" size="70" value="<?=$advertisement_fio;?>" />
            </td>
         </tr>
        
         <tr>
            <td>
            Тел.<br />
            <input type="text" name="advertisement_phone" size="70" value="<?=$advertisement_phone;?>" />
            </td>
         </tr>
        
         <tr>
            <td>
            E-mail<br />
            <input type="text" name="advertisement_email" size="70" value="<?=$advertisement_email;?>" />
            </td>
         </tr>
        
<tr><td><input type="submit" name="add_advertisement" value="Отправить" /></td></tr>
</form>
#
Re: Проверка полей при оформлении заказа.
CCron, проверка на заполненность обязательных полей формы с помощью JavaScript-а реализована в XSL-шаблоне "ОтобразитьФорму". Можете взять реализованную там логику за основу.
#
Re: Проверка полей при оформлении заказа.
Но проверки тут нет на количество знаков. Например если форму заполнять не обязательно, а ограничение по количеству знаков есть.
<SCRIPT language="JavaScript">
   function testData5()
   {
      if (document.form5.elements['email'].value == "")
      {
               alert ("\nЗаполните поле \"E-mail\"!\t\n")
               document.form5.elements['email'].focus();
              return false;      
           }
      if (document.form5.elements['fio'].value == "")
      {
               alert ("\nЗаполните поле \"ФИО\"!\t\n")
               document.form5.elements['fio'].focus();
               return false;      
           }}
</SCRIPT>

<form name="form5" action="./" method="post" ENCTYPE="multipart/form-data" id="form5">
   <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="2097152"></INPUT>
      <table border="0" cellpadding="2" cellspacing="0">
      <tr><td>Текст запроса </td><td>

         <textarea onmouseout="this.className=&quot;input&quot;" onmouseover="this.className=&quot;input_blur&quot;;" name="txt" cols="50" rows="10" wrap="off"></textarea>

      </td></tr><tr><td>E-mail<sup><font color="red">*</font></sup> </td><td>

         <input type="text" name="email" value="" size="50" onmouseout="this.className=&quot;input&quot;" onmouseover="this.className=&quot;input_blur&quot;;" />

      </td></tr><tr><td>Телефон </td><td>

         <input type="text" name="phone" value="" size="50" onmouseout="this.className=&quot;input&quot;" onmouseover="this.className=&quot;input_blur&quot;;" />

      </td></tr><tr><td>ФИО<sup><font color="red">*</font></sup> </td><td>

         <input type="text" name="fio" value="" size="50" onmouseout="this.className=&quot;input&quot;" onmouseover="this.className=&quot;input_blur&quot;;" />

      </td></tr><tr><td>Код подтверждения</td><td><div style="float: left">

         <img style="border: 1px solid #000000" src="/captcha.php?get_captcha=11044&amp;height=20" title="Код подтверждения" />

      </div><div style="float: left; margin-left: 5px">

         <input type="text" name="captcha_keystring" /><input type="hidden" name="captcha_key" value="11044" size="5" />

      </div></td></tr><tr><td colspan="2" align="center">
      
      <input onclick="return testData5()" type="submit" class="button3" name="Submit" value="Отправить" />
      </td></tr></table>
</form>


Не сильно силен в JavaScript просветите пожалуйста.
#
Re: Проверка полей при оформлении заказа.
Очень надо, чтобы больше заданного количества знаков, пользователь не мог вводить.

И как подобное реализовать не только в стандартных полях динамической страницы, но и для дополнительных свойств?
#
Re: Проверка полей при оформлении заказа.
да , вот это действительно серьёзная недоработка у системы.
#
Re: Проверка полей при оформлении заказа.
для проверки поля E-mail я решил сделать проще:
                    /* проверка Е-mail */
                    $site_users_email = to_str($_POST['site_users_email']);
                    $email_arr = explode("@" , $site_users_email);
                    if(count ($email_arr) < 2 || count ($email_arr) > 2)
                        {
                            $host_email = 'not_exist';
                        }
                    else{
                            $host_email = $email_arr[1];
                        }

                    if (!getmxrr($host_email, $mxhostsarr))
                    {
                        $error = "На адрес <b style=\"color:#3300FF\">&quot;$site_users_email&quot;</b> отправка почты невозможна! Введите корректный E-mail!";
                        $propertys = array();
                        $propertys = to_str($_REQUEST['shop_coupon_text']);

                        $external_propertys = array();
                        $external_propertys['error'] = $error;
                        $external_propertys['site_users_type'] = to_str($_POST['site_users_type']);
                        $external_propertys['site_users_surname'] = to_str($_POST['site_users_surname']);
                        $external_propertys['site_users_name'] = to_str($_POST['site_users_name']);
                        $external_propertys['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
                        $external_propertys['site_users_company'] = to_str($_POST['site_users_company']);
                        $external_propertys['site_users_email'] = to_str($_POST['site_users_email']);
                        $external_propertys['site_users_phone'] = to_str($_POST['site_users_phone']);
                        $external_propertys['site_users_inn'] = to_str($_POST['site_users_inn']);
                        $external_propertys['site_users_kpp'] = to_str($_POST['site_users_kpp']);
                        $external_propertys['site_users_address'] = to_str($_POST['site_users_address']);
                        $external_propertys['site_users_text'] = to_str($_POST['site_users_text']);
                        
                        $shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']), $propertys, $external_propertys);
                    }else
                    {
                        /* Сохраняем данные о пользователе в сессию */
                        $_SESSION['site_users_type'] = to_str($_POST['site_users_type']);
                        $_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
                        $_SESSION['site_users_surname'] = to_str($_POST['site_users_surname']);
                        $_SESSION['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
                        $_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
                        $_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
                        $_SESSION['site_users_inn'] = to_str($_POST['site_users_inn']);
                        $_SESSION['site_users_kpp'] = to_str($_POST['site_users_kpp']);
                        $_SESSION['site_users_text'] = to_str($_POST['site_users_text']);
                        $_SESSION['site_users_company'] = "Физическое лицо";

                        /* Запоминаем купон */
                        $_SESSION['shop_coupon_text'] = to_str($_POST['shop_coupon_text']);

                        /* Отображаем форму ввода адреса */
                        $shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id);
                    }

С функцией getmxrr() мы получаем список MX серверов на введенный домен из е-mail, т.е. проверяем можно ли отправить на тот сервер письмо или нет.
#
Re: Re: Проверка полей при оформлении заказа.
phantik,
Спасибо, Ваш способ очень хорош и мне помог. Правда, таким образом проверяется на корректность только вторая часть e-mail (после @). А вот такие адреса Ваш способ пропускает: A55n- 5@lnaQrk.EH (пробела в первой части быть не должно).

На форуме попадался другой способ, содержащий примерно такую конструкцию:
Цитата:

if (! preg_match("/^([a-z,0-9,_,.])+\@([a-z,0-9])+(\.([a-z,0-9])+)+$/", $site_users_email_bie))
{   $message = 'Неправильный email!';   }


Он не совсем хорош, потому что "правильные" email адреса часто содержат знаки "-", "+" и т.п. (до "@", и такие адреса определяются им как некорректные.

Нашла другой способ, по-моему, он будет как раз дополнением к функции getmxrr:
Цитата:

$site_users_email_bie = to_str($_POST['site_users_email']);

if (! filter_var($site_users_email_bie, FILTER_VALIDATE_EMAIL))
{   $message = 'Неправильный email!';   }


Он проверяет, чтобы в e-mail не было пробелов и других некорректных символов, но не проверяет, можно ли отправить письмо на email с такого сервера.

Описания с примерами см.
http://www.php.net/manual/en/function.filter-var.php
и
http://docs.php.net/manual/ru/function.preg-match.php
#
Re: Проверка полей при оформлении заказа.
Да, и еще важная вещь:
чтобы использовать функцию filter_var, надо, чтобы PHP был 5.2.0 и выше.
Авторизация