Создание модуля новостей с помощью PHP и MySQL

от автора

В этом уроке мы будем рассматривать простой способ реализовать новости на вашем сайте, используя только 3 различных сценария PHP.

Давайте начнем с продумывания того, что именно мы должны иметь в модуле новостей. Очевидно, нам понадобится скрипт для извлечения новостей и вывода их на главной странице. Нам также понадобится скрипт, для возможности добавления новостей, и, наконец, еще один, чтобы редактировать или удалять новости.

1.1 Создание MySQL таблиц

Начнем мы с создания необходимых таблиц в БД для новостей. Каждая новость будет включать в себя заголовок, описание, имя автора, e-mail автора, дату и время, а так же уникальный идентификационный номер, чтобы идентифицировать каждую новость. Теперь мы готовы создать таблицы, используя следующий код:

CREATE TABLE news (    id smallint(5) unsigned NOT NULL auto_increment,    headline text NOT NULL,    story text NOT NULL,    name varchar(255),    email varchar(255),    timestamp datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,    PRIMARY KEY (id) );  

Таблицы созданы, теперь мы можем перейти к реальному кодингу.

2.1 Добавление новости в базу данных: Создание формы

Теперь вы можете запустить редактор кода и создать новую страницу PHP. Страница должна быть пустой, так что давайте заполним ее. Мы знаем, что нужна будет нужна форма для сбора данных, и поле для заполнения каждого столбца. Вот то, что я придумал:

<form name="form1" method="post" action="<? echo $PHP_SELF; ?>">   <table width="50%" border="0" cellspacing="0" cellpadding="0">     <tr>       <td width="50%">Name</td>       <td><input name="name" type="text" id="name"></td>     </tr>     <tr>       <td>Email</td>       <td><input name="email" type="text" id="email"></td>     </tr>     <tr>       <td> </td>       <td> </td>     </tr>     <tr>       <td>Headline</td>       <td><input name="headline" type="text" id="headline"></td>     </tr>     <tr>       <td>News Story</td>       <td><textarea name="story" id="story"></textarea></td>     </tr>     <tr>       <td colspan="2"><div align="center">           <input name="hiddenField" type="hidden" value="add_n">           <input name="add" type="submit" id="add" value="Submit">         </div></td>     </tr>   </table>   </form>  

Теперь сохраните это как add.php и загрузите его в вашем браузере. Вы должны увидеть все поля, но если вы нажмете добавить, ничего не происходит. Это потому, что не какой код не выполняет сценарий, чтобы использовать информацию, так что это просто перезагрузка формы. Скрытое поле в форме очень важно, и мы будем рассматривать это в следующем шаге. Вы, возможно, заметили, что переменная $PHP_SELF, все это делает, что-бы, когда вы нажмете добавить, будет перезагрузка страницы с текущей информацией. Теперь давайте начнем кодирование.

2.2 Добавление новости в базу данных: Добавление новости

Теперь мы можем на самом деле начать кодить. Во-первых, мы должны создать сценарий который что-то делает, когда форма была отправлена. Помните, скрытое поле? Это где он вступает в игру. Мы можем использовать функцию isset(), чтобы проверить, было ли для скрытой переменной поле установлено или нет, и если да, то запустить скрипт. Таким образом, мы напишем следующее:

<? if(isset($add_n){     //Run the script }else{     //Load the form } ?>  

Теперь для фактического сценария, мы создадим подключение к базе данных:

 $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } 

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

$query = "INSERT INTO news(name, email, headline, story, timestamp)VALUES('$name', '$email', '$headline', '$story', NOW())"; $result = @mysql_query($query); if(!$result){    echo('Error adding news: ' . $mysql_error());    exit(); }else{ mysql_close($link); echo('Success!<br><a href="add.php">Click here</a> to add more news.<br><a href="edit.php">Click here</a> to edit news.<br><a href="../index.php">Click here</a> to return to the main page.'); }  

Теперь это создаст новую строку в новостях. Теперь мы можем посмотреть на окончательный скрипт.

2.3 Добавление новости в базу данных: Финал

Вот так, должен выглядеть ваш add.php:

<html> <head> <title>Add News</title> <meta http-equiv="Content-Type" content="text/html; charset="iso"-8859-1"> </head>  <body> <? if(isset($add_n)){    $link = @mysql_connect(localhost, username, password);    if(!$link){       echo('Error connecting to the database: ' . $mysql_error());       exit();    }    $db = @mysql_selectdb('mydatabase');    if(!$db){       echo('Error selecting database: ' . $mysql_error());       exit();    }    $query = "INSERT INTO news(name, email, headline, story, timestamp)VALUES('$name', '$email', '$headline', '$story', NOW())";    $result = @mysql_query($query);    if(!$result){       echo('Error adding news: ' . $mysql_error());       exit();    }else{    mysql_close($link);    echo('Success!<br><a href="add.php">Click here</a> to add more news.<br><a href="edit.php">Click here</a> to edit news.<br><a href="../index.php">Click here</a> to return to the main page.');    } }else{ ?> <form name="form1" method="post" action="<? echo $PHP_SELF; ?>">   <table width="50%" border="0" cellspacing="0" cellpadding="0">     <tr>       <td width="50%">Name</td>       <td><input name="name" type="text" id="name"></td>     </tr>     <tr>       <td>Email</td>       <td><input name="email" type="text" id="email"></td>     </tr>     <tr>       <td> </td>       <td> </td>     </tr>     <tr>       <td>Headline</td>       <td><input name="headline" type="text" id="headline"></td>     </tr>     <tr>       <td>News Story</td>       <td><textarea name="story" id="story"></textarea></td>     </tr>     <tr>       <td colspan="2"><div align="center">           <input name="hiddenField" type="hidden" value="add_n">           <input name="add" type="submit" id="add" value="Submit">         </div></td>     </tr>   </table>   </form> <? } ?> </body> </html>  

3.1 Редактирование/Удаление новостей: Вывод элементов новостей на странице

Мы должны начать с получения всех новостей из базы данных, а затем создать ссылку редактировать и удалить рядом с каждым пунктом для того, чтобы выполнить требуемое действие. Во-первых, мы должны объявить переменную, чтобы сообщить нам о выполняемым действие. Мы должны сделать основной контур вроде такого:

<? if(!isset($a){    // Print news }elseif($a == 'edit'){    // Perform edit procedures }elseif($a == 'delete'){    // Delete the news item } ?>  

Давайте начнем с вывода всех новостей. Мы должны сделать подключение к базе данных (например, как в add.php) и выбрать все строки. Код будет выглядеть примерно так:

$link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "SELECT id, headline, timestamp FROM news ORDER BY timestamp DESC"; $result = @mysql_query($query); if(!$result){    echo('Error selecting news: ' . $mysql_error());    exit(); } 

Это выбирает все новости из базы данных, теперь мы должны вывести это на странице.

Давайте начнем с вывода всех новостей. Мы должны сделать подключение к базе данных (например, как в add.php) и выбрать все строки. Код будет выглядеть примерно так:

if (mysql_num_rows($result) > 0){     while($row = mysql_fetch_object($result))     {     ?>    <font size="-1"><b><? echo $row->headling; ?></b> <i><? echo formatDate($row->timestamp); ?></i></font>    <br>    <font size="-2"><a href="edit.php?a=edit&id=<? echo $row->id; ?>">edit</a> |    <a href="edit.php?a=delete&id=<? echo $row->id; ?>">delete</a></font>     <? }else{    ?>    <font size="-2">No news in the database</font> <? }    mysql_close($link); ?> 

Этот сценарий принимает результаты запроса, и выводит их на странице, while() создает цикл, пока есть не больше строк для выборки. mysql_fetch_object() принимает данные и обрабатывает их в форме для печати. Оператор -> в основном берет этот столбец из строки, которой в настоящее время. Так что теперь у нас есть все новости, поданных на странице с редактированием и удалением… Начнем редактировать эти новости.

3.2 Редактирование/Удаление новостей: Редактирование новостей

Эта часть сценария будет появляться, когда $a равна ‘Edit’. За $ID были отправлены со ссылкой, так что все мы должны сделать сейчас, это принесет другие данные, которые связанные с этим ID. Вот как это выглядит:

if(!isset($update)){ $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "SELECT name, email, headline, story FROM news WHERE id = '$id'"; $result = @mysql_query($query); if(!$result){    echo('Error selecting news item: ' . $mysql_error());    exit(); } mysql_fetch_object($result); ?> <form name="form1" method="post" action="edit.php?a=edit&id=<? echo($id) ?>&update=1">   <table width="50%" border="0" cellspacing="0" cellpadding="0">     <tr>       <td width="50%">Name</td>       <td><input name="name" type="text" id="name" value="<? echo($row->name) ?>"></td>     </tr>     <tr>       <td>Email</td>       <td><input name="email" type="text" id="email" value="<? echo($row->email) ?>"></td>     </tr>     <tr>       <td> </td>       <td> </td>     </tr>     <tr>       <td>Headline</td>       <td><input name="headline" type="text" id="headline" value="<? echo($row->headline) ?>"></td>     </tr>     <tr>       <td>News Story</td>       <td><textarea name="story" id="story" value="<? echo($row->story) ?>"></textarea></td>     </tr>     <tr>       <td colspan="2"><div align="center">           <input name="hiddenField" type="hidden" value="update">           <input name="add" type="submit" id="add" value="Update">         </div></td>     </tr>   </table>   </form> <? }  

Это выглядит очень похоже со страницей add.php, на этот раз, хотя, мы ставим значения, сохраненные в базе данных в поля для редактирования. Вы также можете заметить, что мы добавили переменную обновления к классу редактирования, это так, мы можем сказать, скрипт, который мы фактически обновляем вместо повторной печати формы. Обновление будет выглядеть следующим образом:

else{ $query = "UPDATE news SET name = '$name, email = '$email', headline = '$headline', story = '$story', timestamp = NOW() WHERE id = '$id'; $result = @mysql_query($query); if(!$result){    echo('Error updating news item: ' . $mysql_error());    exit(); }else{    mysql_close($link);    echo('Update successful!'); } }  

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

3.3 Редактирование/Удаление новостей: Удаление новостей

Удаление новостей даже легче, чем редактирование, или даже создание новости. Функция удаления является одним MySQL запросом, который удаляет новость, где ID равно ID новостей. Вот как это выглядит:

$link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "DELETE FROM news WHERE id = '$id'"; $result = @mysql_query($query); if(!$result){    echo('Error deleteing news item: ' . $mysql_error());    exit(); } mysql_close($link); echo('News item deleted.'); ?>  

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

3.3 Редактирование/Удаление новостей: Финал

Вот, так:

<html> <head> <title>Edit News</title> <meta http-equiv="Content-Type" content="text/html; charset="iso"-8859-1"> </head>  <body> <? if(!isset($a){ $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "SELECT id, headline, timestamp FROM news ORDER BY timestamp DESC"; $result = @mysql_query($query); if(!$result){    echo('Error selecting news: ' . $mysql_error());    exit(); } if (mysql_num_rows($result) > 0){     while($row = mysql_fetch_object($result))     {     ?>    <font size="-1"><b><? echo $row->headling; ?></b> <i><? echo formatDate($row->timestamp); ?></i></font>    <br>    <font size="-2"><a href="edit.php?a=edit&id=<? echo $row->id; ?>">edit</a> |    <a href="edit.php?a=delete&id=<? echo $row->id; ?>">delete</a></font>     <? }else{    ?>    <font size="-2">No news in the database</font> <? }    mysql_close($link); }elseif($a == 'edit'){ if(!isset($update)){ $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "SELECT name, email, headline, story FROM news WHERE id = '$id'"; $result = @mysql_query($query); if(!$result){    echo('Error selecting news item: ' . $mysql_error());    exit(); } mysql_fetch_object($result); ?> <form name="form1" method="post" action="edit.php?a=edit&id=<? echo($id) ?>&update=1">   <table width="50%" border="0" cellspacing="0" cellpadding="0">     <tr>       <td width="50%">Name</td>       <td><input name="name" type="text" id="name" value="<? echo($row->name) ?>"></td>     </tr>     <tr>       <td>Email</td>       <td><input name="email" type="text" id="email" value="<? echo($row->email) ?>"></td>     </tr>     <tr>       <td> </td>       <td> </td>     </tr>     <tr>       <td>Headline</td>       <td><input name="headline" type="text" id="headline" value="<? echo($row->headline) ?>"></td>     </tr>     <tr>       <td>News Story</td>       <td><textarea name="story" id="story" value="<? echo($row->story) ?>"></textarea></td>     </tr>     <tr>       <td colspan="2"><div align="center">           <input name="hiddenField" type="hidden" value="update">           <input name="add" type="submit" id="add" value="Update">         </div></td>     </tr>   </table>   </form> <? }else{ $query = "UPDATE news SET name = '$name, email = '$email', headline = '$headline', story = '$story', timestamp = NOW() WHERE id = '$id'; $result = @mysql_query($query); if(!$result){    echo('Error updating news item: ' . $mysql_error());    exit(); }else{    mysql_close($link);    echo('Update successful!');  } }elseif($a == 'delete'){ $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . $mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . $mysql_error());    exit(); } $query = "DELETE FROM news WHERE id = '$id'"; $result = @mysql_query($query); if(!$result){    echo('Error deleteing news item: ' . $mysql_error());    exit(); } mysql_close($link); echo('News item deleted.'); } ?> </body> </html>  

4.1 Просмотр новости: просмотр новости на Главной странице

Верьте или нет, но вы уже написали этот модуль, когда вы написали редактирование/edit.php. Код в основном такой же без «редактировать | удалить „ссылки. Здесь в полном виде:

<html> <head> <title>View News</title> <meta http-equiv="Content-Type" content="text/html; charset="iso"-8859-1"> </head> <body> <? $link = @mysql_connect(localhost, username, password); if(!$link){    echo('Error connecting to the database: ' . mysql_error());    exit(); } $db = @mysql_selectdb('mydatabase'); if(!$db){    echo('Error selecting database: ' . mysql_error());    exit(); } $query = "SELECT id, headline, timestamp FROM news ORDER BY timestamp DESC"; $result = @mysql_query($query); if(!$result){    echo('Error selecting news: ' . mysql_error());    exit(); } if (mysql_num_rows($result) > 0){     while($row = mysql_fetch_object($result))     {     ?>    <font size="-1"><b><? echo $row->headling; ?></b> <i><? echo formatDate($row->timestamp); ?></i></font>     <?     } }else{    ?>    <font size="-2">No news in the database</font> <? }    mysql_close($link); ?> </body> </html>  

5.1 Итоги

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

Автор: seetch | Михаил Нечипуренко

ссылка на оригинал статьи http://habrahabr.ru/post/271509/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *