ken_ukeng |
06.01.2013 23:48 |
Редактирование
Есть исходный код.
Как переделать код так,что б статью можно было редактировать надав на заголовок статьи,а не на ссылку "ред",как реализовано в коде.
PHP код:
<?php define( 'LOGIN', 'mylogin' ); define( 'PASSWORD', 'mypassword' ); define( 'NEW_LINE', "\r\n" ); // для Windows заменить на "\r\n"
session_start(); $actions = array( 'loginForm', 'login', 'newsList', 'addNewsForm', 'addNews', 'editNewsForm', 'updateNews', 'deleteNews' ); if ( isset( $_GET['action'] ) ) { $action = $_GET['action']; } else { if ( isset( $_SESSION['auth'] ) ) $action = 'newsList'; else $action = 'loginForm'; } if ( !in_array( $action, $actions ) ) $action = 'loginForm'; switch( $action ) { case 'loginForm': // форма для авторизации loginForm(); break; case 'login': // проверка логина и пароля login(); break; case 'newsList': // список новостей newsList(); break; case 'addNewsForm': // форма для добавления новости addNewsForm(); break; case 'addNews': // добавить новость addNews(); break; case 'editNewsForm': // форма для редактирования новости editNewsForm(); break; case 'updateNews': // обновить новость updateNews(); break; case 'deleteNews': // удалить новость deleteNews(); break; }
function loginForm() { echo '<h1>Вход</h1>'; echo '<form action="'.$_SERVER['PHP_SELF'].'?action=login" method="post">'."\n"; echo 'Имя: <input type="text" name="name" value="" /><br/>'."\n"; echo 'Имя: <input type="password" name="pass" value="" /><br/>'."\n"; echo '<input type="submit" name="submit" value="Отправить" />'."\n"; echo '</form>'."\n"; }
function login() { if ( !isset( $_POST['name'] ) or !isset( $_POST['name'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } if ( $_POST['name'] == LOGIN and $_POST['pass'] == PASSWORD ) { $_SESSION['auth'] = true; } header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); }
function newsList() { // Доступ только для авторизованного пользователя if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } echo '<h1>Новости</h1>'; echo '<p><a href="'.$_SERVER['PHP_SELF'].'?action=addNewsForm">Добавить</a></p>'."\n"; $file = file( 'news.txt' ); $total = count( $file ); if ( $total > 0 ) { echo '<table border="1">'."\n"; echo '<tr><th>N</th><th>Дата</th><th>Заголовок</th><th>Ред.</th><th>Удл.</th></tr>'."\n"; for ( $i = $total-1; $i >= 0; $i-- ) { $tmp = explode('¤', $file[$i] ); echo '<tr><td>'.$i.'</td><td>'.$tmp[0].'</td><td>'.$tmp[1].'</td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editNewsForm&number='.$i.'">Ред.</a></td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=deleteNews&number='.$i.'">Удл.</a></td></tr>'."\n"; } echo '</table>'."\n"; } else { echo '<p>Нет новостей</p>'."\n"; } }
function addNewsForm() { if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } echo '<h1>Добавить новость</h1>'; echo '<form action="'.$_SERVER['PHP_SELF'].'?action=addNews" method="post">'."\n"; echo 'Заголовок: <input type="text" name="title" value="" /><br/>'."\n"; echo 'Новость:<br/> <textarea name="body"></textarea><br/>'."\n"; echo '<input type="submit" name="submit" value="Отправить" />'."\n"; echo '</form>'."\n"; }
function addNews() { if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } if ( empty( $_POST['title'] ) or empty( $_POST['body'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $date = date('d:m:Y'); $title = trim( $_POST['title'] ); $body = trim( $_POST['body'] ); // Когда из поля textarea передаются данные, содержащие // перевод строки, то они передаются в виде CRLF // CR - возврат каретки, LF - перевод строки; // Поскольку мы записываем новости в файл, где одна // новость - одна строка, то нам надо избавиться от // перевода строки. При редактировании новости произведем // обратную замену. $body = str_replace("\r\n", '_CRLF_', $body); // Добавляем новость if ( $fp = fopen('news.txt', 'a') ) { // Ставим на файл исключительную блокировку if ( flock($fp, LOCK_EX) ) { fwrite( $fp, $date.'¤'.$title.'¤'.$body.NEW_LINE ); flock( $fp, LOCK_UN ); } fclose( $fp ); } header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); }
function editNewsForm() { if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } if ( !isset( $_GET['number'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $number = (int)$_GET['number']; // Получаем из файла news.txt новость для редактирования $file = file( 'news.txt' ); $cnt = count( $file ); if ( $number < 0 or $number >= $cnt ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $news = explode( '¤', $file[$number] ); $news[2] = trim($news[2]); $news[2] = str_replace( '_CRLF_', "\r\n", $news[2] ); echo '<h1>Редактировать новость</h1>'; echo '<form action="'.$_SERVER['PHP_SELF'].'?action=updateNews&number='.$number.'" method="post">'."\n"; echo 'Заголовок: <input type="text" name="title" value="'.$news[1].'" /><br/>'."\n"; echo 'Новость:<br/> <textarea name="body">'.$news[2].'</textarea><br/>'."\n"; echo '<input type="submit" name="submit" value="Отправить" />'."\n"; echo '</form>'."\n"; }
function updateNews() { if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } if ( !isset( $_GET['number'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } if ( empty( $_POST['title'] ) or empty( $_POST['body'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $number = (int)$_GET['number']; // Получаем из файла news.txt новость для редактирования $file = file( 'news.txt' ); $cnt = count( $file ); if ( $number < 0 or $number >= $cnt ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $title = trim( $_POST['title'] ); $body = trim( $_POST['body'] ); $body = str_replace( "\r\n", '_CRLF_', $body ); $tmp = explode( '¤', $file[$number] ); $file[$number] = $tmp[0].'¤'.$title.'¤'.$body.NEW_LINE; // Перезаписываем файл if ( $fp = fopen('news.txt', 'w') ) { if (flock($fp, LOCK_EX)) { foreach ( $file as $line ) fwrite($fp, $line); flock($fp, LOCK_UN); } fclose($fp); } header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); }
function deleteNews() { if ( !isset( $_SESSION['auth'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } if ( !isset( $_GET['number'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } $number = (int)$_GET['number']; // Получаем из файла news.txt новость для удаления $file = file( 'news.txt' ); $cnt = count( $file ); if ( $number < 0 or $number >= $cnt ) { header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } // Удаляем новость unset($file[$number]); // Перезаписываем файл if ( $fp = fopen('news.txt', 'w') ) { if ( flock($fp, LOCK_EX) ) { foreach ( $file as $line ) fwrite( $fp, $line ); flock($fp, LOCK_UN); } fclose($fp); } header( 'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' ); die(); } ?>
|