|
|
|
| Здравствуйте дорогие программисты.Я начинающий любитель 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: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 :) но не профессионал | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|