Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Форуми / National / Russian / Тех. поддержка / Запросы документации

Принимаем вопросы от населения

Sergey
#38444 11.11.2013 19:26

http://wm-help.net/my-articles/article/use-post-and-get-in-php.htm Это надо прочитать, это основа, это общие знания.

Теперь будем разбирать ход программы, начнем с части user.edit.php

257 $mskin = cot_tplfile(array('users', 'edit', $usr['maingrp']), 'module');

Обратите внимание на array  это массив возможных частей имен. Имеется своя дилемма подбора, это как раз функция cot_tplfile она находит файл шаблона, будет найден шаблон user.edit.tpl  а мог быть user.edit.название_группы.tpl и другие комбинации. Важно, что получили имя файла шаблона.

теперь переходим дальше, на

$t = new XTemplate($mskin);

этот оператор создает новый экземпляр класса типа шаблон XTemplate

В этом классе есть две главные функции это

$t->parse('MAIN');
$t->out('MAIN');

Первая производит замену {USERS_EDIT_DELETE} на выражение, которое находится в классе t

вторая out, выводит шаблон, после замены, в выходной поток, который своим способом попадает в браузер клиента, читателя

Для того, чтобы поместить в USERS_EDIT_DELETE выражение имеется стандартное назначение:

$t->assign(array(
.....
'USERS_EDIT_DELETE' => ($sys['user_istopadmin']) ? cot_radiobox(0, 'ruserdelete', array(1, 0), array($L['Yes'], $L['No'])) . $delete_pfs : $L['na'],

тут вопрос, этот юзер  $sys['user_istopadmin']) имеет право администрирования? Да, тогда мы создаем форму радиобатон с наименование ruserdelete это создает функция cot_radiobox

обратите внимание, что радиобатон имеет два состояние 1- TRUE и 0 -FALSE, следовательно элемент массива  $_POST, будет ассоциативный элемент  ruserdelete

Клиент получил форму, заполнил форму и нажал

<input type="submit" value="{PHP.L.Update}" class="submit" />

ответ пошел на сервер, надо знать, что еще был сформирован и ответ  в шаблоне:

<form action="{USERS_EDIT_SEND}" method="post" name="useredit"><input type="hidden" name="id" value="{USERS_EDIT_ID}" />

а там

'USERS_EDIT_SEND' => cot_url('users', 'm=edit&a=update&'.cot_xg().'&id='.$urr['user_id']),

где формируются урл с двумя ключами m=edit a=update и ключом идентификатора пользователя id= эти ключи мы можем достать по запросу $_GET там будет массив из элементов: m, a и id.

как форма отправилась опять загрузится модуль user.edit.php. В части common.php обрабатываются общие ключи, строки с 481

$m = cot_import('m', 'G', 'ALP', 24);
$n = cot_import('n', 'G', 'ALP', 24);
$a = cot_import('a', 'G', 'ALP', 24);
$b = cot_import('b', 'G', 'ALP', 24);

нам интересна функция в строке $a = cot_import('a', 'G', 'ALP', 24); она обрабатывает ответ $_GET - 'G',  'a', - это наименование элемента ассоциативного массива из $_GET, 'ALP' - это значит, что символы будут типа  букв цифр и некоторых знаков. Надо знать, что серверная глобальная переменная ${_SERVER['QUERY_STRING'] как раз содержит все эти ключи, т.е. то что мы отмечаем от ? по & так устроен сервер, надо знать вот это http://www.php.su/articles/?cat=vars&page=015 команда Котонти уже позаботилась с правилами работы с этими глобальными.

Опять возвращаемся к user.edit.php строка с 48

if ($a == 'update')
{
	cot_check_xg();

	/* === Hook === */
	foreach (cot_getextplugins('users.edit.update.first') as $pl)
	{
		include $pl;
	}
	/* ===== */

	$ruserdelete = cot_import('ruserdelete','P','BOL');

вот и имя ассоциативно массива $_POST - входное  'P', элемент ruserdelete о котором вы переживали. 'BOL' это как раз тип элемент битная логика: 1 или 0, помните вначале мы его задавали, а сейчас проверяем.

получили $ruserdelete и начинаем обрабатывать если $ruserdelete это 1 или TRUE

	if ($ruserdelete)
	{

		$sql = $db->delete($db_users, "user_id=$id");
		$sql = $db->delete($db_groups_users, "gru_userid=$id");

надо признать, тут могут движок  поломать  через user_id=$id  надо проверять на sql инъекцию (может проверка и есть, а может и нет), но без проверки такое делать не надо, нельзя набранное юзером совать в sql запрос, не при каких вариантах.

Примерно так. - 2 часа жизни из моей шагреневой кожи.

www.cotonti.mobi