0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 4597 Просмотров
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Добрый день товарищи.
У меня такая проблема, кто-то дюже умный сварганил нам форму регистрации на сайте. Да так, что теперь вообще стало не понятным что и откуда берется. Вот пример:
Код
<?php
/**
 * @version $Id: register.php 1206 2011-10-17 21:09:08Z joomlaworks $
 * @package K2
 * @author JoomlaWorks http://www.joomlaworks.gr
 * @copyright Copyright (c) 2006 - 2011 JoomlaWorks Ltd. All rights reserved.
 * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */

// no direct access
defined('_JEXEC') or die('Restricted access');
?>
<script type="text/javascript">
$(document).ready(function(){
    $("#username").blur(function() {

   
    $.post('/components/com_users/controllers/validation.php', {login:$(this).val()}, function(serverResponse) {
         
            $("#loginCheckResult").html(serverResponse);
        })
    })
})
</script>
<script>
function checkPass ()
{
with (document)
getElementById ('info').innerHTML = (getElementById ('password').value != getElementById ('password2').value)?
   'Пароль повторен неверно!' : (getElementById ('password').value.length < 6)? 'ffffffffffffffffffffffff fffffffffffffff ffffffffffffffffff!' : 'Верно!';
 alert (getElementById ('password').value.length);
}
 </script>
<script>
function checkEmail ()
{
var re = new RegExp ('[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}');
with (document)
getElementById ('infoE').innerHTML = (getElementById ('email').value != getElementById ('email2').value)?
   'E-mail повторен неверно!' : (re.test(getElementById ('email').value))? 'Верно!' : 'fffffffffffffffffffffffffffffffff fffffffffffffff e-mail';
}
</script>
<?php if(isset($this->message)) $this->display('message'); ?>
<div id="feedback" class="general-forms">
<form action="<?php echo JRoute::_('index.php'); ?>" enctype="multipart/form-data" method="post" id="josForm" name="josForm" class="form-validate">
<h2>Анкета нового дилера</h2>
         <h3>Информация об организации</h3>
              <div class="form-line">
                   <label for="">Название компании (полностью с ООО или ЧП и т.д.)<em>*</em></label>
                  <input type="text"  name="company" class="inputbox required general-input"  value="<?php echo $this->K2User->company; ?>" />
              </div>
              <div class="form-line">
                   <label for="">Город<em>*</em></label>
                  <input type="text"  name="city" class="inputbox required general-input"  value="<?php echo $this->K2User->city; ?>" />
              </div>
             <div class="form-line">
                   <label for="">Физический адрес<em>*</em></label>
                  <input type="text"  name="address" class="inputbox required general-input"  value="<?php echo $this->K2User->address; ?>" />
              </div>
              <div class="form-line">
                   <label for="">Телефоны</label>
                   <input type="text"  name="phone" class="general-input"  value="<?php echo $this->K2User->phone; ?>" />
              </div>
              <div class="form-line">
                   <label for="">Адрес сайта</label>
                   <input type="text"  value="<?php echo $this->K2User->url; ?>" name="url" class="general-input"/>
              </div>
         <h3>Контактное лицо</h3>
               <div class="form-line">
                   <label id="namemsg" for="name"><?php echo JText::_('K2_NAME'); ?><em>*</em></label>
                   <input type="text" name="<?php echo (K2_JVERSION=='16')?'jform[name]':'name'?>" id="name" size="40" value="<?php echo $this->escape($this->user->get( 'name' )); ?>" class="inputbox required  general-input" maxlength="50" />
               </div>
               <div class="form-line">
                  <label for="">Должность<em>*</em></label>
                  <input type="text"  value="<?php echo $this->K2User->spec; ?>" name="spec" class="inputbox required general-input"/>
               </div>
               <div class="form-line">
                  <label for="">Телефон</label>
                  <input type="text"  value="<?php echo $this->K2User->phone2; ?>" name="phone2" class="general-input"/>
               </div>
   <?php //добавляю поле для ввода бренда, создана табл. k2_users.brand?>
   <div class="form-line" style="height: 75px;">
                  <label for="">выбирите бренд</label>
<p>
<span style="width: 100px; background:none;">
<input type="checkbox" name="brand" class="general-input" value="<?php echo $this->K2User->brand['General']; ?>" style="width:14px;" checked>&emsp;General<Br>
</span>
<span style="width: 100px; background:none;">
<input type="checkbox" name="brand" class="general-input" value="<?php echo $this->K2User->brand['Mitsubishi']; ?>" style="width:14px;">&emsp;Mitsubishi<Br>
</span>
<span style="width: 100px; background:none;">
<input type="checkbox" name="brand" class="general-input" value="<?php echo $this->K2User->brand['Clint']; ?>" style="width:14px;">&emsp;Clint<Br>
</span>
<span style="width: 100px; background:none;">
<input type="checkbox" name="brand" class="general-input" value="<?php echo $this->K2User->brand['MDV']; ?>" style="width:14px;">&emsp;MDV<Br>
</span>
</p>
               </div>
   <?php //поле поддерживает множественный выбор и пишет в БД текст?>
                <div class="form-line">
                  <label id="emailmsg" for="email"><?php echo JText::_('K2_EMAIL'); ?><em>*</em></label>
                  <input type="text" id="email" name="<?php echo (K2_JVERSION=='16')?'jform[email1]':'email'?>" size="40" value="<?php echo $this->escape($this->user->get( 'email' )); ?>" class="inputbox required validate-email  general-input" maxlength="100" />
               </div>
               <div class="form-line">
           <label id="email2msg" for="email2"><?php echo JText::_('K2_CONFIRM_EMAIL'); ?><em>*</em></label>
   <input type="text" id="email2" name="jform[email2]" size="40" value="" onchange="checkEmail ()" class="inputbox required validate-email general-input" maxlength="100" />
           <span class="message error" style="color: red" id="infoE"></b><br> 
               </div>
                <div class="form-line">
   <label id="usernamemsg" for="username"><?php echo JText::_('K2_USER_NAME'); ?><em>*</em></label>
   <input type="text" id="username" name="<?php echo (K2_JVERSION=='16')?'jform[username]':'username'?>" size="40" value="<?php echo $this->escape($this->user->get( 'username' )); ?>" class="inputbox required validate-username general-input" maxlength="25" />
            <span class="message error" id="loginCheckResult" style="color: red"></span>   
              </div>
               <div class="form-line">
   <label id="pwmsg" for="password"><?php echo JText::_('K2_PASSWORD'); ?><em>*</em></label>
   <input class="inputbox required validate-password general-input" type="password" id="password" name="<?php echo (K2_JVERSION=='16')?'jform[password1]':'password'?>" size="40" value="" />
        </div>
                <div class="form-line">
           <label id="pw2msg" for="password2"><?php echo JText::_('K2_VERIFY_PASSWORD'); ?><em>*</em></label>
   <input class="inputbox required validate-passverify general-input" type="password" id="password2" onchange="checkPass ()"  name="<?php echo (K2_JVERSION=='16')?'jform[password2]':'password2'?>" size="40" value="" />
           <span class="message error" style="color: red" id="info"></span>
                    </div>
               <div class="form-line" style="display:none;">
                    <label id="pw2msg" for="password2">Ваш пол:</label>
                    <?php echo $this->lists['gender']; ?>
               </div>
               <div class="submit-box">
                      <input class="general-button" type="submit" value="Отправить" name="">
                </div>
<?php if(count(array_filter($this->K2Plugins))): ?>


<?php foreach ($this->K2Plugins as $K2Plugin): ?>
<?php if(!is_null($K2Plugin)): ?>
<tr>
<td colspan="2">
<?php echo $K2Plugin->fields; ?>
</td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php if($this->K2Params->get('recaptchaOnRegistration') && $this->K2Params->get('recaptcha_public_key')): ?>
<label class="formRecaptcha"><?php echo JText::_('K2_ENTER_THE_TWO_WORDS_YOU_SEE_BELOW'); ?></label>
<div id="recaptcha"></div>
<?php endif; ?>
<div class="k2AccountPageNotice"><?php echo JText::_('K2_REGISTER_REQUIRED'); ?></div>
<input type="hidden" name="option" value="<?php echo (K2_JVERSION=='16')?'com_users':'com_user'?>" />
<input type="hidden" name="task" value="<?php echo (K2_JVERSION=='16')?'registration.register':'register_save'?>" />
<input type="hidden" name="id" value="0" />
<input type="hidden" name="gid" value="0" />
<input type="hidden" name="K2UserForm" value="1" />
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</div>

Помогите разобраться?! Пожалуйста... а то совсем надежду потерял  >:(
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #1 : 12.12.2012, 16:49:44 »
Эта форма пишет часть информации в БД com_users, а часть в _k2_users... только где именно происходит запись?!
Пересмотрел все файлы в com_users
и все в com_k2_users...
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Re: Кривая Форма регистрации,
« Ответ #2 : 12.12.2012, 17:35:20 »
Ну так это же только форма ^-^
Она сама ничего никуда не пишет. Она отображается в вашем браузере. Вы ее заполняете. Поля проверяются (checkPass и т.п).
Жмете кнопку для отправки.
Код
<input class="general-button" type="submit" value="Отправить" name="">
Формируются данные которые отправляются на сервер.

Вам нужно искать где потом данные переданные формой обрабатываются.
Это у Вас что вообще такое модуль, компонент ?
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #3 : 12.12.2012, 18:19:33 »
Это часть компонента k2 размещается сей элемент в com_k2 -> templates -> register.php, я понимаю что это форма... вот я только не понимаю куда она данные шлет?!
Если в com_users, то явно чего-то не хватает в файле registration.xml:
Код
<field name="spacer" type="spacer" class="text"
label="COM_USERS_REGISTER_REQUIRED"
/>

<field name="name" type="text"
description="COM_USERS_REGISTER_NAME_DESC"
filter="string"
label="COM_USERS_REGISTER_NAME_LABEL"
message="COM_USERS_REGISTER_NAME_MESSAGE"
required="true"
size="30"
/>

<field name="username" type="text"
class="validate-username"
description="COM_USERS_DESIRED_USERNAME"
filter="username"
label="COM_USERS_REGISTER_USERNAME_LABEL"
message="COM_USERS_REGISTER_USERNAME_MESSAGE"
required="true"
size="30"
validate="username"
/>

<field name="password1" type="password"
autocomplete="off"
class="validate-password"
description="COM_USERS_DESIRED_PASSWORD"
field="password2"
filter="raw"
label="COM_USERS_REGISTER_PASSWORD1_LABEL"
message="COM_USERS_REGISTER_PASSWORD1_MESSAGE"
required="true"
size="30"
validate="equals"
/>

<field name="password2" type="password"
autocomplete="off"
class="validate-password"
description="COM_USERS_REGISTER_PASSWORD2_DESC"
filter="raw"
label="COM_USERS_REGISTER_PASSWORD2_LABEL"
message="COM_USERS_REGISTER_PASSWORD2_MESSAGE"
required="true"
size="30"
/>

<field name="email1" type="email"
description="COM_USERS_REGISTER_EMAIL1_DESC"
field="id"
filter="string"
label="COM_USERS_REGISTER_EMAIL1_LABEL"
message="COM_USERS_REGISTER_EMAIL1_MESSAGE"
required="true"
size="30"
unique="true"
validate="email"
/>

<field name="email2" type="email"
description="COM_USERS_REGISTER_EMAIL2_DESC"
field="email1"
filter="string"
label="COM_USERS_REGISTER_EMAIL2_LABEL"
message="COM_USERS_REGISTER_EMAIL2_MESSAGE"
required="true"
size="30"
validate="equals"
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #4 : 12.12.2012, 18:25:38 »
и что самое интересное данные из этой формы пишутся в БД, как в #_users , так и в #_k2_users..
Причем в #_k2_users полнее.
Я думаю так, разработчику было в лом разбираться и он чтобы не ломать систему регистрации Jooml-овскую прилепил обработку и запись в компонент k2_users, вот только как ? Не разберусь ни как
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #5 : 13.12.2012, 14:02:15 »
хм. и так, пошел разбираться дальше... POST отдает полученные данные с формы в
Код
action="<?php echo JRoute::_('index.php'); ?>"
путь привел в директорию: /component/users/
Зашел попутно в components/com_users/controllers/registration.php
Нашел функцию:
Код
public function register()
бла-бла
$requestData = JRequest::getVar('jform', array(), 'post', 'array');
Я так понимаю сюда прилетают данные из формы!
Проходят проверку в Моделе:
Код
$form	= $model->getForm();
if (!$form) {
JError::raiseError(500, $model->getError());
return false;
}
$data = $model->validate($form, $requestData);

И сохраняются
Код
$app->setUserState('com_users.registration.data', $requestData);
$return = $model->register($data);

Вот я только не пойму где скрипт что пишет данные в БД?
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Re: Кривая Форма регистрации,
« Ответ #6 : 13.12.2012, 14:44:48 »
А у Вас класса от JTable там нет случаем? С методами типа store, delete.

P.S.: Хотя методов там может и не быть.
Почитайте вот здесь: http://joomla-umnik.ru/joomla-zapis-dannyh-cherez-sayt
и вот здесь http://inet-reklama.com/blog/joomla/klass-jtable-v-joomla

Думаю после этого станет понятно что всю работу по сохранению данных берет на себя движок Joomla и в вашем коде нужно только указать с какой таблицей мы работаем.
« Последнее редактирование: 13.12.2012, 14:51:07 от rsa_m »
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #7 : 13.12.2012, 16:34:08 »
Спасибо rsa_m очень полезные статьи, было полезно прочитать их еще раз..
Однако я уже все файлы просмотрел, в том числе и tables в админке. Вот как пример, administrator\components\com_k2\tables:
Код
defined('_JEXEC') or die('Restricted access');

class TableK2User extends JTable
{

var $id = null;
var $userID = null;
var $userName = null;
var $gender = null;
var $description = null;
var $image = null;
var $url = null;
var $group = null;
var $plugins = null;

function __construct( & $db) {

parent::__construct('#__k2_users', 'id', $db);
}

function check() {

if (trim($this->url)!= '' && substr($this->url, 0, 7)!= 'http://')
$this->url = 'http://'.$this->url;
return true;
}

function bind($array, $ignore = '') {

if (key_exists('plugins', $array) && is_array($array['plugins'])) {
$registry = new JRegistry();
$registry->loadArray($array['plugins']);
$array['plugins'] = $registry->toString();
}

return parent::bind($array, $ignore);
}

}
тут есть безусловно данные что пишутся в БД, но это не те данные, что приписали в форме регистрации:
Код
name="city" value="<?php echo $this->K2User->city; ?>" ... 
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #8 : 13.12.2012, 17:00:19 »
Первая статья откинула меня к скрытым полям, что передаются в форме регистрации, вот этим:
Код
<input type="hidden" name="option" value="<?php echo (K2_JVERSION=='16')?'com_users':'com_user'?>" />
<input type="hidden" name="task" value="<?php echo (K2_JVERSION=='16')?'registration.register':'register_save'?>" />
<input type="hidden" name="id" value="0" />
<input type="hidden" name="gid" value="0" />
<input type="hidden" name="K2UserForm" value="1" />
Решил глянуть куда ведет ТАСК, в итоге решил что сюда: components\com_users\models\registration.php
Здесь нашел такие строки:
Код
public function getData()
{
if ($this->data === null) {

$this->data = new stdClass();
$app = JFactory::getApplication();
$params = JComponentHelper::getParams('com_users');

// Override the base user data with any data in the session.
$temp = (array)$app->getUserState('com_users.registration.data', array());
foreach ($temp as $k => $v) {
$this->data->$k = $v;
}

// Get the groups the user should be added to after registration.
$this->data->groups = isset($this->data->groups)? array_unique($this->data->groups) : array();

// Get the default new user group, Registered if not specified.
$system = $params->get('new_usertype', 2);

$this->data->groups[] = $system;

// Unset the passwords.
unset($this->data->password1);
unset($this->data->password2);

// Get the dispatcher and load the users plugins.
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('user');

// Trigger the data preparation event.
$results = $dispatcher->trigger('onContentPrepareData', array('com_users.registration', $this->data));

// Check for errors encountered while preparing the data.
if (count($results) && in_array(false, $results, true)) {
$this->setError($dispatcher->getError());
$this->data = false;
}
}

return $this->data;
}
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #9 : 13.12.2012, 17:48:12 »
В общем только запутался еще больше...
Ни хрена не понимаю. Где обрабатываются все эти поля и как они пишутся в БД?
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Re: Кривая Форма регистрации,
« Ответ #10 : 13.12.2012, 17:51:06 »
getData - это наоборот чтение данных, обычно для подстановки их потом в поля формы.

Ну а если тупо city поискать. Много где находит?

А функцию public function register() выложите пожалуйста (только в спойлер).
« Последнее редактирование: 13.12.2012, 17:54:37 от rsa_m »
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Re: Кривая Форма регистрации,
« Ответ #11 : 13.12.2012, 18:09:59 »
Если у Вас стандартный registration.php
То там ведь есть строки которые INSERT в таблицу #__users делают.

А запись в проприетарную таблицу K2 нужно, наверное, смотреть не в registration.php, а в папке компонента K2.
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #12 : 13.12.2012, 18:16:44 »
Выкладываю - public function register():
Спойлер
[свернуть]
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #13 : 13.12.2012, 18:18:58 »
и на всякий случай, public function register($temp) из com_users\models\registration.php
Спойлер
[свернуть]
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #14 : 13.12.2012, 18:22:01 »
Ну а если тупо city поискать. Много где находит?
Находит  столько всего, что даже страшно представить.. не могу посчитать сколько строк ))
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Re: Кривая Форма регистрации,
« Ответ #15 : 14.12.2012, 00:58:59 »
Давайте зайдем с другой стороны.
В первом посте у Вас приведена форма.
Там есть поля в которых выводится инфа типа $this->K2User->city;

Не знаю как у Вас конкретно сделано, но думаю что должно быть что-то типа:
В модели $K2User = &$this->getTable();
В view.html.php $this->assignRef('K2User', $K2User);

Вот и получили конструкцию $this->K2User->city; Где city поле таблицы.

А в каком нибудь классе компонента K2 порожденного от JTable будет написано

var $city = null;
И будет конструктор типа
function __construct (&$db)
{
   // тут будет название таблицы
}

И все. Остальное движок делает сам. Все исходные данные есть, есть название таблицы в конструкторе, есть переменная в классе, есть поле формы. Есть метод store в классе JTable.
Честно говоря не разбирался через какую цепочку вызывается метод store когда мы сохраняем данные в таблицах из формы. Но он вызывается и в Вашем случае тоже.
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #16 : 14.12.2012, 16:37:24 »
Я кажется приблизился к решению этой задачи, но, что-то пока руки не доходят посидеть и сделать..
Описание здесь: http://ya.samposebe.ru/2012/05/27/%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-%D0%B8-%D0%B2%D0%B8%D0%B4-%D1%81-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%BC-%D0%B2-joomla-1-7/
*

Kintim

  • Осваиваюсь на форуме
  • 39
  • 1 / 0
Re: Кривая Форма регистрации,
« Ответ #17 : 17.12.2012, 17:14:37 »
Добрый вечер.
Подразобрался я немного с этой формой. Помогли знающие люди, направили на путь.
Эта форма, что указна в первом посте:
Спойлер
[свернуть]
разбирается тут:
Спойлер
[свернуть]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Форма или модуль загрузки файлов пользователями

Автор НадеждаМакарова

Ответов: 2
Просмотров: 557
Последний ответ 23.03.2020, 10:30:40
от НадеждаМакарова
Переадресация после регистрации Joomla 2.5

Автор Наталик

Ответов: 21
Просмотров: 19746
Последний ответ 29.10.2018, 21:37:29
от Elena91
Как найти страницу регистрации для пользователей? Подскажите, пожалуйста

Автор cosmotion

Ответов: 11
Просмотров: 5408
Последний ответ 19.07.2018, 09:56:57
от vad78
Убрать поле подтверждения e-mail при регистрации

Автор cartgen

Ответов: 5
Просмотров: 6802
Последний ответ 01.05.2018, 16:56:07
от kasper9820
Условия предоставления услуг при регистрации

Автор ZerZer

Ответов: 2
Просмотров: 3294
Последний ответ 20.07.2017, 09:40:25
от anoorik