Лістинг 6. 25. Сценарій stories.php - інтерфейс авторів для управління своїми статтями
<?php
include "include_fns.php";
session_register("auth_user");
if (!check_auth_user()) {
?>
<FORM ACTION="login.php" METHOD=POST><TABLE BORDER=0>
<TR><TD>Username</TD><TD><INPUT SIZE=16 NAME="username"></TD></TR>
<TR><TD>Password</TD><TD><INPUT SIZE=16 TYPE="PASSWORD"
NAME="password"></TD></TR></TABLE>
<INPUT TYPE=SUBMIT VALUE="Log in"></FORM>
<?php
}
else {
$conn = db_connect();
$w = get_writer_record($auth_user);
print "Welcome ".$w[full_name];
print " (<A HREF=\"logout.php\">Logout</A>)<p>";
$sql = "select * from stories where writer = '$auth_user'
order by created desc";
$result = mysql_query($sql, $conn);
print "Your stories: ";
print mysql_num_rows($result);
print " (<A HREF=\"story.php\">Add new</A>)<br><br>";
if (mysql_num_rows($result)) {
print "<TABLE><TR><TH>Headline</TH><TH>Page</TH>";
print "<TH>Created</TH><TH>Last modified</TH></TR>";
while ($qry = mysql_fetch_array($result)) {
print "<TR><TD>";
print $qry[headline];
print "</TD><TD>";
print $qry[page];
print "</TD><TD>";
print date("M d, H:i" $qry[created]);
print "</TD><TD>";
print date("M d, H:i" $qry[modified]);
print "</TD><TD>";
if ($qry[published])
print "[Published ".date("M d, H:i" $qry[published])."]";
else {
print "[<A HREF=\"story.php?story=".$qry[id]."\">edit</A>] ";
print"[<A HREF=\"delete_story.php?story=".$qry[id]."\">delete</A>]";
print"[<A HREF=\"keywords.php?story=".$qry[id]."\">keywords</A>]";
}
print "</TD></TR>";
}
print "</TABLE>";
}
}
?>
На першому етапі перевіряється, чи виконана аутентифікація користувача. Якщо немає, відображується лише форма вхідної реєстрації. Після входу автора в систему змінної сеансу $auth_user привласнюється значення. Використовувана тут аутентифікація не дуже надійна. У реальній ситуації необхідно забезпечити, аби аутентифікація користувачів виконувалася належним чином.
Форма вхідної реєстрації передає дані сценарію login.php, який порівнює ім'я користувача і пароль з відповідними значеннями бази даних. В разі успішності вхідної реєстрації користувачеві повертається попередня сторінка за допомогою значення $HTTP_REFERER. Це означає, що сценарій реєстрації може викликатися з будь-якої сторінки системи. Потім автор вітається по імені і надається можливість виходу з системи. Це посилання завжди відображується у верхній частині сторінки stories.php, що дозволяє легко вийти з системи у будь-який момент.
$w = get_writer_record($auth_user);
echo "Welcome ".$w[full_name];
echo " (<A HREF=\"logout.php\">Logout</A>)";
Функція get_writer_record() описана в бібліотеці db_fns.php і повертає масив полий таблиці автора на основі переданого імені користувача. Сценарій logout.php просто скидає значення змінної $auth_user.
SQL-запит вибирає всі статті автора, починаючи з доданих останнім часом:
select * from stories where writer = '$auth_user'
order by created desc
Для кожного запису, пов'язаного із статтею, зберігаються мітки часу додавання, модифікації і публікації. Коли додається нова стаття, міткам створення і модифікації привласнюється поточний системний час. Кожне подальша зміна статті викликатиме оновлення лише мітки модифікації.
Вся ця інформація виводиться у вікні статей спочатку за допомогою коду:
echo date("M d, H:i" $qry[created]);
потім:
echo date("M d, H:i" $qry[modified]);
і, нарешті:
if ($qry[published])
echo "[Published ".date("M d, H:i" $qry[published])."]";
else {
echo "[<A HREF=\"story.php?story=".$qry[id]."\">edit</A>]";
echo"[<A HREF=\"delete_story.php?story=".$qry[id]."\"> delete</A> ]";
echo "[<A HREF=\"keywords.php?story=".$qry[id]."\">keywords</A>]";}
Останній фрагмент відображує лише дату публікації, якщо вона має сенс. Інакше виводяться посилання для редагування або видалення статті, а також установки ключових слів пошукового механізму.
Сценарій введення або редагування статті міститься у файлі story.php.
Дата добавления: 2016-04-02; просмотров: 827;