Просто рабочий конспект
Чтобы перейти от простой html-странички, отображающей данные, хранящиеся в базе, необходима CMS - content management system. Такая система состоит из ряда web-страниц, доступ к которым ограничен авторизованным юзерам. Интерфейс должен позволять просматривать и изменять хранящуюся в базе информацию, не заботясь о деталях SQL-запросов.
Функционал можно разместить в отдельных в папках.
В каждой папке находится свой index.php, фактически, свой контроллер.
<ul> <li><a href="jokes/">Manage Jokes</a></li>
<li><a href="authors/">Manage Authors</a></li>
<li><a href="categories/">Manage Joke Categories</a></li>
</ul>
Дальше всё по обычной схеме - формы с возвратом в контроллер, где происходит исполнение действий.
Аналогично для любой функциональности.
Если обработка выполняется в основном контроллере, то возврат выполняется с помощью функции:
header('Location: .'); exit();
Если обработка во внешнем модуле/форме, то возврат задаётся параметром action="" формы.
Значение может быть пустым, либо , например, action="delete".
В списке отображаемых данных в конце каждой строки (как вариант) добавляется кнопка с определённой функцией или группой функций (delete/edit/...).
В этом случае, каждая строка данных - как форма.
Для связи с основным контроллером передаваемые данные оформляются через скрытые кнопки:
<ul>
<?php foreach ($authors as $author): ?>
<li>
<form action="" method="post">
<div>
<?php htmlout($author['name']); ?>
<input type="hidden" name="id" value="<?php echo $author['id']; ?>"/>
<input type="submit" name="action" value="Edit"/>
<input type="submit" name="action" value="Delete"/>
</div>
</form>
</li>
<?php endforeach; ?>
</ul>
Если использовать checkbox, то достаточно по одной кнопке действий на всю таблицу.
Формирование отмеченного списка строк несколько хитрее:
<?php if (isset($users)): ?>
<table>
<tr><th>Отметить</th><th>Юзер</th><th>DBSESSIONID</th><th>Дата входа</th></tr>
<form action="?" method="post">
<?php foreach ($users as $user): ?>
<tr valign="top">
<td><input type="checkbox" name="kill[]" id="dbsession<?php $user['id']?>" value="<?php htmlout($user['id']); ?>" /> </td>
<td><?php htmlout($user['name']); ?></td>
<td><input type="text" name="id[]" value="<?php htmlout($user['id']); ?>" disabled /></td>
<td><?php htmlout($user['dt']); ?></td>
</tr>
<?php endforeach; ?>
</table>
<input type="submit" name="askme" value="Подтвердить удаление"/>
<input type="hidden" name="action" value="delete"/>
</form>
<?php endif; ?>
Поскольку количество строк таблицы с данными заранее неизвестно, в качестве значения атрибута name тега <input type="checkbox" ... > задаётся массив, например, kill[] .
В основном контроллере список обрабатывается:
if (isset($_POST['action']) and $_POST['action'] == 'delete' and isset($_POST['kill']) )
{
$list = "'" . join("','", $_POST['kill']) . "'";
$sql = 'delete from sys#locks where dbsessionid in ( ' . $list . ')' ;
$stid = oci_parse($link, $sql);
$result = oci_execute($stid, OCI_DEFAULT);
include 'ctrl_sql_err.php';
oci_commit($link);
header('Location: .');
exit();
}
Последний пример - коннект к Oracle.
Формирование переменного pop-up списка (<id>,<имя автора>) c установкой default -значения.
<?php foreach ($authors as $author): ?>
<option value="<?php htmlout($author['id']); ?>" <?php if ($author['id'] == $authorid) echo ' selected="selected"';?>> <?php htmlout($author['name']); ?> </option>
<?php endforeach; ?>
Где id - скрытое поле. В pop-up листе только name.
Аналогично, для checkbox:
<?php foreach ($categories as $category): ?>
<div><label for="category<?php htmlout($category['id']);?>"> <input type="checkbox" name="categories[]" id="category<?php htmlout($category['id']); ?>"
value="<?php htmlout($category['id']); ?>" <?php if ($category['selected']) echo ' checked="checked"'; ?>/> <?php htmlout($category['name']); ?></label></div>
<?php endforeach; ?>
Гибко и просто!Ярлыки: php oracle connect, simple cms Подпишись на новости PHP по e-mail |
Отправить комментарий