Взято с: http://www.pcnext.ru/
Что объединяет все информационные сайты? Что обязательно присутствует на главной странице? Если вы подумали о новостях, то оказались правы! Сегодня мы с вами разберемся как раз в том, как сделать собственную новостную ленту с админкой и защитой на php. Заранее скажу, что дело это совсем не сложное, но и не двухминутное, так что запаситесь всем, что вам нужно (пивом, колой, соком, чипсами…) и вперед! Для начала продумаем структуру новостной ленты. Безусловно, мы будем использовать mysql, а как же без него! В mysql-базе, которую назовем mynews, будут храниться данные. Какие? Cейчас объясню. Разместим в базе mynews таблицу под названием news. А в таблице - вот что:
News_id - MediumInt длина 9 AutoIncrement, это будет primary key.
Ntext - текст новости, тип Text.
Ntitle - заголовок новости, тип varchar, длина 255
Ndate - это дата, varchar, длина 255
Nuser - а это имя автора новости, varchar, длина 255.
Как все это создать? Почитайте предыдущие тексты на этом сайте, там есть вся необходимая информация. А от себя могу посоветовать отличную, очень удобную программу Mysql-Front, в которой все таблицы создаются визуально. Но идем дальше. Теперь разберемся в том, какие скрипты нужно написать. Я предлагаю написать следующие: admin.php, сreatenews.php (этот скрипт и будет создавать новость), tnews.php (будет отображать новость). Можно было написать скрипт и для удаления новостей, но это вы сможете сделать и сами после выполнения упражнения. Итак, начнем. Для начала напишем скрипт createnews.php. В нем пока будет мало понятного, но все станет на свои места после того, как вы посмотрите на листинг admin.php.
Листинг 1. Createnews.php
<?
$server="localhost";
$user="";
$pass="";
$DB="mynews";
$ntitle=$title;
$ntext=$newstext;
$nuser=$user;
$now = date(" H : i : s d - m - Y "); // дата будет выводиться в формате "время, дата"
mysql_connect($server,$user,$pass) or die("Нет коннекта!");
mysql_select_db($DB);
mysql_query("Insert INTO news(ntitle,ntext,ndate,nuser) VALUES('".addslashes($ntitle)."','".addslashes($ntext)."','".addslashes($now)."',
'".addslashes($nuser)."')");
mysql_close();
echo "Новость добавлена!";
?>
'". addslashes ($ ntitle )."' // эта строка нужна для того, чтобы в заголовке правильно отображались кавычки.
Как видите, вместо mysql-даты используется varchar, так проще. Теперь, чтобы все в рассмотренном скрипте встало на свои места, нужно написать админку. Напишем.
Листинг 2. Admin.php
<html>
<head>
<title>Добавление новостей</title>
</head>
<body>
<h3>Добавление новостей</h3>
<form action="createnews.php" method="POST">
Заголовок новости: <input type="text" Size=70 name="title"><br>
Ваше имя: <input type="text" Size=50 name"user"><br>
Текст <textarea name="newstext" cols=60 rows=6>
</textarea>
<br><br>
<CENTER>
<input type="Submit" Value="Ok">
<input type="reset" Value=" Очистить ">
</CENTER>
</form>
</body>
</html>
Очевидно, используется простая html форма. Так зачем же создавать php-скрипт? Затем, что мы совершенно не подумали о безопасности. Безопасность админки можно обеспечить, запретив доступ случайным пользователям, не знающим логин и пароль. Злоумышленник сможет узнать пароль только тогда (и не раньше), когда получит доступ к скрипту, т.е. к директории. Измените admin.php следующим образом:
Листинг 3. Модифицированный admin.php
<?
$itog_usr = 'ваш логин';
$itog_pass = 'ваш пароль';
$_GET[$usr];
$_GET[$pass];
if (($usr != '') and ($pass != '')):
{
if (($usr != $itog_usr) or ($pass != $itog_pass)):
{
die("Неверное имя пользователя или пароль");
}
else:
{
echo "Авторизация прошла удачно";
?>
<html>
<head>
<title>Добавление новостей</title>
</head>
<body>
<h3>Добавление новостей</h3>
<form action="createnews.php" method="POST">
Заголовок новости: <input type="text" Size=70 name="title"><br>
Ваше имя: <input type="text" Size=50 name"user"><br>
Текст <textarea name="newstext" cols=60 rows=6>
</textarea>
<br><br>
<CENTER>
<input type="Submit" Value="Ok">
<input type="reset" Value=" Очистить ">
</CENTER>
</form>
</body>
</html>
<?
}
endif;
}
else:
{
echo "<form method='post'>
Login:<br>
<input type='text' name='usr' value=''><br>
Password:<br>
<input type='password' name='pass' value=''><br>
<input type='submit' value='LogIN'>
</form>";
}
endif;
?>
Давайте разберемся в написанном скрипте. В самом начале двум переменным присваиваются текущие логин и пароль, затем осуществляется проверка введенных. Если введенные данные содержат " (пусто), или не равны тем, что хранятся в переменных, выводится печальная для ][акера надпись "Неверное имя пользователя или пароль". В противном случае выводится "Авторизация прошла успешно" и идет html -код. В самом конце описана форма ввода.
С админкой все. Теперь переходим к скрипту, который будет выводить новостную ленту.
Листинг 4. tnews.php:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<?
$server="localhost";
$user="darkmaster";
$pass="";
$DB="mynews";
mysql_connect($server,$user,$pass) or die("Нет коннекта!");
mysql_select_db($DB);
$request= "SELECT ntext, ntitle, ndate, nuser FROM news ORDER BY news_id DESC LIMIT 15";
$result=mysql_query($request);
while($row=mysql_fetch_array($result)){
echo "<table align=center width=98% border=0 cellpadding=3 cellspacing=1 bgcolor=#FDFEFF>";
echo "<tr><td bgcolor=#FFFFFF>".$row['ntitle']." Дата ".$row['ndate']." Aiaaaee ".$row['nuser']."</td></tr>";
echo "<tr><td bgcolor=#FFFFFF>".$row['ntext']."</td></tr>";
echo "<tr><td bgcolor=#F4F4F4> </td></tr></table><br>";
}
?>
На что здесь следует обратить внимание? Во-первых, на запрос
$request = "SELECT ntext , ntitle , ndate , nuser FROM news ORDER BY ndate DESC LIMIT 15";
Здесь написано вот что: выводить новости, отсортированные по дате, причем на странице показывать только 15 первых новостей. Функция mysql _ fetch _ array ($ result ) возвращает массив, который записывается в переменную $ row . Для тех, кто не знает, что такое & nbsp, говорю: это свободное пространство. Все, что осталось сделать - вставить tnews в некоторую готовую страничку, например вот так:
include("./tnews.php")
Вот и все, что я хотел рассказать.