LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 02:21:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор Тема: AJAX проверка e-mail и имени пользователя.  (Прочитано 7308 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« : 21.10.2009, 03:44:09 »

Проверка имени пользователя и e-mail, регистрируемого пользователя на уникальность без перезагрузки страницы. Работает во всех браузерах. кроме IE 6.

Делалось и проверялось для версии VirtueMart 1.1.3, но также подходит для версии 1.1.4.

Находим файл: administrator/components/com_virtuemart/html/checkout_register_form.php
Открываем и ищем строчку 23:
Код:
$missing = vmGet( $_REQUEST, "missing", "" );

if (!empty( $missing )) {
echo "<script type=\"text/javascript\">alert('".$VM_LANG->_('CONTACT_FORM_NC',false)."'); </script>\n";
}

Заменяем на:
Код:
$missing = vmGet( $_REQUEST, "missing", "" );

?>

<script language="javascript" type="text/javascript">



function getUsername(){
var form = document.adminForm;
var unam = form.username.value;

if( !$('username_ticker') )
$('username_input').innerHTML = $('username_input').innerHTML + "<div id=\"username_ticker\" style=\"padding-top:10px;\"></div>";

$('username_field').value = unam;

if( form.username.value.length < 3 ) {
$('username_ticker').innerHTML = '<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Неверное Имя пользователя.</span>';
} else {
$('username_ticker').innerHTML = "<img src=\"<?php echo JURI::base()."images/wait.gif";?>\">&nbsp;Checking";
var url = 'index.php?option=com_virtuemart&tasked=chkuserinfo&format=raw&what=uname';
url = url + '&uname=' + form.username.value;

new Ajax(url, {
method: 'get',
onComplete: function(x){
if(x == 1) {
$('username_ticker').innerHTML = '<span style="background:#FFFFCC;border:0px solid #CC0000;color:red;font-weight:bold;line-hight:30px;padding:5px 5px 5px 5px;">Это Имя пользователя (Логин) уже занято. </br> Пожалуйста используйте другое Имя пользователя</span>';
} else {
$('username_ticker').innerHTML = '<span style="border:1px none transparent;color:green;padding:5px 5px 5px 5px;">Имя пользователя (Логин) \''+ $('username_field').value +'\' свободно. Можно продолжать регистрацию</span>';
}
}
}).request();

}
}


function getEmail(){

var form = document.adminForm;
var eadd = form.email.value;

if( !$('email_ticker') )
$('email_input').innerHTML = $('email_input').innerHTML + "<div id=\"email_ticker\" style=\"padding-top:10px;\"></div>";

$('email_field').value = eadd;

if( !(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(form.email.value))) {
$('email_ticker').setHTML('<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Вы ввели неправильный e-mail адрес.</span>');
} else {
$('email_ticker').setHTML("<img src=\"<?php echo JURI::base()."images/wait.gif";?>\">&nbsp;Checking");
var url = 'index.php?option=com_virtuemart&tasked=chkuserinfo&format=raw&what=email';
url = url + '&email=' + form.email.value;

new Ajax(url, {
method: 'get',
onComplete: function(x){
if(x == 1) {
$('email_ticker').setHTML('<span style="background:#FFFFCC;border:1px solid #CC0000;color:red;font-weight:bold;padding:5px 5px 5px 5px;">Этот e-mail уже зарегистрирован.</span>');
} else {
$('email_ticker').setHTML('<span style="border:1px none transparent;color:green;padding:5px 5px 5px 5px;">Этот e-mail \''+ $('email_field').value +'\' свободен. Можно продолжать регистрацию.</span>');
}
}
}).request();

}
}



</script>
<?php

if (!empty( $missing )) {
echo "<script type=\"text/javascript\">alert('".$VM_LANG->_('CONTACT_FORM_NC',false)."'); </script>\n";
}

Сохраняем файл в UTF-8 без ВОМ

Находим файл: administrator/components/com_virtuemart/classes/ps_userfield.php

Строка 390 после следующих строк:
Код:
case 'password':
case 'password2':
echo '<input type="password" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" />'."\n";
    break;

добавляем следующий код:
Код:
case 'email':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();" />'."\n";
    break;

case 'username':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox" />'."\n";
    break;


После добавления должно выглядеть примерно так:
Код:
case 'password':
case 'password2':
echo '<input type="password" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" />'."\n";
    break;

case 'email':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();" />'."\n";
    break;

case 'username':
echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox" />'."\n";
    break;

    default:

Сохраняем файл

Находим файл: /components/com_virtuemart/virtuemart.php
Строка 21: вставляем после "global $mosConfig_absolute_path, $product_id, $vmInputFilter, $vmLogger;" следующий код:
Код:
$tasked = JRequest::getVar( 'tasked' );

if($tasked=="chkuserinfo"){
$database = & JFactory::getDBO();
$email = JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );

$what = JRequest::getVar( 'what' );

$usercount = 0;
$emailcount = 0;


if($what == "uname"){
$database->setQuery("SELECT COUNT(*) FROM #__users WHERE username='$uname'");
$usercount = $database->loadResult();
if($usercount)
echo "1";
else
echo "0";

} else if ($what == "email") {
$database->setQuery("SELECT COUNT(*) FROM #__users WHERE email='$email'");
$emailcount = $database->loadResult();

if($emailcount)
echo "1";
else
echo "0";
}


die();
}

Сохраняем файл.

В папку сайта images закидываем файл-картинку, который во вложении. Он нужен будет для анимации пока идёт проверка.

Готово...

Удачи всем!


* wait.gif (0.42 Кб, 43x11 - просмотрено 2589 раз.)
« Последнее редактирование: 17.12.2010, 15:37:54 от Silent_Breeze » Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

Пол: Мужской
Сообщений: 2994


http://beagler.ru/


« Ответ #1 : 21.10.2009, 10:04:57 »

+1 адназначна, так держать
Записан
VZup
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #2 : 27.10.2009, 17:20:24 »

все сделал по инструкции, не работает, кеш чистил
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #3 : 27.10.2009, 17:45:35 »

все сделал по инструкции, не работает, кеш чистил

Давайте адрес сайта - посмотрю...
Записан
VZup
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #4 : 27.10.2009, 17:53:44 »

адрес в личку написал
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #5 : 27.10.2009, 19:12:39 »

Проверьте ещё раз правильно ли вы вставили код? Номера строк необязательно будут совпадать, тем более, если вы уже правили код файлов. Ориентируйтесь по кускам кода до и после вставляемых частей.
Записан
VZup
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #6 : 27.10.2009, 20:34:13 »

еще раз все проверил, увы, не работает

может еще какой-то файлик править нужно?
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #7 : 27.10.2009, 23:31:25 »

Во вложении файлы, которые правились. Разложите их ПРАВИЛЬНО по нужным папкам.

* files.zip (15.13 Кб - загружено 163 раз.)
Записан
VZup
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #8 : 28.10.2009, 11:25:22 »

Как оказалось, у меня вообще не происходит проверка на дублирование имени и электронной почты при регистрации. Ни с помощью AJAX, ни в обычном режиме. Может галку где поставить? Вообще догнать не могу Sad
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #9 : 28.10.2009, 15:23:30 »

Попробуйте с другим шаблоном.
Записан
VZup
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #10 : 28.10.2009, 17:12:00 »

Попробуйте с другим шаблоном.
ё-ё-ё-ё-ё.... Спасибо за подсказку, когда делал шаблон, забыл вставить вывод сообщений
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #11 : 28.10.2009, 18:14:49 »

Всегда полжалуйста Azn
Записан
Dimas888
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 59

Учусь....


« Ответ #12 : 29.10.2009, 00:58:48 »

Подскажите где почитать про вывод сообщений а то в моём шаблоне тоже не работает а в другом работает?
Записан
Dimas888
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 59

Учусь....


« Ответ #13 : 29.10.2009, 11:16:20 »

Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
Записан
Figaro
Захожу иногда
**

Репутация: +2/-0
Offline Offline

Сообщений: 11


« Ответ #14 : 11.02.2010, 02:15:01 »

Проблема!

После регистрации, когда войти в управления своей записью - пропадает поля e-mail и логин

Кто что подскажет
Записан
Dimas888
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 59

Учусь....


« Ответ #15 : 11.02.2010, 20:23:13 »

В настройках магазина,  управление полями вводимых пользователем, включить отображать показать в разделе учётной записью. Сообщение здесь немного не в тему
Записан
Figaro
Захожу иногда
**

Репутация: +2/-0
Offline Offline

Сообщений: 11


« Ответ #16 : 12.02.2010, 00:40:40 »

Cобщение в тему!

После установки даного хака!

1. Регистрация работает нормально - поля проверяются с помощью AJAX

2. Но если пользователь входит в кправление своей учетной записью то в поля e-mail и user пусто!

3. Если убрать хак то в поле e-mail появляется e-mail - который пользователь вводил при регистрации...

4. Как исправить?
« Последнее редактирование: 12.02.2010, 00:56:06 от Figaro » Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #17 : 12.02.2010, 02:25:09 »

просто поле e-mail ждёт вввода для проверки....
Записан
Figaro
Захожу иногда
**

Репутация: +2/-0
Offline Offline

Сообщений: 11


« Ответ #18 : 12.02.2010, 16:22:05 »

Как его исправить
Записан
bigbug
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 12


« Ответ #19 : 17.02.2010, 17:29:59 »

Действительно, подскажите как исправить. Функция мега-клёвая, но этот недостаток мешает.
Записан
Shin
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 8


« Ответ #20 : 22.10.2010, 00:26:59 »

Вместо
Цитировать
case 'email':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();" />'."\n";
                  break;
               
            case 'username':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox" />'."\n";
                  break;

вставить
Цитировать
case 'email':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" class="inputbox" onchange="getEmail();"  value="'. ($db->sf($field->name, true, false)?$db->sf($field->name, true, false):'').'"/>'."\n";
                  break;
               
            case 'username':
               echo '<input type="text" id="'.$field->name.'_field" name="'.$field->name.'" size="30" maxlength="25" onchange="getUsername();" class="inputbox"  value="'. ($db->sf($field->name, true, false)?$db->sf($field->name, true, false):'').'"/>'."\n";
                  break;

тогда в аккаунте будет заполнено.
Кстати, в ИЕ 6 тоже работает отлично. Спасибо автору темы.
Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

Пол: Мужской
Сообщений: 2994


http://beagler.ru/


« Ответ #21 : 17.12.2010, 12:52:56 »

только ещё надо сообщение подправить - вместо "Можно продолжать регисрацию" - "Можно продолжать регистрацию"
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +31/-0
Offline Offline

Сообщений: 158



« Ответ #22 : 17.12.2010, 15:38:28 »

угу. Поправил...
Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

Пол: Мужской
Сообщений: 2994


http://beagler.ru/


« Ответ #23 : 17.12.2010, 17:39:11 »

реализовал, поставил свои стили, добавил jquery валидацию остальных полей, туда же регистрацию юрлиц, со скрытием/показом блока в зависимости от вида покупателя - просто конфета Azn
Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

Пол: Мужской
Сообщений: 2994


http://beagler.ru/


« Ответ #24 : 18.12.2010, 01:16:23 »

и ещё вместо
Код:
$email = JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );
лучше
Код:
$email = $vmInputFilter->safeSQL(JRequest::getVar( 'email' ));
$uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' ));
Записан
TakT
Осваиваюсь на форуме
***

Репутация: +5/-0
Offline Offline

Пол: Мужской
Сообщений: 111


« Ответ #25 : 07.01.2011, 21:10:21 »

и ещё вместо
Код:
$email = JRequest::getVar( 'email' );
$uname = JRequest::getVar( 'uname' );
лучше
Код:
$email = $vmInputFilter->safeSQL(JRequest::getVar( 'email' ));
$uname = $vmInputFilter->safeSQL(JRequest::getVar( 'uname' ));

кстати после этих изминений только у меня перестает рабоатать AJAX

срабатывает gif ка и все, и не чего не выдеат
Записан
gaa
Гость
« Ответ #26 : 14.01.2011, 22:36:43 »

Доброго здоровья!

Поставил все как сказано.
Но....
не работает нормально,
огоньки бегают и даже, что то сравнивает, делает...

И на уже занятые имя пользователя и емейл пишет -
Этот e-mail  свободен. Можно продолжать регистрацию.

Где и что поправить, чтобы он видел занятые логины и почту?
И писал что они заняты.

Стоит на локальной машине, работает на Denwer
VirtueMart 1.1.4 stable Joomla 1.5.16
« Последнее редактирование: 14.01.2011, 22:43:45 от gaa » Записан
korkunov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #27 : 19.01.2011, 01:03:43 »

Спасибо разобрался надо было вставить ещё <?php JHTML::_('behavior.mootools'); ?>
В самое начало файла VirtueMart.php
Записан
korkunov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #28 : 19.01.2011, 01:31:36 »

Hi. Thanks.
Вот еще бы проверку паролей на Аяксе.
Я ПХП не силен. может кто прикрутит скрипт, У мну не получилось  Angry
Это в checkout_register_form.php в начале, где скрипт...

function passwordMatch()
{
if ( password2 != "")
   {
   if ( password == password2 )
      {
         document.getElementById("password2").setAttribute("class", "user-valid");
         document.getElementById('password2').innerHTML="";
      }
   else
      {
         document.getElementById("password2").setAttribute("class", "user-invalid");
         document.getElementById('password2').innerHTML="Пароль: Введенные значения не совпадают!";   
      }
   }
else
   {
      document.getElementById("password2").setAttribute("class", "user-invalid");
      document.getElementById('password2').innerHTML="Поле обязательно к заполнению!";
   }
}
Записан
korkunov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #29 : 19.01.2011, 01:33:25 »

И еще в догонку.
сверстать бы эту страницу (регистрации) в виде таблицы, т.е. несколько колонок. А то она длинная, как то неказисто  Sad
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet