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

Форум PHP

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

 

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

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

тема: работа с файлами
 
 автор: zavragnov   (27.09.2005 в 10:00)   письмо автору
 
 

Поискав на вашем форуме отрывки кода, собрал такую конструкцию. я еще только изучаю пхп, поэтому прошу помощи. Этот скрипт не хочет сохранят в выбранный файл. кто чем сможет - помогите доделать.

Да и еще хотелось бы, если вас не затруднит:

сделать чтобы файл выбирался не через выпадающее меню, а через ссылку на файл (и что бы ссылка была не test.txt, а по приличней в смысле бралось из файла) вот структура файла

название|инфрмация1|инфрмация2|инфрмация3

вот «название» и было бы ссылкой на выбранный файл





   1. <?php
   2. 
//Error_Reporting(E_ALL & ~E_NOTICE);
   
3.
   4. 
//Директория, где будут храниться файлы с данными
   
5. $basedir="data";
   
6.
   7. 
//Если еще не выбран файл, то предлагаем его создать
   
8. if(empty($selectbase)) {
   
9. echo "Создать<br/><form name=addbase><input type=text name=addnbase><input type=hidden name=mod value=options><input type=hidden name=action value=randb>&nbsp;&nbsp;<input type=submit name='' value=\"Создать\"></form>";
  
10. if(isset($addnbase)) { @fclose(fopen("$basedir/$addnbase""a+")); }
  
11. }
  
12.
  13. 
else {
  
14. $basename=$basedir."/".$selectbase;
  
15. $chbase=$selectbase;
  
16. }
  
17.
  18. 
//А здесь предлагаем выбрать файл из имеющихся
  
19. echo "<br/>Выбрать<br/><form name=formbase><select name=selectbase size=\"1\"><option value=\"\">&nbsp;&nbsp;&nbsp;&nbsp;-- Выбор --&nbsp;&nbsp;&nbsp;&nbsp;</option>";
  
20.
  21. 
if ($handle opendir("$basedir")) {
  
22. while (false !== ($basefile readdir($handle))) {
  
23. if ($basefile != "." && $basefile != "..") {
  
24. echo "<option value=$basefile>$basefile</option>";
  
25. }
  
26. }
  
27. closedir($handle);
  
28. }
  
29. echo "</select>&nbsp;&nbsp;<input type=\"submit\" name=\"\" value=\"Выбрать\"></form>";
  
30.
  31.
  32. $filename 
"$basename";
  
33.
  34.
  35.
  36.
  37. $str_array 
file($filename);
  
38. // Обходим массив в цикле
  
39. foreach($str_array as $line)
  
40. {
  
41. list($msg1$msg2$msg3$msg4) = explode("|",$line);
  
42. }
  
43.
  44.
  45. 
//echo $msg1;
  
46. //echo $msg2;
  
47. //echo $msg3;
  
48. //echo $msg4
  
49. ?>
  50.
  51.
  52.
  53.
  54.
  55.
  56. <html>
  57. <head>
  58. <title>Администрирование - <?php echo $msg1 ?></title>
  59. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  60. </head>
  61.
  62. <body>
  63.
  64.
  65. <form action=open.php method=post enctype=multipart/form-data>
  66. <p><font color="#FF9900" size="1" face="Verdana, Arial, Helvetica, sans-serif">
  67. </font></p>
  68. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  69. <tr>
  70. <td><font color="#FF9900" size="1" face="Verdana, Arial, Helvetica, sans-serif">инфо<br>
  71. <input name="a" type="text" value="<?php echo $msg1?>" size="106">
  72. <br>
  73. инфо<br>
  74. <input name="b" type="text" value="<?php echo $msg2?>" size="106">
  75. <br>
  76. инфо
  77. <input name="c" type="text" value="<?php echo $msg3?>" size="106">
  78. <br>
  79. <br>
  80. <input name="Input" type="image" src="save.gif" width="134" height="22">
  81. <br>
  82. <br>
  83. инфо<br>
  84. <textarea type=text rows=20 cols=80 name='d'><?php echo $msg4?></textarea>
  85. <br>
  86. <br>
  87. <input name="Input2" type="image" src="save.gif" width="134" height="22">
  88. </font></td>
  89. <td width="50%" valign="top"><table width="100%" border="0" cellspacing="20" cellpadding="0">
  90. <tr>
  91. <td valign="top"><font size="3" face="Arial, Helvetica, sans-serif"><?php echo $msg4?></font></td>
  92. </tr>
  93. </table>
  94. </td>
  95. </tr>
  96. </table>
  97. <p>&nbsp;</p>
  98. </form>
  99.
 100. <?php
 101. 
if(!empty($_POST['a']));
 
102. if(!empty($_POST['b']));
 
103. if(!empty($_POST['c']));
 
104. if(!empty($_POST['d']))
 
105. {
 
106.
 107. 
// Открываем файл
 
108. //$filename = "dat.txt";
 
109.
 110. $filename 
"$basename";
 
111.
 112.
 113. $fd 
fopen("$filename","w");
 
114. // Записываем содержимое текстовых областей
 
115. fwrite($fd$_POST['a']."|".$_POST['b']."|".$_POST['c']."|".$_POST['d']);
 
116. // Закрываем файл
 
117. fclose($fd);
 
118.
 119. 
}
 
120.
 121.
 122.
 123. ?>
 124.
 125. </body>
 126. </html>

   
 
 автор: cheops   (27.09.2005 в 13:18)   письмо автору
 
   для: zavragnov   (27.09.2005 в 10:00)
 

Он выводит какую-нибудь ошибку?

   
 
 автор: zavragnov   (27.09.2005 в 14:03)   письмо автору
 
   для: cheops   (27.09.2005 в 13:18)
 

под денвером ошибок не выдает

В таком состоянии он выбирает отображает, но только не записывает в файл, а если отключить функции фыборки файла из директории и подключить файл, например $filename = "dat.txt" то все записывается

   
 
 автор: zavragnov   (27.09.2005 в 18:12)   письмо автору
 
   для: zavragnov   (27.09.2005 в 14:03)
 

помогите кто чем сможет! неужели нет решения проблемы?

   
 
 автор: cheops   (27.09.2005 в 21:50)   письмо автору
 
   для: zavragnov   (27.09.2005 в 18:12)
 

Из-за нумерации его сложно протестировать на локальной машине - прикрепите пожалуйста скрипт в виде файла к сообщению - тогда мы сможем его запустить и локализовать ошибку.

   
 
 автор: zavragnov   (27.09.2005 в 22:09)   письмо автору
1.5 Кб
 
   для: cheops   (27.09.2005 в 21:50)
 

прикрепил

   
 
 автор: cheops   (27.09.2005 в 23:05)   письмо автору
 
   для: zavragnov   (27.09.2005 в 22:09)
 

Чего-то не очень понятна идея скрипта - сами файлы создаются, но их нельзя заполнить - у второй формы имеется кнопка для отправки данных? И вообще как данные отправляются обработчику?

   
 
 автор: zavragnov   (28.09.2005 в 00:14)   письмо автору
 
   для: cheops   (27.09.2005 в 23:05)
 

Так в том то все и дело что не происходит запись в выбранный файл (в папке должны еще лежать txt файлы их и надо редактировать). В файле для обработки всего одна строка типа название|инфрмация1|инфрмация2|инфрмация3

обработчик в этом же файле


100. <?php 
101. 
if(!empty($_POST['a'])); 
102. if(!empty($_POST['b'])); 
103. if(!empty($_POST['c'])); 
104. if(!empty($_POST['d'])) 
105. 
106. 
107. 
// Открываем файл 
108. //$filename = "dat.txt"; 
109. 
110. $filename 
"$basename"
111. 
112. 
113. $fd 
fopen("$filename","w"); 
114. // Записываем содержимое текстовых областей 
115. fwrite($fd$_POST['a']."|".$_POST['b']."|".$_POST['c']."|".$_POST['d']); 
116. // Закрываем файл 
117. fclose($fd); 
118. 
119. 






я понял вопрос про обработчик, у вас файл скрипта с названием open2.php, по этому надо в 65 строке написать action=open2.php, а в скрипте вот так:

65.<form action=open.php method=post enctype=multipart/form-data>

   
 
 автор: cheops   (28.09.2005 в 13:25)   письмо автору
 
   для: zavragnov   (28.09.2005 в 00:14)
 

Вот эта строка
<?php
  $filename 
"$basename"
?>

не работает так, как нужно. Она пустая в момент записи - так как ничего не выбрано, страница перезагружается и всё теряется - имя выбранного файла необходимо передавать в скрытом поле формы через метод POST.

   
 
 автор: zavragnov   (28.09.2005 в 15:07)   письмо автору
 
   для: cheops   (28.09.2005 в 13:25)
 

Да я знаю что вы можете меня отправить в мануал. но все же можно от вас получить несколько правильных срок кода, а то у меня в голове все перепуталось. помогите с передачей в скрытом поле формы методом POST

   
 
 автор: DDK   (28.09.2005 в 15:10)   письмо автору
 
   для: zavragnov   (28.09.2005 в 15:07)
 


<input type=hidden name=a value=b>

Это ?

   
 
 автор: zavragnov   (28.09.2005 в 16:35)   письмо автору
 
   для: DDK   (28.09.2005 в 15:10)
 

А как мне скрестить обработчик

// Открываем файл
$filename = "$basename";
$fd = fopen("$filename","w");
// Записываем содержимое текстовых областей
fwrite($fd, $_POST['a']."|".$_POST['b']."|".$_POST['c']."|".$_POST['d']);
// Закрываем файл
fclose($fd);


с полем
<input type=hidden name=a value=b>

так чтоли



<form action=open.php method=post>
<input type=hidden name=save value=$basename>
</form> 
// Открываем файл
$filename = "$_POST['save']";
$fd = fopen("$filename","w");
// Записываем содержимое текстовых областей
fwrite($fd, $_POST['a']."|".$_POST['b']."|".$_POST['c']."|".$_POST['d']);
// Закрываем файл
fclose($fd);

   
 
 автор: DDK   (28.09.2005 в 16:51)   письмо автору
 
   для: zavragnov   (28.09.2005 в 16:35)
 

Да... Скрытое поле данных (hidden) является аналогом текстового поля. Т.е. именем переменной будет заданное имя скрытого поля (name=a), а значением этой переменной будет значение параметра value, т.е. в нашем случае b.

ЗЫ: Офф-топ. А с чего собственно вы все взяли моду обращаться к переданным POST/GET-переменным методом $_POST['varname'] ? Всё время обращаюсь к этим переменным напрямую, т.е. допустим просто $varname... Какая разница ? Эстетическая ? Более грамотно ? Да меня просто ломает каждый раз писать $_POST[''] !

   
 
 автор: cheops   (28.09.2005 в 23:42)   письмо автору
 
   для: DDK   (28.09.2005 в 16:51)
 

>ЗЫ: Офф-топ. А с чего собственно вы все взяли моду
>обращаться к переданным POST/GET-переменным методом
>$_POST['varname'] ? Всё время обращаюсь к этим
>переменным напрямую, т.е. допустим просто $varname...
>Какая разница ? Эстетическая ? Более грамотно ? Да меня
>просто ломает каждый раз писать $_POST[''] !
Эту форум скоро исключат из PHP и останутся только суперглобальные массивы, уже сейчас по умолчанию register_globals в дистрибутивах отключают - сообщается даже о том, что директива остаётся отключённой даже на некоторых хостингах. Использование суперглобальных массивов более безопасно - подробности в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1309

   
 
 автор: zavragnov   (29.09.2005 в 01:15)   письмо автору
 
   для: cheops   (28.09.2005 в 23:42)
 

ВСЕ РАВНО НЕ РАБОТАЕТ

ВОТ ЧТО ПИШЕТ

Parse error: parse error, expecting 'T_STRING' or 'T_VARIABLE' or 'T_NUM_STRING' in z:\home\test2.ru\www\tmpbogwanjpjc.php on line 115

вот сам код скрипта, файл open.php


<?php
//Error_Reporting(E_ALL & ~E_NOTICE);

//Директория, где будут храниться файлы с данными
$basedir="data"

//Если еще не выбран файл, то предлагаем его создать
if(empty($selectbase)) {
    echo 
"Создать<br/><form name=addbase><input type=text name=addnbase><input type=hidden name=mod value=options><input type=hidden name=action value=randb>&nbsp;&nbsp;<input type=submit name='' value=\"Создать\"></form>";
    if(isset(
$addnbase)) {    @fclose(fopen("$basedir/$addnbase""a+")); }
    }
    
    else {
        
$basename=$basedir."/".$selectbase;
        
$chbase=$selectbase;
}

//А здесь предлагаем выбрать файл из имеющихся
echo "<br/>Выбрать<br/><form name=formbase><select name=selectbase size=\"1\"><option value=\"\">&nbsp;&nbsp;&nbsp;&nbsp;-- Выбор --&nbsp;&nbsp;&nbsp;&nbsp;</option>";

if (
$handle opendir("$basedir")) {
        while (
false !== ($basefile readdir($handle))) {
                if (
$basefile != "." && $basefile != "..") {
                        echo 
"<option value=$basefile>$basefile</option>";
                        }
                        }
                        
closedir($handle);
                        }
echo 
"</select>&nbsp;&nbsp;<input type=\"submit\" name=\"\" value=\"Выбрать\"></form>";

//Форма добавления нового кода
$addnban "<p>Добавить код в <b>" .$selectbase"</b><br/><form action=\"$PHP_SELF?mod=options&action=randb&subaction=add\" method=\"post\"><input  name=adcode type=text size=\"100\"><input type=hidden name=selectbase value=$chbase><br/><input type=submit name='' value=\"Добавить\"><input type=hidden name=\"yes\" value=\"0\"> <input type=\"checkbox\" name=\"adddupl\" value=\"1\"> Добавить, даже если такой код уже есть</form><p>
"
;


$filename "$basename"




  
$str_array file($filename); 
  
// Обходим массив в цикле 
  
foreach($str_array as $line
  { 
     list(
$msg1$msg2$msg3$msg4) = explode("|",$line); 
  } 
  
  
//echo $msg1;
//echo $msg2;
//echo $msg3;
//echo $msg4
?>






<html>
<head>
<title>Администрирование - <?php echo $msg1 ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>


<form action=open.php method=post enctype=multipart/form-data>
  <p><font color="#FF9900" size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
    </font></p>
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr> 
      <td><font color="#FF9900" size="1" face="Verdana, Arial, Helvetica, sans-serif">название 
        страницы<br>
        <input name="a" type="text" value="<?php echo $msg1?>" size="106">
        <br>
        ключевые слова<br>
        <input name="b" type="text" value="<?php echo $msg2?>" size="106">
        <br>
        описание станицы<br>
        <input name="c" type="text" value="<?php echo $msg3?>" size="106">
        <br>
        <br>
        <input name="Input" type="image" src="save.gif" width="134" height="22">
        <br>
        <br>
        контент <br>
        <textarea type=text  rows=20 cols=80 name='d'><?php echo $msg4?></textarea>
        <br>
        <br>
        <input name="Input2" type="image" src="save.gif" width="134" height="22">
        </font></td>
      <td width="50%" valign="top"><table width="100%" border="0" cellspacing="20" cellpadding="0">
          <tr> 
            <td valign="top"><font size="3" face="Arial, Helvetica, sans-serif"><?php echo $msg4?></font></td>
          </tr>
        </table>
        </td>
    </tr>
  </table>
  <p>&nbsp;</p>
  </form> 

<?php 
if(!empty($_POST['a']));
if(!empty(
$_POST['b']));
if(!empty(
$_POST['c']));
if(!empty(
$_POST['d']))  

 echo 
"<form action=open.php method=post> <input type=hidden name=save value=$basename> </form> ";     

// Открываем файл 
//$filename = "$_POST['save']"; 
$fd fopen("$_POST['save']","w"); 
// Записываем содержимое текстовых областей 
fwrite($fd$_POST['a']."|".$_POST['b']."|".$_POST['c']."|".$_POST['d']); 
// Закрываем файл 
fclose($fd); 

         }



?> 

</body>
</html>

   
 
 автор: cheops   (29.09.2005 в 01:20)   письмо автору
 
   для: zavragnov   (29.09.2005 в 01:15)
 

Исправьте 115 строку следующим образом
<?php
  $fd 
fopen("$_POST[save]","w"); 
?>

PS Такие здоровые листинги лучше сразу прикреплять в виде файла.

   
 
 автор: zavragnov   (29.09.2005 в 01:30)   письмо автору
 
   для: cheops   (29.09.2005 в 01:20)
 

все равно не сохраняет, после нажатиия на сохранить выдал такое:

Notice: Undefined variable: selectbase in z:\home\test2.ru\www\open.php on line 32

Notice: Undefined variable: chbase in z:\home\test2.ru\www\open.php on line 32

Notice: Undefined variable: basename in z:\home\test2.ru\www\open.php on line 36

Warning: Invalid argument supplied for foreach() in z:\home\test2.ru\www\open.php on line 43




Notice: Undefined variable: basename in z:\home\test2.ru\www\open.php on line 111



Notice: Undefined index: save in z:\home\test2.ru\www\open.php on line 115

Warning: fwrite(): supplied argument is not a valid stream resource in z:\home\test2.ru\www\open.php on line 117

Warning: fclose(): supplied argument is not a valid stream resource in z:\home\test2.ru\www\open.php on line 119

   
 
 автор: cheops   (29.09.2005 в 12:11)   письмо автору
 
   для: zavragnov   (29.09.2005 в 01:30)
 

Notice является своеобразным советом и выводится, когда выставлена максимальная чувствительность PHP к ошибкам - её следует понизить, как это сделано на всех хостингах, иначе они не дадут работать. Для этого, следует выставить соответствующее значение для директивы error_reporting, в конфигурационном файле php.ini
error_reporting = E_ALL & ~E_NOTICE

Так же можно изменить уровень обработки ошибок локально, для этого в начало скрипта следует поместить функцию
<?php 
Error_Reporting
(E_ALL & ~E_NOTICE); 
?>

В качестве параметра, которой передать соответствующий уровень обработки ошибок.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4985

   
 
 автор: zavragnov   (29.09.2005 в 14:13)   письмо автору
 
   для: cheops   (29.09.2005 в 12:11)
 

А как быть с этим?

Это появляется после нажития кнопки сохранения


Warning: Invalid argument supplied for foreach() in z:\home\test2.ru\www\open.php on line 43

Warning: fwrite(): supplied argument is not a valid stream resource in z:\home\test2.ru\www\open.php on line 117

Warning: fclose(): supplied argument is not a valid stream resource in z:\home\test2.ru\www\open.php on line 119

   
 
 автор: cheops   (29.09.2005 в 19:13)   письмо автору
 
   для: zavragnov   (29.09.2005 в 14:13)
 

Перед вызовом цикла foreach необходимо проверять не является ли массив пустым
<?php
if(!empty($str_array))
{
  foreach(
$str_array as $line
  { 
     list(
$msg1$msg2$msg3$msg4) = explode("|",$line); 
  } 
}
?>

Выведите на экран содержимое $_POST['save'] - в нём что-нибудь имеется?

   
 
 автор: zavragnov   (29.09.2005 в 22:47)   письмо автору
 
   для: cheops   (29.09.2005 в 19:13)
 

Если в файле была информация то все выводиться.

например инфа содержащаяся в файле example.txt

название|инфрмация1|инфрмация2|инфрмация3

Тетерь что происходит:

1. запускаем скрипт
2. выбираем example.txt
3. заполняется форма содержимым файла example.txt
4. вносим изменения, нажимаем сохранить
5. выдаются сообщения об ошибках, приведенные выше


Идея скрипта - выбор файла из директории и его последующее редактирование. Вся инфа в файле пишется только в одну строку. Далее содержимое файла выводится в браузер другим скриптом. Короче говоря небольшая админ панель.

А вот откуда взята идея в приложенном файле.

   
 
 автор: cheops   (30.09.2005 в 12:34)   письмо автору
 
   для: zavragnov   (29.09.2005 в 22:47)
 

В прикреплённом скрипте всё работает. В вашем коде не понятны следующие моменты, зачем нужны следующие строки
<?php
if(!empty($_POST['a'])); 
if(!empty(
$_POST['b'])); 
if(!empty(
$_POST['c'])); 
?>

Почему вы проверяете на существование $_POST['d']
<?php
if(!empty($_POST['d']))   

?>

и не проверяете $_POST[save]?

   
 
 автор: isset   (29.09.2005 в 19:42)   письмо автору
 
   для: cheops   (29.09.2005 в 12:11)
 

Не совсем согласен, Notice это такая же ошибка и исправлять ее надо обязательно, а не игнорировать...

   
 
 автор: Loki   (30.09.2005 в 00:24)   письмо автору
 
   для: isset   (29.09.2005 в 19:42)
 

Хм... а, например, необъявленная переменная - это критично?
Просто при той же постраничной навигации проще вывести все переменные на экран, нежели проверять существование каждой...

   
Rambler's Top100
вверх

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