Простой сайт с нуля на php и mysql #2 - добавление и редактирование материала
Добавил: WorldPad, 2013-01-26 13:16:18. Просмотров: 1351. Категория: Серия простой сайт с нуля на php и mysql

Продолжаю серию по написанию простого сайта с нуля на php и mysql и теперь мы рассмотрим написание модуля добавления и редактирования уже имеющегося материала на вашем сайте. И так за основу я взял урок "Простой сайт с нуля на php и mysql". Приступим к практике)).
Немного переписав основной программный код сайта от первого урока я приступаю к написанию модуля.
Первым делом нужно добавить ссылку в шаблон которая будет нас переводить на страницу с формой добавления материала.
Предложение "Тут к примеру меню" меняю на ссылку "<a href='/?page=addnews'>добавить материал</a>".
Затем в файле index.php в месте вывода материалов:
$query = mysql_query( "SELECT * FROM post" );
while( $row = mysql_fetch_assoc($query) ){
echo "<tr><td>".$row['title']."</td></tr>
<tr><td>".$row['text']."</td></tr>
<tr><td height="20"></td></tr>" ;
}
?>
Нужно изменить код так чтобы все материалы показывались на главной странице, а на странице /?page=addnews показывалась наша форма.
Для этого делает используем условие if else так:
$page = $_GET['page'];
if ( !$page ){ // Если страница главная выводим наш материал
$query = mysql_query( "SELECT * FROM post" );
while( $row = mysql_fetch_assoc($query) ){
echo "<tr><td>".$row['title']."</td></tr>
<tr><td>".$row['text']."</td></tr>
<tr><td height="20"></td></tr>" ;
}
} elseif ( $page == 'addnews' ) {
include_once "mod/addnews.php" ; // Подключаем форму добавления материала
}
?>
Создадим файл с формой добавления addnews.php и поместим его в предварительно созданую папку mod.
В файле пропиши саму форму:
<tr>
<td>Название:</td><td><input type="text" name="name" value="" size="60" /></td>
</tr>
<tr>
<td>Дата:</td><td><input type="text" name="date" value="" size="30" /></td>
</tr>
<tr>
<td>Автор:</td><td><input type="text" name="author" value="" size="30" /></td>
</tr>
<tr>
<td>Текст:</td><td><textarea rows="10" cols="50"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Сохранить" /></td>
</tr>
</form>
Теперь пропишим выше формы, код обработчик который будет получать данные методом POST и после их проверки занесём в базу данных.
if( isset( $_POST['submit'] ) ){ // Проверка что форма отправлена
if( empty( $_POST['name'] ) || empty( $_POST['author'] ) || empty( $_POST['text'] ) ){
// Если поля не заполнены показываем ошибку
echo '<p style="color:red;">Все поля обязательны к заполнению.</p>';
}else{
$name = mysql_real_escape_string( $_POST['name'] );
$author = mysql_real_escape_string( $_POST['author'] );
$text = mysql_real_escape_string( $_POST['text'] );
// заносим данные в базу данных
if( mysql_query( "INSERT INTO `post` (`id`, `title`, `text`, `user`) VALUES (NULL, '{$name}', '{$text}', '{$author}');" ) ){
echo '<p style="color:green;">Материал добавлен!</p>';
}
}
}
?>
Это точно касается добавления материала на сайт, но и форма редактирования не особо отличается.
Ссылка на редактирование материала будет к примеру /?page=editnews и в качестве параметра показывающий который именно материал нам нужно редактировать будем передавать id материала. И снова открываем файл index.php и смотрим код вывода материала который мы не так давно правили.
В него нам нужно всего лишь добавить ссылку на редактирование.
$page = $_GET['page'];
if ( !$page ){ // Если страница главная выводим наш материал
$query = mysql_query( "SELECT * FROM post" );
while( $row = mysql_fetch_assoc($query) ){
echo "<tr><td>".$row['title']."</td></tr>
<tr><td>".$row['text']."</td></tr>
<tr><td height="20"><a href='/?page=editnews&idnews=".$row['id']."'>EDIT</a></td></tr>" ;
}
} elseif ( $page == 'addnews' ) {
include_once "mod/addnews.php" ; // Подключаем форму добавления материала
} elseif ( $page == 'editnews' ) {
include_once "mod/editnews.php" ; // Подключаем форму добавления материала
}
?>
И так ссылка на редактирование будет/?page=editnews&idnews=1, /?page=editnews&idnews=2, /?page=editnews&idnews=3 и так далее.
Форма же редактирования не очень отличается от формы добавления. Только в форме редактирования нужно делать запрос данных из базы перед выводом формы.
<tr>
<td>Название:</td><td><input type="text" name="name" value="<?=$mysql['title'];?>" size="60" /></td>
</tr>
<tr>
<td>Автор:</td><td><input type="text" name="author" value="<?=$mysql['user'];?>" size="30" /></td>
</tr>
<tr>
<td>Текст:</td><td><textarea name="text" rows="10" cols="50"><?=$mysql['text'];?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Сохранить" /></td>
</tr>
</form>
И код обработчик
$idnews = intval( $_GET['idnews'] );
if( isset( $_POST['submit'] ) ){ // Проверка что форма отправлена
if( empty( $_POST['name'] ) || empty( $_POST['author'] ) || empty( $_POST['text'] ) ){
// Если поля не заполнены показываем ошибку
echo '<p style="color:red;">Все поля обязательны к заполнению.</p>';
}else{
$name = mysql_real_escape_string( $_POST['name'] );
$author = mysql_real_escape_string( $_POST['author'] );
$text = mysql_real_escape_string( $_POST['text'] );
// заносим данные в базу данных
if( mysql_query( "UPDATE `post` SET `title` = '{$name}', `text` = '{$text}', `user` = '{$author}' WHERE `id` = '{$idnews}';" ) ){
echo '<p style="color:green;">Материал успешно отредактирован!</p>';
}
}
}
$mysql = mysql_fetch_assoc( mysql_query( "SELECT * FROM `post` WHERE `id` = '{$idnews}'" ) );
?>
Вот как видите реализовать добавление материалом и их редактирование на сайте не сложно. Ещё хотелось бы посоветовать добавить на ваш Простой сайт с нуля на php и mysql модуль регистрации на php.
Так же вы можете прикрутить постраничную навигацию по материалам из этого урока.
Надеюсь информация была вам полезна. Дерзайте товарищи!
Исходники материала [attachment=10:www.rar].
SQL база данных:
`id` int(255) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`text` text CHARACTER SET utf8 NOT NULL,
`user` varchar(10) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
INSERT INTO `post` (`id`, `title`, `text`, `user`) VALUES
(1, 'Первый пост', 'Текст первого поста', '1'),
(2, 'Первый пост', 'Текст второго поста', '1'),
(3, 'Первый пост', 'Текст третьего поста', '1');
Статья по просьбе yura200676, Простой сайт с нуля на php и mysql #2 - добавление и редактирование материала подготовлена для пользователей сайта Arts-UP.ru