Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 06.01.2013, 23:48   #1 (permalink)
ken_ukeng
Новичок
 
Регистрация: 06.01.2013
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Редактирование

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

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

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 ) {
    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($fpLOCK_EX) ) {
      
fwrite$fp$date.'¤'.$title.'¤'.$body.NEW_LINE );
      
flock$fpLOCK_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 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 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($fpLOCK_EX)) {
      foreach ( 
$file as $line fwrite($fp$line);
      
flock($fpLOCK_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 or $number >= $cnt ) {
    
header'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' );
    die();
  }
  
// Удаляем новость
  
unset($file[$number]);
  
// Перезаписываем файл
  
if ( $fp fopen('news.txt''w') ) {
    if ( 
flock($fpLOCK_EX) ) {
      foreach ( 
$file as $line fwrite$fp$line );
      
flock($fpLOCK_UN);
    }
    
fclose($fp);
  }
  
header'Location: '.$_SERVER['PHP_SELF'].'?action=newsList' );
  die();
}
?>
ken_ukeng вне форума   Ответить с цитированием

Старый 06.01.2013, 23:48
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Безусловно схожие по содержанию темы вам должны чем то быть полезны

Редактирование документа в фотошопе
Touchqode - редактирование кодов
Редактирование списка систем при загрузке
Редактирование темы.

Старый 07.01.2013, 17:38   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

это надо делать не здесь. а в файле где эти статьи выводятся.
В этом файле надо убрать кнопку "редактировать"(если не нужна)
и обрамить заголовок таким:
Код:
<a href="путь к приведенному вами файлу.php/?action=updateNews">title</a>
Где title это ваш заголовок.
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:10.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.