|
|
|
| Поискав на вашем форуме отрывки кода, собрал такую конструкцию. я еще только изучаю пхп, поэтому прошу помощи. Этот скрипт не хочет сохранят в выбранный файл. кто чем сможет - помогите доделать.
Да и еще хотелось бы, если вас не затруднит:
сделать чтобы файл выбирался не через выпадающее меню, а через ссылку на файл (и что бы ссылка была не 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> <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=\"\"> -- Выбор -- </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> <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> </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>
|
| |
|
|
|
|
|
|
|
для: zavragnov
(27.09.2005 в 10:00)
| | Он выводит какую-нибудь ошибку? | |
|
|
|
|
|
|
|
для: cheops
(27.09.2005 в 13:18)
| | под денвером ошибок не выдает
В таком состоянии он выбирает отображает, но только не записывает в файл, а если отключить функции фыборки файла из директории и подключить файл, например $filename = "dat.txt" то все записывается | |
|
|
|
|
|
|
|
для: zavragnov
(27.09.2005 в 14:03)
| | помогите кто чем сможет! неужели нет решения проблемы? | |
|
|
|
|
|
|
|
для: zavragnov
(27.09.2005 в 18:12)
| | Из-за нумерации его сложно протестировать на локальной машине - прикрепите пожалуйста скрипт в виде файла к сообщению - тогда мы сможем его запустить и локализовать ошибку. | |
|
|
|
|
 1.5 Кб |
|
|
для: cheops
(27.09.2005 в 21:50)
| | прикрепил | |
|
|
|
|
|
|
|
для: zavragnov
(27.09.2005 в 22:09)
| | Чего-то не очень понятна идея скрипта - сами файлы создаются, но их нельзя заполнить - у второй формы имеется кнопка для отправки данных? И вообще как данные отправляются обработчику? | |
|
|
|
|
|
|
|
для: 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> | |
|
|
|
|
|
|
|
для: zavragnov
(28.09.2005 в 00:14)
| | Вот эта строка
<?php
$filename = "$basename";
?>
|
не работает так, как нужно. Она пустая в момент записи - так как ничего не выбрано, страница перезагружается и всё теряется - имя выбранного файла необходимо передавать в скрытом поле формы через метод POST. | |
|
|
|
|
|
|
|
для: cheops
(28.09.2005 в 13:25)
| | Да я знаю что вы можете меня отправить в мануал. но все же можно от вас получить несколько правильных срок кода, а то у меня в голове все перепуталось. помогите с передачей в скрытом поле формы методом POST | |
|
|
|
|
|
|
|
для: zavragnov
(28.09.2005 в 15:07)
| |
<input type=hidden name=a value=b>
|
Это ? | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: zavragnov
(28.09.2005 в 16:35)
| | Да... Скрытое поле данных (hidden) является аналогом текстового поля. Т.е. именем переменной будет заданное имя скрытого поля (name=a), а значением этой переменной будет значение параметра value, т.е. в нашем случае b.
ЗЫ: Офф-топ. А с чего собственно вы все взяли моду обращаться к переданным POST/GET-переменным методом $_POST['varname'] ? Всё время обращаюсь к этим переменным напрямую, т.е. допустим просто $varname... Какая разница ? Эстетическая ? Более грамотно ? Да меня просто ломает каждый раз писать $_POST[''] ! | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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> <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=\"\"> -- Выбор -- </option>";
if ($handle = opendir("$basedir")) {
while (false !== ($basefile = readdir($handle))) {
if ($basefile != "." && $basefile != "..") {
echo "<option value=$basefile>$basefile</option>";
}
}
closedir($handle);
}
echo "</select> <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> </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>
|
| |
|
|
|
|
|
|
|
для: zavragnov
(29.09.2005 в 01:15)
| | Исправьте 115 строку следующим образом
<?php
$fd = fopen("$_POST[save]","w");
?>
|
PS Такие здоровые листинги лучше сразу прикреплять в виде файла. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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'] - в нём что-нибудь имеется? | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 19:13)
| | Если в файле была информация то все выводиться.
например инфа содержащаяся в файле example.txt
название|инфрмация1|инфрмация2|инфрмация3
Тетерь что происходит:
1. запускаем скрипт
2. выбираем example.txt
3. заполняется форма содержимым файла example.txt
4. вносим изменения, нажимаем сохранить
5. выдаются сообщения об ошибках, приведенные выше
Идея скрипта - выбор файла из директории и его последующее редактирование. Вся инфа в файле пишется только в одну строку. Далее содержимое файла выводится в браузер другим скриптом. Короче говоря небольшая админ панель.
А вот откуда взята идея в приложенном файле. | |
|
|
|
|
|
|
|
для: 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]? | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 12:11)
| | Не совсем согласен, Notice это такая же ошибка и исправлять ее надо обязательно, а не игнорировать... | |
|
|
|
|
|
|
|
для: isset
(29.09.2005 в 19:42)
| | Хм... а, например, необъявленная переменная - это критично?
Просто при той же постраничной навигации проще вывести все переменные на экран, нежели проверять существование каждой... | |
|
|
|