Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
Правильное написание кода сохранения отдельных данных
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
Правильное написание кода сохранения отдельных данных
Доброго Времени суток.
Почему, прошу помощи у авторов модов - просто я с этой областью еще не работал. В частности имеется форма на которой расположено три элемента: Edit (текстовое поле), ComboBox (раскрывающийся список), Edit (текстовое поле). Соответственно есть кнопки Ok и Cancel. Как правильно описать процедуру сохранения введенных данных в определенную базу. В принципе аналог данной ситуации видел в моде "день рождения", правда там все хранится и управляется в админке, а мне надо на отдельно форме и в свою базу (т.е. что и как прописывать на кнопку Ок).
Заранее спасибо. И извините если я повторился (в поиске не нашел, точнее даже не знаю как толком указать запрос на эту тематику).
Почему, прошу помощи у авторов модов - просто я с этой областью еще не работал. В частности имеется форма на которой расположено три элемента: Edit (текстовое поле), ComboBox (раскрывающийся список), Edit (текстовое поле). Соответственно есть кнопки Ok и Cancel. Как правильно описать процедуру сохранения введенных данных в определенную базу. В принципе аналог данной ситуации видел в моде "день рождения", правда там все хранится и управляется в админке, а мне надо на отдельно форме и в свою базу (т.е. что и как прописывать на кнопку Ок).
Заранее спасибо. И извините если я повторился (в поиске не нашел, точнее даже не знаю как толком указать запрос на эту тематику).
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
Именно это и надо. Своя форма, своя таблица (естесно в базе форума). Структура проста:rxu писал(а):Вам нужно, чтобы введённые в форму данные были сохранены в базе данных
- 1. ключ
2. код пользователя
3. дата/время
4. |
5. |
6. |-> необходимые поля
7. |
8. |
-
- phpBB Guru
- Сообщения: 16370
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1745 раз
RedScorp
Если знакомы с общими принципами передачи данных из форм, то этого будет достаточно.
Например, имеем кнопки:
Начинаете с формы. {S_ACTION} - переменная передаётся в шаблон из рнр файла стандартным способом, например
Т.е. по нажатию на кнопку в форме будет запущен файл file.php. При этом из формы методом method="post" в этот файл будет передана переменная name="var", получить которую там можно также стандартным способом, например:
Далее с переменной var можете поступать как вздумается, в т.ч. записывать в БД.
Если знакомы с общими принципами передачи данных из форм, то этого будет достаточно.
Например, имеем кнопки:
Код: Выделить всё
<form action="{S_ACTION}" method="post">
<table align="center" cellspacing="0" cellpadding="1" border="1">
<tr>
<td class="catBottom" colspan="2" align="center" height="28"><input class="post" type="text" name="var" size="7" maxlength="7" value="" /> <input type="submit" name="submit" value="{L_SUBMIT}" class="mainoption" /></td>
</tr>
</table>
</form>
Код: Выделить всё
$template->assign_vars(array(
'S_ACTION' => append_sid('file.'.$phpEx) )
);
Код: Выделить всё
if (!empty($HTTP_POST_VARS['var']) )
{
$var = $HTTP_POST_VARS['var'];
}
else
{
$var = 0;
}
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
А после того как этот файл отработает все вернеться обратно в мою форму (ну если в file.php будет описан только процесс сохранения)? Потому что у меня так и происходит, или я где-то ошибся...rxu писал(а):Т.е. по нажатию на кнопку в форме будет запущен файл file.php.
Добавлено спустя 14 минут 14 секунд:
Упс. Извините, разобрался. У меня там ошибка была, просто движок технично ее убирал. Поэтому после нажатия "заветной кнопки" все сохранение срабатывает. Но все равно надо чтобы после сейва вернуть пользователя обратно в форму
-
- phpBB Guru
- Сообщения: 16370
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1745 раз
Надо заключать блок, исполняемый по отправке формы, в соответствующее условие по передаваемой переменной, например
в котором предусматривать выходные процедуры, например, сообщение об успешном/неуспешном выполнении кода, такие, как message_die, или производить редирект, и пр.
Код: Выделить всё
if($var)
{
.....
}
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
Ура заработало. Кстати, я не стал выносить все в отдельный файл, а сделал все в своей форме, по принципу что Вы описали выше. Просто подвесил в самом начале обработку переменной $var
А на счет записи в таблицу - это правильно:
Добавлено спустя 5 минут 23 секунды:
Совсем забыл спросить про sid, когда я открываю свою форму у меня в адресной строке он не указывается (ну как на центральной странице). Обязателен ли он с точки зрения зашиты и безопасности? И плюс ко всему, в своем модуле я не могу использовать потому что сразу пишет хакинг
Код: Выделить всё
if (!empty($HTTP_POST_VARS['var']) ) {
$var = $HTTP_POST_VARS['var'];
... Выполняем сохранение
}
... работаем над отображением
... и заполнением формы
Код: Выделить всё
$sql = 'INSERT INTO ' . MY_TABLE . " (my_id, my_user_id, <..> )
VALUES ('$my_id', '$my_user_id', <..>)";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not insert new information', '', __LINE__, __FILE__, $sql);
}
Совсем забыл спросить про sid, когда я открываю свою форму у меня в адресной строке он не указывается (ну как на центральной странице). Обязателен ли он с точки зрения зашиты и безопасности? И плюс ко всему, в своем модуле я не могу использовать
Код: Выделить всё
if (defined('IN_PHPBB')) {
die('Hacking attempt');
exit;
}
-
- phpBB Guru
- Сообщения: 16370
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1745 раз
Потому, что в условии должно быть не defined('IN_PHPBB'), а !defined('IN_PHPBB').RedScorp писал(а):потому что сразу пишет хакинг
С этой точки зрения - да. Несмотря на то, что sid отсутствует в адресной строке, идентификатор сессии всё равно имеется. Инициируется при старте сессииRedScorp писал(а):Обязателен ли он с точки зрения зашиты и безопасности?
Код: Выделить всё
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
Упс. Очепятался. Там действительно стоит "!". А ругается скорее всего вот почему (утром проверю) надо в page_header.php прописать строку к примеруrxu писал(а):Потому, что в условии должно быть не defined('IN_PHPBB'), а !defined('IN_PHPBB').
Код: Выделить всё
'U_MYFILE' => append_sid('file.'.$phpEx),
Код: Выделить всё
<a href="{U_MYFILE}">File</a>
-
- phpBB 1.4.1
- Сообщения: 43
- Стаж: 18 лет 5 месяцев
- Откуда: г. Уральск
Не помогло. Но не столь важно, я в модуле делаю проверку Зато возникли еще вопросы. К примеру, как отписать пользователю окно с сообщением что он что-то ввел не верно, в котором предложить вернуться обратно. Стандартная функция такая есть или окно самому писать?
Код: Выделить всё
if (!$userdata['session_logged_in']) {
message_die(GENERAL_MESSAGE, 'Access denied!');
}
-
- phpBB 1.4.4
- Сообщения: 160
- Стаж: 16 лет 6 месяцев
Всем здравствуйте. Извините, что поднимаю такую старую тему, но вопрос актуален. Итак, моя задача:
1.Ввести в базу данных в таблицу phpbb_users поле user_points, которое ни с чем не связано, просто от руки туда вбиваются поинты
2. Вывести в админку используя МОД admin_users_list (http://www.phpbbguru.net/mods/?download&id=2) ЭТО самое дополнитильное поле user_points с возможностью его (этого поля) редакитрования
3. Создать процедуру сохранения измененного поля user_points
4. Проверить правильность исполнения процедуры
Руководствуясь ЭТОЙ темой реализовал почти все до конца, т.е. поле в аминке есть, кнопка сохранить есть, как записывать в базу знаю, но:
не получается считать данные из НОВОГО поля user_points что в admin_user_list_body.tpl обозвано 'points'
Справка: МОД admin_users_list состоит из admin_users_list.php в forum/admin и admin_users_list_body.tpl в forum/templayts/subsilver/admin/(тут-то и прописаны имена полей для вывода информации). Там я присвоил полю user_points следующие реквизиты:
в файл admin_users_list.php для получения user_points из базы данных и вызова функции сохранения добавил:
Соотвественно содержимое файла save_point.php:
В принципе все вызывается и никаких ошибок не выскакивает, но поинты у выбранного пользователя обнуляются, т.е. $var=0, т.е. вывод: - данные из admin_users_list_body.tpl не считываются. Вопрос: объясните пожалуйста мне дураку что тут неправильно, стою по идее в 1-ом шаге от решения, но что-то не решается. Спасибо
P.S. Хотя умом понимаю, что если все сделать без .tpl в одном .php то проблем не будет, так как там явно можно будет присвоить имя полю для post и все, но хотелось бы понять принцип работы с .tpl
Еще раз заранее спасибо всем, кто откликнется
Т.е. еще раз спрошу попонятнее, извините:
КАК СЧИТАТЬ РЕДАКТИРУЕМЫЕ ДАННЫЕ ИЗ .TPL???
1.Ввести в базу данных в таблицу phpbb_users поле user_points, которое ни с чем не связано, просто от руки туда вбиваются поинты
2. Вывести в админку используя МОД admin_users_list (http://www.phpbbguru.net/mods/?download&id=2) ЭТО самое дополнитильное поле user_points с возможностью его (этого поля) редакитрования
3. Создать процедуру сохранения измененного поля user_points
4. Проверить правильность исполнения процедуры
Руководствуясь ЭТОЙ темой реализовал почти все до конца, т.е. поле в аминке есть, кнопка сохранить есть, как записывать в базу знаю, но:
не получается считать данные из НОВОГО поля user_points что в admin_user_list_body.tpl обозвано 'points'
Справка: МОД admin_users_list состоит из admin_users_list.php в forum/admin и admin_users_list_body.tpl в forum/templayts/subsilver/admin/(тут-то и прописаны имена полей для вывода информации). Там я присвоил полю user_points следующие реквизиты:
Код: Выделить всё
td class="row2">
<input class="post" type="double" name="points" id="points" size="10" maxlength="10" value="{userrow.USER_POINT}" />
</td>
Код: Выделить всё
$sql = "SELECT user_id, username, user_point, user_email, user_regdate, user_lastvisit, user_posts, user_active
.......
.......
'USER_POINT' => $userrow[$i]['user_point'],
......
......
.....
// сохранить
$template->assign_vars(array(
'S_ACTION' => append_sid('save_point.'.$phpEx) )
);
// конец сохранить
Код: Выделить всё
<?php
$var = $HTTP_POST_VARS['points'];
$dbms = 'скрыто';
$dbhost = 'скрыто';
$dbname = 'скрыто';
$dbuser = 'скрыто';
$dbpasswd = 'скрыто';
mysql_connect ($dbhost,$dbuser,$dbpasswd );
mysql_select_db($dbname);
// ... Выполняем сохранение для конкретного пользователя(проверка)
$query="update phpbb_users set user_point='$var' where username='Кто-то'";
mysql_query($query) or die(mysql_error());
print "<b>Данные сохраненны</b>";
?>
В принципе все вызывается и никаких ошибок не выскакивает, но поинты у выбранного пользователя обнуляются, т.е. $var=0, т.е. вывод: - данные из admin_users_list_body.tpl не считываются. Вопрос: объясните пожалуйста мне дураку что тут неправильно, стою по идее в 1-ом шаге от решения, но что-то не решается. Спасибо
P.S. Хотя умом понимаю, что если все сделать без .tpl в одном .php то проблем не будет, так как там явно можно будет присвоить имя полю для post и все, но хотелось бы понять принцип работы с .tpl
Еще раз заранее спасибо всем, кто откликнется
Т.е. еще раз спрошу попонятнее, извините:
КАК СЧИТАТЬ РЕДАКТИРУЕМЫЕ ДАННЫЕ ИЗ .TPL???
-
- phpBB 1.4.4
- Сообщения: 160
- Стаж: 16 лет 6 месяцев
Всем спасибо за отзывчивость, очень приятно.
Решил проблему сам, просто убрал из profile_add_body.tpl все что касается YIM (так как кому он нафик нужен?), а в forum/admin/adminuser_edit_body.tpl исправил заголовок нужной строчки на нужный (выделил другим цветом, сделал жирным, курсивным, подчеркнул), а в forum/admin/admin_users.php в строке, что ниже "$sql = "UPDATE " . USERS_TABLE . "" заменил "$yim =" на "$мой_параметр=" и все. Всем удачи.
Решил проблему сам, просто убрал из profile_add_body.tpl все что касается YIM (так как кому он нафик нужен?), а в forum/admin/adminuser_edit_body.tpl исправил заголовок нужной строчки на нужный (выделил другим цветом, сделал жирным, курсивным, подчеркнул), а в forum/admin/admin_users.php в строке, что ниже "$sql = "UPDATE " . USERS_TABLE . "" заменил "$yim =" на "$мой_параметр=" и все. Всем удачи.