DLE: Как передать значение question_answer в ?do=register с главной страницы ?

12 3
MJ
На сайте с 29.12.2009
Offline
44
3182

Здравствуйте !

Такая проблема, сделал регистрацию на главной во всплывающем окошке.

Заранее скажу, что выбрал способ защиты при регистрации "Вопрос-ответ", иначе спама будет достаточно.

Все данные успешно передаются, за исключением ответа на Контрольный вопрос, разумеется тегом его никак в main.tpl не вывести, я создал всего 1 вопрос с ответом (5).

Значения всех полей: e-mail, логин, пароли передаются успешно, кроме ответа на вопрос, если с главной, статистической и т.п. там регистрироваться, всегда пишет одну ошибку: "Неверный ответ на контрольный вопрос", но если находится на странице index.php?do=register (хоть она у меня и пуста), успешно принимает контрольный ответ с этого же всплывающего окошка.

Вот мой код, на всякий случай:

<form class="form-2" method="post" name="registration" id="registration" action="/index.php?do=register">

<div><span class="log-in">Регистрация на сайте</span></div>

<p class="float">
<label for="login"><i class="icon-user"></i>Ваш логин</label>
<input type="text" name="name" id='name' placeholder="Введите логин">
</p>
<p class="float">
<label for="login"><i class="icon-inbox"></i>Почтовый ящик</label>
<input type="text" name="email" placeholder="Введите Ваш e-mail">
</p>
<p class="float">
<label for="password"><i class="icon-lock"></i>Пароль</label>
<input type="password" name="password1" id="login_password" placeholder="Введите пароль">
</p>
<p class="float">
<label for="password"><i class="icon-lock"></i>Подтвердите пароль</label>
<input type="password" name="password2" id="login_password" placeholder="Повторите пароль">
</p>

<p class="float">
<label for="login"><i class="icon-cog"></i>Сколько пальцев на одной руке ?</label>
<input type="text" name="question_answer" id="question_answer" placeholder="Введите ответ">
</p>

<p class="clearfix">
<input type="submit" name="submit" value="Зарегистрироваться">
<input name="submit_reg" type="hidden" id="submit_reg" value="submit_reg"/>
</p>

<input name="submit_reg" type="hidden" id="submit_reg" value="submit_reg" />
<input name="do" type="hidden" id="do" value="register" />
</form>

Скажите пожалуйста, как все-таки можно передать значение доп. поля ? (если возможно, без дополнительных запросов).

Заранее спасибо.

Mad_Man
На сайте с 10.11.2008
Offline
162
#1
MusicJam:
Такая проблема, сделал регистрацию на главной во всплывающем окошке.

Пыхосорц в студию, телепатов нету.

дани мапов
На сайте с 06.09.2012
Offline
204
#2

В /engine/modules/register.php перед строкой


if ( intval($_SESSION['question']) ) {

добавить:


$_SESSION['question'] = тут_айди_нужного_вопроса;
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
MJ
На сайте с 29.12.2009
Offline
44
#3

дани мапов, Спасибо большое за ответ ! Но к сожалению, данное значение работает только для index.php?do=register, на других страницах значение доп. поля не передаёт в форму регистрации.

Наверное, Вы не так поняли меня. Мне нужны именно не конкретные вопросы чтобы выводились, а чтобы на главной странице сайта можно было зарегистрироваться (а не только когда пользователь находится в index.php?do=register), все значения кроме ответа на вопрос замечательно передаются, вот мне нужно чтобы и ответ передавался...

(т.е. если скопировать форму регистрации и заполнять её на главной (у меня она во всплывающем окне) то не передаётся значение только

<input type="text" name="question_answer" id="question_answer" placeholder="Введите ответ">
, если же я в этой же всплывающей форме регистрируюсь, но нахожусь на странице регистрации (index.php?do=register) - значение передаётся. Так вот, я хочу чтобы значение "question_answer" передавалось так же в форму регистрации как и "name, email, password1, password2" - они прекрасно передаются.
Mad_Man
На сайте с 10.11.2008
Offline
162
#4

MusicJam, сорц обработчика формы будет в треде или вы из тех партизан, которым решение вопроса не нужно вовсе? Желательно ещё показать вывод print_r($_REQUEST) из того же файла в двух описанных ситуациях вами.

MJ
На сайте с 29.12.2009
Offline
44
#5

Mad_Man, извините, вот куски кода файла register.php (весь не влазит) - где форма успешно передаётся, как я понял, отсюда нужно что-то скопировать и влепить в другой файлик ?)

if( $config['reg_question'] ) {


if ( intval($_SESSION['question']) ) {

$answer = $db->super_query("SELECT id, answer FROM " . PREFIX . "_question WHERE id='".intval($_SESSION['question'])."'");

$answers = explode( "\n", $answer['answer'] );

$pass_answer = false;

if( function_exists('mb_strtolower') ) {
$question_answer = trim(mb_strtolower($_POST['question_answer'], $config['charset']));
} else {
$question_answer = trim(strtolower($_POST['question_answer']));
}

if( count($answers) AND $question_answer ) {
foreach( $answers as $answer ){

if( function_exists('mb_strtolower') ) {
$answer = trim(mb_strtolower($answer, $config['charset']));
} else {
$answer = trim(strtolower($answer));
}

if( $answer AND $answer == $question_answer ) {
$pass_answer = true;
break;
}
}
}

if( !$pass_answer ) $reg_error .= $lang['reg_err_25'];

} else $reg_error .= $lang['reg_err_25'];

}

f( $config['reg_question'] ) {


$tpl->set( '[question]', "" );
$tpl->set( '[/question]', "" );

$question = $db->super_query("SELECT id, question FROM " . PREFIX . "_question ORDER BY RAND() LIMIT 1");
$tpl->set( '{question}', htmlspecialchars( stripslashes( $question['question'] ), ENT_QUOTES, $config['charset'] ) );

$_SESSION['question'] = $question['id'];

} else {

$tpl->set_block( "'\\[question\\](.*?)\\[/question\\]'si", "" );
$tpl->set( '{question}', "" );

}
Mad_Man
На сайте с 10.11.2008
Offline
162
#6

MusicJam, замените BB тег [ php ][ /php ] на [ сode ][ /code ], на форуме бага с экранизацией "[" и "]" символов.

MJ
На сайте с 29.12.2009
Offline
44
#7

Mad_Man, готово)

Mad_Man
На сайте с 10.11.2008
Offline
162
#8

А теперь самое главное: что вы имеете в виду под "на других страницах значение доп. поля не передаёт в форму регистрации"? Чем именно вы это проверяли? Не могли бы вы воткнуть "print_r($_REQUEST); die;" в шапку файла регистрации и выложить сюда результаты двух тестов на регистрацию с главной страницы и со страницы обычной регистрации?

MJ
На сайте с 29.12.2009
Offline
44
#9
Mad_Man:
А теперь самое главное: что вы имеете в виду под "на других страницах значение доп. поля не передаёт в форму регистрации"? Чем именно вы это проверяли? Не могли бы вы воткнуть "print_r($_REQUEST); die;" в шапку файла регистрации и выложить сюда результаты двух тестов на регистрацию с главной страницы и со страницы обычной регистрации?

Добавил в шапку файла, никакой инфо о переменной не увидел, ни в исходном коде страницы, ни наглядно :(

Mad_Man
На сайте с 10.11.2008
Offline
162
#10
MusicJam:
Добавил в шапку файла, никакой инфо о переменной не увидел, ни в исходном коде страницы, ни наглядно :(

Судя по сорцу, выхлоп можно запихнуть в $reg_error в виде "$reg_error .= print_r($_REQUEST, true);". В данном случае вызов "die;" не нужен.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий