powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Вывод ролей пользователя
4 сообщений из 4, страница 1 из 1
(PHP) Вывод ролей пользователя
    #38171730
dnbdrive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Возник вопрос по правильности вывода существующих полномочий у определенной роли.
Есть несколько таблиц:
1) roles - список существующих ролей в системе
2) permissions - список существующих полномочий в системе
3) role_perm - список соответствий id_role & id_perm (роль-полномочия)


Действие:
Получаем информацию о роли с целью ее редактирования (т.е. выводим эти данные в input и select, с которым и есть проблема)

как я это сделал:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
if (isset($_GET["id"]))	{
	$id_role = $_GET["id"];
	$db->query("SELECT role_id, role_name, role_desc FROM `roles` WHERE role_id =$id_role");
	if ($row = $db->get_row()) {
		//print_r( $row );
		if (empty($_POST))	{
			echo'<div id="content">
			<div align="center" style="width:100%">
				<form id="addroleform" method="post" action="" novalidate autocomplete="off">
					<table width="50%" cellspacing="0" class="border" style="margin:10px; background-color: #fff;">
						<tbody>
							<tr>
								<th valign="middle" colspan="2" style="border-bottom: 1px solid #CDCDCD;"><h2>Редактирование роли (id '.$row['role_id'].')</h2></th>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="rolename">Внутреннее имя:</label></th>
								<td class="ta_c">
									<input type="text" value="'.$row['role_name'].'" name="rolename" id="rolename" class="itext" style="width:400px;" >
								</td>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="roledesc">Описание:</label></th>
								<td valign="middle" class="ta_c">
									<input type="text" value="'.$row['role_desc'].'" name="roledesc" id="roledesc" class="itext" style="width:400px;">
								</td>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="userpass">Полномочия:</label></th>
								<td valign="middle" class="ta_c">
								<select data-placeholder="Укажите полномочия" name="roleperm[]" style="width:412px;" multiple class="chzn-select"> 
										';
							///...
							$db->query("SELECT `perm_id`, `perm_full_desc` FROM `permissions` ");
							while ($row3 = $db->get_row()) {
								echo "<option  value=\"". $row3['perm_id'] ."\">". $row3['perm_full_desc'] ."</option>";
							}
							
							///...
							echo '	</select>
								</td>
							</tr>
							<tr>
								<td valign="middle" colspan="2" style="padding:10px;border-top: 1px solid #CDCDCD;" class="ta_r">';

							echo '	<input class="ibutton" type="submit" value="Добавить роль">
								</td>
							</tr>
						</tbody>
					</table>
				</form>
			</div>
		</div>
		<script type="text/javascript"> $(".chzn-select").chosen();$(".chzn-select-deselect").chosen({allow_single_deselect:true}); </script>';
	...



В чем проблема?

Необходимо, чтобы в селекте были выбраны те полномочия, которые принадлежат определенной роли, т.е.:
при выводе в html я видел это:

Код: html
1.
2.
3.
4.
5.
6.
7.
<select  name="roleperm[]" style="width:412px;" multiple >
     <option  value="1">Можно делать все</option>
     <option [ЭТО]selected[/ЭТО] value="2">Можно делать заявки</option>
     <option  value="3">Можно редактировать заявки</option>
     <option  value="4">Можно удалять заявки</option>
     <option [ЭТО]selected[/ЭТО] value="4">Можно выводить статистику заявок</option>
</select>



как это сделать, ума не приложу, ибо я еще новичок.
Help..
...
Рейтинг: 0 / 0
(PHP) Вывод ролей пользователя
    #38173148
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dnbdrive,

используйте шаблонизатор, Ваш код читать невозмозжно
...
Рейтинг: 0 / 0
(PHP) Вывод ролей пользователя
    #38173680
dnbdrive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artasdnbdrive,

используйте шаблонизатор, Ваш код читать не возможно

Это в планах, но хотелось бы решить первостепенные задачи. Тем более для этой части сайта шаблонизатор будет немного лишним,
ибо это админка.

Упрощу код для удобства чтения:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if (isset($_GET["id"]))	{
	$id_role = $_GET["id"];
	$db->query("SELECT role_id, role_name, role_desc FROM `roles` WHERE role_id =$id_role");
	if ($row = $db->get_row()) {
		//print_r( $row );
		if (empty($_POST))	{
			echo'
			id роли '.$row['role_id'].')<br>
			имя роли '.$row['role_name'].'<br>
			описание роли '.$row['role_desc'].'<br>
			Полномочия роли <select data-placeholder="Укажите полномочия" name="roleperm[]" style="width:412px;" multiple class="chzn-select"> ';
			// Вот тут проблема
			$db->query("SELECT `perm_id`, `perm_full_desc` FROM `permissions` ");
			while ($row3 = $db->get_row()) {
				echo "<option  value=\"". $row3['perm_id'] ."\">". $row3['perm_full_desc'] ."</option>";
			}
			// Вот тут проблема (end) ...
			echo '	</select>';
			echo '	<input class="ibutton" type="submit" value="Добавить роль">';
	// и так далее ...



то, что необходимо видеть на выходе :

Код: html
1.
2.
3.
4.
5.
6.
7.
<select  name="roleperm[]" style="width:412px;" multiple >
     <option  value="1">Можно делать все</option>
     <option [ЭТО]selected[/ЭТО] value="2">Можно делать заявки</option>
     <option  value="3">Можно редактировать заявки</option>
     <option  value="4">Можно удалять заявки</option>
     <option [ЭТО]selected[/ЭТО] value="4">Можно выводить статистику заявок</option>
</select>
...
Рейтинг: 0 / 0
(PHP) Вывод ролей пользователя
    #38173895
dnbdrive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже я решил проблему.
Не знаю, правильно ли я все сделал, но таким способом все работает.
Буду рад, если у вас будут замечания.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
if (isset($_GET["id"]))	{
	// Проверяем существование записи в БД при помощи специальной функции
	check($_GET["id"], "role");
	// Запрос на инфу о роли 
	$db->query("SELECT role_id, role_name, role_desc FROM `roles` WHERE role_id =". $db->safesql($_GET["id"]) ."");
	// Получаю результат
	if ($row = $db->get_row()) {
		if (empty($_POST))	{
			// Выводим основную таблицу
			echo'<div id="content">
			<div align="center" style="width:100%">
				<form id="addroleform" method="post" action="" novalidate autocomplete="off">
					<table width="50%" cellspacing="0" class="border" style="margin:10px; background-color: #fff;">
						<tbody>
							<tr>
								<th valign="middle" colspan="2" style="border-bottom: 1px solid #CDCDCD;"><h2>Редактирование роли (id '.$row['role_id'].')</h2></th>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="rolename">Внутреннее имя:</label></th>
								<td class="ta_c">
									<input type="text" value="'.$row['role_name'].'" name="rolename" id="rolename" class="itext" style="width:400px;" >
								</td>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="roledesc">Описание:</label></th>
								<td valign="middle" class="ta_c">
									<input type="text" value="'.$row['role_desc'].'" name="roledesc" id="roledesc" class="itext" style="width:400px;">
								</td>
							</tr>
							<tr>
								<th valign="middle" class="ta_r" style="width: 200px;"><label for="userpass">Полномочия:</label></th>
								<td valign="middle" class="ta_c">
									<select data-placeholder="Укажите полномочия" name="roleperm[]" style="width:412px;" multiple class="chzn-select"> ';
			// запрос на список принадлежащих этой роли полномочий по ID роли 
			$userperm = PrivilegedUser::get_userperm($db->safesql($_GET["id"]));
			// запрос на список всех полномочий
			$db->query( "SELECT * FROM `permissions`" );
			// получаем результат всех полномочий
			while ($ro = $db->get_row()) { 
				// начинаю вывод первой части опции
				echo "<option value=\"". $ro['perm_id'] ."\"";
				// получаю список принадлежащих этой роли полномочий
				foreach ( $userperm as $key => $value ){
					// Если ИД полномочия равно ИД включенного полномочия, то выводим "СЕЛЕКТ"
					if (isset($value['perm_id']) and $value['perm_id'] == $ro['perm_id']): echo "selected"; endif;
				}
				// заканчиваю вывод опции
				echo ">". $ro['perm_full_desc'] ."</option>";
			}
			// Продолжаю вывод контента
			echo '					</select>
								</td>
							</tr>
							<tr>
								<td valign="middle" colspan="2" style="padding:10px;border-top: 1px solid #CDCDCD;" class="ta_r">
									<input class="ibutton" type="submit" value="Добавить роль">
								</td>
							</tr>
						</tbody>
					</table>
				</form>
			</div>
		</div>
		<script type="text/javascript"> $(".chzn-select").chosen();$(".chzn-select-deselect").chosen({allow_single_deselect:true}); </script>';
		} // Ну а дальше уже не интересно..



Результат во вложении.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Вывод ролей пользователя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]