Есть исходный код.
Как переделать код так,что б статью можно было редактировать надав на заголовок статьи,а не на ссылку "ред",как реализовано в коде.
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();
}
?>