[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт
Han
Доброго дня суток всем!

Вот разбираю PHP по самоучителю, прошел тему работа с файлами и каталогами и в конце наткнулся на такой вот скрипт.

PHP
<?php
//файл edit.php
//Если переданно исправленное содержимое его
//открываем файл и перезаписываем его
if(isset($_POST['content']))
{
 
//Открываем файл
 
$fd = @fopen($_POST['filename'], "w");
 
//Если файл не может быть открыт, сообщаем
 //об этом предупреждением в окне файла
 
if(!$fd) exit("Такой файл отсутствует");
 
//Перезаписываем содержимое файла
 
fwrite($fdstripslashes($_POST['content']));
 
//Закрываем файл
 
fclose($fd);
 
//Помещаем в суперглобальный масив $_GET
 //имя файла
 
$_GET['filename'] = $_POST['filename'];
 }
?>

<form action = "edit.php" name=first method="get">
   Имя файла <input type="text" name="filename"
                    value=<?php echo $_GET['filename']; ?>><br>
      <input type="submit" value="Отправить">
</form>

<?php

//Если в строке запроса передано имя файла,
//открываем его для редактирования
if (isset($_GET['filename']))
{
//Открываем файл
$fd = @$fopen($_GET['filename'], "r");
//Если файл не может быть открыт, сообщаем
//об этом предупреждением в окне браузера
if(!$fd) exit("Такой файл отсутвствует");
//Помещаем содержимое файла в переменную $bufer
$bufer frad($fdfilesize($_GET['filename']));
//Закрываем файл
fclose($fd);
?>
  <form action="edit.php" name=second method="post">
     <textarea cols=76 rows=10 name="content">
                  <?php echo $bufer?></textarea><br>
        <input type="hidden" name=filename 
                 value='<?php echo $_GET['filename']; ?>'>
      <input type="submit" name=edit value="Редактировать">
</form>
<?php
}




Все функции мне знакомы и понятны. Не понимаю я работу скрипта в целом!

1.Почему загружается только первая форма а не обе!

2. Как я понимаю загружается первая форма. Пользователь пишет имя файла и если файл существует загружается вторая в которой загружается содержания файла! Пользователь изменяет содержание жмёт кнопку файлы передались методом POST и перезаписались. Я создал файл в каталоге там де лежит скрипт в котором написан какой то текст . Но когда ввожу в первую форму файл не находит!

3. Не понимаю форму записи.

после if (isset($_GET['filename'])) открывается фигурная скобка. Как я понимаю типа всё что будет в этих фигурных скобках делаеться если переменная $_GET['filename'] существует в масиве, но как можно в конце открыть код пхп и тупо поставить закрывающюю фигурную скобку. До этого скрипта я считал , что если после оператора if мы открываем фигурную скобку то она действует исключительно в этом скрипте после закрытия ?> она уже к этому скрипту не имеет никакого отношения!

Плиз объясните как работает скрипт сам догнать не могу!




Спустя 59 минут, 21 секунда (16.07.2009 - 21:30) pas написал(а):
Ну давайте по-порядку:
1. Скрипт загружается впервые (то есть в браузере мы вводим что-то типо http://localhost/edit.php). В данном случае никаким из методов (ни POST ни GET) мы ничего не передаём.
1.1 происходит проверка if(isset($_POST['content'])) - то есть проверяем, существует ли переменная content в массиве POST. если условие истинно, скрипт продолжает выполнятся и выполняются все итерации в фигурных скобках. При запуске скрипта впервые, это условие будет ложным, поэтому блок итераций в фигурных скобках после этого условия не будет выполнен, а просто напечатается форма.
1.2. Далее проверяем условие if (isset($_GET['filename'])). при первом запуске скрипта переменной filename в массиве GET не существует, поэтому блок в {} ниже игнорируется и не выполняется.
2. После первого запуска скрипта мы видим напечатанную форму. вводим имя файла и жмём кнопку "Отправить". При этом опять вызывается наш скрипт edit.php, но уже с существующей переменной $_GET['filename'], равной тому, что было введено в форме.
2.1 $_POST['content'] - у нас не существует пока что, поэтому опять блок ниже не выполняется. Печатается первая форма с введённым параметром.
2.2 Далее (isset($_GET['filename']) - истинно, так как $_GET['filename'] равен тому, что мы ввели, поэтому блок в фигурных скобках ниже выполняется. Открывается указанный файл, получается содержимое и выводится 2-я форма.
2.3 При нажатии в этой форме "Редактировать" Данные отправляются методом POST, то есть в данном случае будет $_POST['content'] - содержимое файла и $_POST['filename '] - название файла.
3. Теперь тк $_POST['content'] у нас существует выполнится блок в {} ниже (isset($_POST['content'])), где происходит открытие данного файла и запись содержимого $_POST['content'] в этот файл. Кроме того происходит перезапись из массива POST в массив GET названия файла.
3,1 далее печатается первая форма
3,2 так как $_GET['filename'] уже существует, то и выполнится опять 2-ой блок после условия isset($_GET['filename']).


P.S. Надеюсь я не запутал Вас своими объяснениями... и надеюсь сам не запутался =))

Спустя 58 минут, 49 секунд (16.07.2009 - 22:29) Han написал(а):
Спасибо алгоритм обьяснили доходчиво ,но вопросы так же остались

2. Как я понимаю загружается первая форма. Пользователь пишет имя файла и если файл существует загружается вторая в которой загружается содержания файла! Пользователь изменяет содержание жмёт кнопку файлы передались методом POST и перезаписались. Я создал файл в каталоге там де лежит скрипт в котором написан какой то текст . Но когда ввожу в первую форму файл не находит!

3. Не понимаю форму записи.

после if (isset($_GET['filename'])) открывается фигурная скобка. Как я понимаю типа всё что будет в этих фигурных скобках делаеться если переменная $_GET['filename'] существует в масиве, но как можно в конце открыть код пхп и тупо поставить закрывающюю фигурную скобку. До этого скрипта я считал , что если после оператора if мы открываем фигурную скобку то она действует исключительно в этом скрипте после закрытия ?> она уже к этому скрипту не имеет никакого отношения!

А и еще вопросик что это за скрытое поле filename через которое передаёться имя файла


PHP
<input type="hidden" name=filename 
                 value
='<?php echo $_GET['filename']; ?>'>





и зачем в конце блока после
PHP
if(isset($_POST['content']))
мы присваиваем
PHP
$_GET['filename'] = $_POST['filename'];


они и так по идее должны быть равны!

Спустя 42 минуты, 57 секунд (16.07.2009 - 23:12) pas написал(а):
PHP
<?php
//файл edit.php
//Если переданно исправленное содержимое его
//открываем файл и перезаписываем его
if(isset($_POST['content']))
{
 
//Открываем файл
 
$fd = @fopen($_POST['filename'], "w");
 
//Если файл не может быть открыт, сообщаем
 //об этом предупреждением в окне файла
 
if(!$fd) exit("Такой файл отсутствует");
 
//Перезаписываем содержимое файла
 
fwrite($fdstripslashes($_POST['content']));
 
//Закрываем файл
 
fclose($fd);
 
//Помещаем в суперглобальный масив $_GET
 //имя файла
 
$_GET['filename'] = $_POST['filename'];
 }
?>

<form action = "edit.php" name='first' method="get">
   Имя файла <input type="text" name="filename"
                    value="<?php echo (isset($_GET['filename']))?$_GET['filename']:""?>"><br>
      <input type="submit" value="Отправить">
</form>

<?php

//Если в строке запроса передано имя файла,
//открываем его для редактирования
if (isset($_GET['filename']))
{
//Открываем файл
$fd fopen($_GET['filename'],'r');
//Если файл не может быть открыт, сообщаем
//об этом предупреждением в окне браузера
if(!$fd) exit("Такой файл отсутвствует");
//Помещаем содержимое файла в переменную $bufer
$bufer fread($fdfilesize($_GET['filename']));
//Закрываем файл
fclose($fd);
?>
  <form action="edit.php" name='second' method="post">
     <textarea cols='76' rows='10' name="content">
                  <?php echo $bufer?></textarea><br>
        <input type="hidden" name='filename' 
                 value='<?php echo $_GET['filename']; ?>'>
      <input type="submit" name='edit' value="Редактировать">
</form>
<?php
}



Я подкорректировал Ваш скрипт, убрал несколько ошибок, из-за которых скрипт не работал.

Цитата
3. После if (isset($_GET['filename'])) открывается фигурная скобка.

Так можно делать. Можно вставлять html в php (как в данном случае), либо наоборот.

Скрытое поле используется здесь для того чтобы отправить имя файла. так как во 2-ой форме мы отправляем данные методом POST.

Спустя 1 час, 7 минут, 47 секунд (17.07.2009 - 00:20) Han написал(а):
pas огромное спасибо за помощь!Почти со всем разобрался!

Не подскажите литературу где бы доходчиво объяснили методы Пост и Гет я их по моему не доконца понял и еще мне нужна литература по формам. Я не полностью понимаю взаимодействие форм и методов передачи.


_____________
Никогда не бойся делать то, что ты пока не умеешь. Помни, Ковчег был построен любителем. Профессионалы построили "Титаник".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.