• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Редактирование

ken_ukeng

Ученик
Регистрация
6 Янв 2013
Сообщения
1
Реакции
0
Баллы
0
Редактирование

Есть исходный код.

Как переделать код так,что б статью можно было редактировать надав на заголовок статьи,а не на ссылку "ред",как реализовано в коде.

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();
}
?>
 
это надо делать не здесь. а в файле где эти статьи выводятся.
В этом файле надо убрать кнопку "редактировать"(если не нужна)
и обрамить заголовок таким:
Код:
<a href="путь к приведенному вами файлу.php/?action=updateNews">title</a>
Где title это ваш заголовок.
 
Назад
Сверху