Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Редактирование контента
 
 автор: makigo   (06.06.2010 в 19:01)   письмо автору
 
 

Здравствуйте дорогие программисты.Я начинающий любитель php.
И вот у меня такая задача.Есть у меня java меню в html файле, пункты которого надо редактировать.
Написал этот код:
menuedit.php
<?php
$fl 
'./index.htm';
$file file_get_contents($fl);
echo
"<form action='$PHP_SELF' method='POST'>
<textarea rows='100' cols='150' name='menuedit'>
$file</textarea>
<input type='submit' value='save'>"
;
$filemodified $_POST['menuedit'];
file_put_contents($fl,$filemodified);
?>

Первый раз при обращении к menuedit.php оно стирается (но в textarea показывает содержимое файла (так что могу сохранить до редактирования, только без рефреша;)))
Но после первого сохранения все нормально.

Так и должно быть????

  Ответить  
 
 автор: makigo   (06.06.2010 в 19:32)   письмо автору
 
   для: makigo   (06.06.2010 в 19:01)
 

ЭВРИКАААААААААА!!!!

А ведь в первый раз $_POST['menuedit'] пустой и file_put_contents пишет в файл ничегошенки.
Тогда надо писать такую тренарку:
$filemodified = isset($_POST['menuedit'])?$_POST['menuedit']:"$file";

что если $_POST['menuedit'] не задан то пусть пишет то что было, то есть $file.

Таким образом надо так:
<?php
$fl 
'./index.htm';
$file file_get_contents($fl);
echo
"<form action='$PHP_SELF' method='POST'>
<textarea rows='100' cols='150' name='menuedit'>
$file</textarea>
<input type='submit' value='save'>
"
;
$filemodified $_POST['menuedit'];
$filemodified = isset($_POST['menuedit'])?$_POST['menuedit']:"$file";
file_put_contents($fl,$filemodified);
?>

Мне интересно ваше мнение и оценка как профессионалов.
И как еще делать, чтобы после сохранения показывал сохраненную версию а не старую.

  Ответить  
 
 автор: ???   (06.06.2010 в 20:02)
 
   для: makigo   (06.06.2010 в 19:32)
 

<?php 
if (isset($_POST['menuedit'])) в этой $_POST['menuedit']
               
может быть куча лишних обратных слешейесли magic_quotes_gpc != off
.....
echo 
'<form action="" method="POST">
 <textarea rows="100" cols="150" name="menuedit">' 
htmlspecialchars($file) .'</textarea>
'
// или похожее ибо в файле может быть '</textarea>......'

// и зачем перезаписывать файл тогда когда он не изменяется,
/* насчёт того читать-ли из файла если запис(анное/ываемое) 
в него содержимое уже имеется в памяти ,- вопрос более спорный 


> './index.htm'
я-бы совсем не разрешал пользователям перезаписывать чужой index.htm :) но не профессионал

  Ответить  
 
 автор: Ирбис   (07.06.2010 в 10:51)   письмо автору
 
   для: makigo   (06.06.2010 в 19:32)
 

1. Перед выводом в окно браузера текст из файла рекомендую обрабатывать функцией htmlspecialchars(), которая заменяет все специальные html-символы на их безопасное представление. Это обезопасит вас от XSS-инъекций
2. При первом обращении к файлу его содержимое достаточно просто прочесть, а запись не производить, т.к. в ней, в этом случаи, нет необходимости.
3. Нужно предусмотреть ситуацию, когда скрипт завершит свою работу аварийно и, если это произойдет, нужно известить об этом пользователя.
4. Я бы постарался отделить логику от представления. На мой взгляд это повышает читабельность кода.

Я бы реализовал ваш скрипт таким образом:
<?php
//Первое обращение к форме
if(empty($_POST))
{
  
$text file_get_contents("index.htm");
  if(
$text === FALSE) exit("<p>Ошибка при чтении информации из файла index.htm.</p>");
  
$text htmlspecialchars($text);
}
//Обработка формы
else
{
  
$result file_put_contents("index.htm"$_POST["menu"]);
  if(
$result === FALSE) exit("<p>Ошибка при записи информации в файл index.htm.</p>");
  
$text htmlspecialchars($_POST["menu"]);
}
?>
<form method='POST'>
<textarea rows='100' cols='150' name='menu'><?= $text?></textarea>
<input type='submit' value='save'>
</form>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования