Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Довести до ума форму на Jquery
Форумы портала PHP.SU » Объявления » FreeLance » Довести до ума форму на Jquery

Страниц (1): [1]
 

1. nwnet - 12 Сентября, 2012 - 00:57:51 - перейти к сообщению
Кто-нибудь может взяться довести эту форму до ума за небольшую денежку?

Нужно только:

а) скрипт передавал данные из Формы 2 в кодировке 1251
б) сделать в Форме 1 вывод ошибок типа "введите имя", "введите e-mail", "введите пароль", "в имени должно быть не менее 3-х символов", "неправильно введен код капчи"
в) в Форме 1 капча уже прикручена и по инпуту работает - нужно сделать чтобы и при отправке скриптом тоже проверялась правильность ее ввода

Суть скрипта: данные вводятся только в одну форму, откуда берутся и сабмитятся в обе формы.

Формы обращаются к разным файлам и в разных кодировках (сам сайт в кодировке UTF8).

Сам код:

Форма 1:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <form class="form" method="post">
  2.  
  3.         <label>ФИО полностью</label>
  4.         <input type="text" name="name" id="name" format=".+" notice="Введите имя" value="{$name|escape}" maxlength="255" />
  5.        
  6.         <label>E-mail</label>
  7.         <input type="text" name="email" id="email" format="email" notice="Введите email" value="{$email|escape}" maxlength="255" />
  8.  
  9.     <label>Придумайте пароль</label>
  10.     <input type="password" name="password" id="password" format=".+" notice="Введите пароль" value="" />
  11.  
  12.         <br /><br /><div class="labelreg"><label for="comment_captcha">Введите код :</label></div>
  13.         <div class="captchareg"><img src="captcha/image.php?{math equation='rand(10,10000)'}"/></div>
  14. <input class="input_captchareg" id="comment_captcha" type="text" name="captcha_code" value="" format="\d\d\d\d" notice="Введите капчу"/>
  15.        
  16.  
  17. <label> </label>
  18.         <input style="display:none;" type=submit class="button_reg_submit" id="submit_btn" name="register" value="Зарегистрироваться">
  19.  
  20. <a href="javascript:;" onclick="ajax_send()" style="float:right; font-size: 8px;">Send</a>
  21.  
  22. </form>


Форма 2:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <form id="subscribe" name="subscribe" method="post" action="/smartmail/subscribe.php" accept-charset="windows-1251" target="_top">
  2.  
  3. <input type="hidden" name="id_chanel[]" value="1">
  4.  
  5. <input type="text" name="realName" size="20" value="Ваше имя" onblur="if(this.value=='') this.value='Ваше имя';" onfocus="if(this.value=='Ваше имя') this.value='';">
  6.  
  7. <input type="text" name="emailAdress" size="20" value="E-mail" onblur="if(this.value=='') this.value='E-mail';" onfocus="if(this.value=='E-mail') this.value='';">
  8.  
  9. <input class="subscribe" type="submit" name="submit" value="Подписаться">
  10.  
  11. </form>


Ну и скрипт:

CODE (javascript):
скопировать код в буфер обмена
  1. <script>
  2. function ajax_send()
  3.  
  4. {
  5.   var first_form = $('.form');
  6.  
  7.   name_1 = $('input[name="name"]',first_form).val();
  8.  
  9.   email_1 = $('input[name="email"]',first_form).val();
  10.  
  11.   password_1 = $('input[name="password"]',first_form).val();
  12.  
  13.   confirm_1 = $('input[name="register"]',first_form).val();
  14.  
  15.   dataString_1 = 'name=' + name_1 + '&email=' + email_1 + '&password=' + password_1 + '&register=' + '&register=' + confirm_1;
  16.  
  17.  
  18.   $.ajax({  
  19.  
  20.   type: "POST",  
  21.  
  22.   url: "/user/register",  
  23.  
  24.   data: dataString_1,  
  25.  
  26.   success: function() {  
  27.  
  28.       alert('First form was send');
  29.  
  30.   }  
  31.  
  32.   });
  33.  
  34.  
  35. var second_form = $('#subscribe');
  36.  
  37.   id_chanel_2 = $('input[name="id_chanel[]"]',second_form).val();
  38.  
  39.   name_2 = name_1 ;
  40.  
  41.   email_2 = email_1 ;
  42.  
  43.   confirm_2 = $('input[name="submit"]',second_form).val();
  44.  
  45.   dataString_2 = 'id_chanel[]=' + id_chanel_2 + '&realName=' + name_2 + '&emailAdress=' + email_2 + '&submit=' + confirm_2;
  46.  
  47.  
  48.   $.ajax({  
  49.  
  50.   type: "POST",  
  51.  
  52.   url: "/smartmail/subscribe.php",  
  53.  
  54.   data: dataString_2,
  55.  
  56.   success: function() {  
  57.  
  58.       $('#result').html;
  59.  
  60.   }  
  61.  
  62.   });
  63. }
  64. </script>


Скрипт запускается не инпутом, а ссылкой:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href="javascript:;" onclick="ajax_send()" style="float:right; font-size: 8px;">Send</a>
input[name=
2. armancho7777777 - 12 Сентября, 2012 - 01:09:42 - перейти к сообщению
Если сай в utf8, то зачем с cp1251 заморачиваетесь ?
Выполню Вашу задачу.
Проверьте личку.
3. nwnet - 12 Сентября, 2012 - 01:12:33 - перейти к сообщению
armancho7777777 пишет:
Если сай в utf8, то зачем с cp1251 заморачиваетесь ?
Выполню Вашу задачу.
Проверьте личку.


Рассылка идет в кодировке 1251 - поэтому со второй формы передаются данные в кодировке 1251.
4. armancho7777777 - 12 Сентября, 2012 - 01:14:10 - перейти к сообщению
nwnet пишет:
Рассылка идет в кодировке 1251

Какая рассылка?
Файл с формой получает сторонние данные в этой кодировке, или что ?
5. nwnet - 12 Сентября, 2012 - 01:17:46 - перейти к сообщению
armancho7777777 пишет:
nwnet пишет:
Рассылка идет в кодировке 1251

Какая рассылка?
Файл с формой получает сторонние данные в этой кодировке, или что ?


В первой форме вводятся Имя мыло (UTF8) и пароль, ну и капча.

Вторая как бы получает из первой имя и мыло, но поскольку имя для рассылки нужно в кодировке 1251, то поэтому и нужно реализовать аналог accept-charset="windows-1251"

---------------

Первая форма регистрирует пользователя на сайта
Вторая форма подписывает его на рассылку

ну и как видно обращаются формы к разным файлам
6. armancho7777777 - 12 Сентября, 2012 - 01:52:01 - перейти к сообщению
nwnet пишет:
Вторая как бы получает из первой имя и мыло, но поскольку имя для рассылки нужно в кодировке 1251, то поэтому и нужно реализовать аналог accept-charset="windows-1251"

Да нет же, причём тут это )
Главное, чтобы файл был с формой в UTF8, а то что Вы туда вводите, с кодировкой не связано.
(Добавление)
nwnet пишет:
Первая форма регистрирует пользователя на сайта
Вторая форма подписывает его на рассылку

И не надо делать две формы.
Достаточно в обработчике идентифицировать поля, и там уже всё решить, куда что записывать и отправлять.
7. nwnet - 12 Сентября, 2012 - 02:30:12 - перейти к сообщению
Итак, исполнитель этой задачки все еще ищется.

Да и оплата в WMR.
8. armancho7777777 - 12 Сентября, 2012 - 03:27:53 - перейти к сообщению
В обработчике:
PHP:
скопировать код в буфер обмена
  1. iconv('windows-1251', 'utf-8', 'Петя');

И всё же, вернусь к тому, что писал в личке:
отправляйте правильно почту в UTF8 и не надо ничего придумывать.
UTF8 отлично дружит с кириллицей.

Правильная отправка почты:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Mailer {
  3.        
  4.         private $_params = array(
  5.         'email' => '',  
  6.         'from_name' => '',
  7.         'from_mail' => '',
  8.         'subject' => '',
  9.         'message' => '',
  10.         'charset' => 'utf-8',
  11.         'content_type' => 'plain',
  12.         'time_limit' => 30
  13.         );
  14.        
  15.         private $_error_text = '<br><span style="color:#F00;">';
  16.        
  17.         public function __call($name, $param)
  18.         {
  19.                 if(!isset($this->_params[$name])) die('Некорректный параметр! ('.$name.'())');
  20.                 if(count($param) > 1) die('Ожидается 1 параметр в '.$name.'()!');
  21.                
  22.                 $this->_params[$name] = $param[0];
  23.                 return $this;
  24.         }
  25.        
  26.         public function send_mail()
  27.         {
  28.                 if($this->_error_email() === false)
  29.                 die($this->_error_text);
  30.                 else
  31.                 $this->_send_mail();
  32.         }      
  33.        
  34.         private function _error_email()
  35.         {
  36.                 $error = true;
  37.                 foreach($this->_params as $k => $prop)
  38.                 {
  39.                         if(empty($prop))
  40.                         {
  41.                                 $error = false;
  42.                                 $this->_error_text .= 'Не указан параметр: &nbsp;&nbsp; '.$k.'()<br>'; 
  43.                         }
  44.                 }
  45.                 $this->_error_text .= '</span>';
  46.                 return $error;
  47.         }
  48.        
  49.         private function _send_mail()
  50.         {
  51.                 $this->_params['from_name'] = '=?'.$this->_params['charset'].'?B?'.base64_encode($this->_params['from_name']).'?=';
  52.                 $this->_params['subject'] = '=?'.$this->_params['charset'].'?B?'.base64_encode($this->_params['subject']).'?=';
  53.                 $header = "From: ".$this->_params['from_name']." <".$this->_params['from_mail'].">\r\n";
  54.                 $header .= "Reply-To: ".$this->_params['from_mail']."\r\n";
  55.                 $header .= "Content-type: text/".$this->_params['content_type']."; charset=".$this->_params['charset']."\r\n";
  56.                
  57.                 set_time_limit($this->_params['time_limit']);
  58.                
  59.                 // Отправка сообщения  
  60.                 if(is_array($this->_params['email']))
  61.                 {
  62.                         foreach($this->_params['email'] as $email)
  63.                         @mail($email, $this->_params['subject'], $this->_params['message'], $header);
  64.                 }
  65.                 else
  66.                 {
  67.                         @mail($this->_params['email'], $this->_params['subject'], $this->_params['message'], $header);
  68.                 }      
  69.         }
  70. }
  71.  


Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2.  $maiter = new Mailer();
  3.  
  4.  $maiter->email('user@mail.ru')       // Адресат (можно массив адресов)
  5.         ->from_name('Админ')          // Имя отправителя
  6.         ->from_mail('admin@mail.ru')  // Адрес отправителя
  7.         ->subject('Тема сообщения')   // Тема сообщения
  8.         ->message('Тело сообщения')   // Тело сообщения
  9.         ->charset('utf-8')            // Кодировка (по умолчанию utf-8)
  10.         ->time_limit(30)              // set_time_limit (по умолчанию == 30с.)
  11.         ->content_type('html')        // тип сообщения (по умолчанию 'plain')
  12.         ->send_mail();                // Отправка почты
  13.  
9. nwnet - 12 Сентября, 2012 - 04:33:03 - перейти к сообщению
Тоесть вы предлагаете переписать скрипт рассылки + вытекающее из этого: админку этого скрипта рассылки конвертнуть в UTF8, а также конвертнуть уже имеющуюся базу подписчиков в UTF8, а потом еще и баги какое-то время отлавливать.

P.S.: если я скопирую это iconv('windows-1251', 'utf-8', 'Петя'); в приведенный мною выше скрипт обработчика, то 100% уверен работать не будет
10. armancho7777777 - 12 Сентября, 2012 - 04:34:12 - перейти к сообщению
nwnet пишет:
P.S.: если я скопирую это iconv('windows-1251', 'utf-8', 'Петя'); в приведенный мною выше скрипт обработчика, то 100% работать не будет

У Вас точно ))

nwnet пишет:
в приведенный мною выше скрипт обработчика

Обработчика там нет.
Не знаю, что Вы подразумеваете под словом "обработчик", но я имел в виду файл,
который обрабатывает полученные данные из формы: записывет в БД и т.д.
Если телепатия не подводит, то он у Вас именуется "send.php" )

 

Powered by ExBB FM 1.0 RC1