Проблема.... @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 31 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Заголовок сообщения: Проблема.…
Сообщение Добавлено: 14 Апрель 2003, 09:36:00 
Появилась проблема при написании скрипта.…
Как заставить скрипт записывать новое значение в форме обратно в файл?? Ничего не получается... Значение все никак не записывается.…

change.pl
Код:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

$url = '/home/folder/';
chdir $url;
opendir DIR, $url or die "Can't opendir '$url': $!";
readdir DIR;
@files = glob "*.txt";

foreach $a(@files){
     open (data, $a);
     @data=<data>;
     close(data);
     print "$a<BR><form action=\"change2.pl\" method=\"post\"><textarea name=\"$a\">";
     foreach $curline (@data)
     {
           print "$curline";
     }       
     print "</textarea><input type=\"submit\">\n";
     print "</form><hr>\n";

}

closedir DIR;


2-ой файл скрипта (change2.pl):

Код:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

$url = '/home/folder/';
open (TEMPLATE, ">$url$a");
print TEMPLATE $FORM{'$a'};
print "Done - <a href=\"change.pl\">Go Back</a>";
close(TEMPLATE);


Думаю, что вся проблема во 2ой части, т.к. не указано значение $a, но как его туда прописать, если оно меняется (см. foreach в 1ой части скрипта)….

Спасибо за внимание.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 09:52:12 
Передавай значение $a в специальном hidden-поле с фиксированным именем. Это самый простой (но не единственный) способ.

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 10:50:55 
Crazy,
Hidden поле это тоже часть формы, а поэтому, помоему, нету разницы между textarea и hidden... То есть, как я и не знал, как $a во 2ую часть перенести, так и не знаю.… А вот в этом то и проблема... Может я ошибаюсь, но с первого взгляда я не вижу как это дело можно прокрутить.….
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 10:51:50 
Proof,
Аааа... Сорри... Не прочитал ответ внимательно... Сейчас попробую...
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 10:58:13 
Crazy,
Ко мне чтото не доходит, как можно вообще любое значение формы из 1ой во 2ую часть передавать...
Может лучше части объеденить? Но тогда я не знаю, как обрабатывать запрос в одном скрипте.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 11:25:56 

Proof писал(а):
Crazy,
Ко мне чтото не доходит, как можно вообще любое значение формы из 1ой во 2ую часть передавать...



Код:
$usedFiles = "";
foreach $a(@files){
     open (data, $a);
     # … много поскипано
     print "</textarea><input type="submit">\n";
     print "</form><hr>\n";
    $usedFiles .= "|".$a;
}
print "<input type=hidden name=usedFiles value="$usedFiles">";


(квоинг сам добавишь)

Во второй части принимаешь usedFiles, сплитишь по символу "|" и получаешь список использованных тобой имен файлов. Дальше -- очевидно.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 11:36:16 
Crazy,

Цитата:
Во второй части принимаешь usedFiles, сплитишь по символу "|" и получаешь список использованных тобой имен файлов. Дальше -- очевидно.


Ну не знаю я как принимать usedFiles во 2ой части...
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 11:40:34 
Crazy,
Как я понимаю, если пользоваться этим способом, то я получаю "сырой список" во 2ой части... А ведь мне же надо, чтобы значение из поля 1 сохранялось в файл 1, 2 в 2, и т.д. А так определенность теряется.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 11:46:39 
Что значит "сырой"? Ты получил имена полей с данными. А они у тебя совпадают с именами файлов. Чего еще не хватает? :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 12:10:04 
Crazy,
Попробовал...

Код:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

$url = '/home/folder';
$usedFiles = "";
chdir $url;
opendir DIR, $url or die "Can't opendir '$url': $!";
readdir DIR;
@files = glob "*.txt";

foreach $a(@files){
   open (data, $a);
   @data=<data>;
   close(data);
   print "$a<BR><form action=\"change2.pl\" method=\"post\"><textarea name=\"$a\">";
   foreach $curline (@data)
   {
      print "$curline";
   }   
   print "</textarea><input type=\"submit\">\n";
   print "</form><hr>\n";
   $usedFiles .= "|".$a;
}
print "<input type=hidden name=usedFiles value=\"$usedFiles\">";
open (file, ">temp.txt");
print file "$usedFiles";
close file;

closedir DIR;


2ая:
Код:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

$url = '/home/folder';

open (file, ">$url/temp.txt");
@files = split(/\|/,@files);
close file;

foreach $a(@files){
   open (TEMPLATE, ">$url/$a");
   print TEMPLATE $FORM{'$a'};
   print "Done - <a href=\"change.pl\">Go Back</a>";
   close(TEMPLATE);
}


Ноль результата.… Все делается, только за исключением записи в файлы.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 12:14:58 
Что-то я не вижу, как ты usedFiles используешь... :)

И, кстати, каков могучий смысл выражения $FORM{'$a'}? :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 12:16:53 
Crazy,
Как могу, так и использую... :(
Пытаюсь все в файл записывать... Другого выхода не вижу.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 12:22:56 
Пока что я никакого использования не вижу. :)

Но дело в другом. Чему, по твоему мнению, равно значение '$a', если собственно $a равно "foo"? :) Советую проверить экспериментально -- эффект тебя удивит...

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 12:31:39 
Crazy,
Дык, не знаю я, как $usedFiles использовать... Пытался - результаты сверху...


Цитата:
Чему, по твоему мнению, равно значение '$a', если собственно $a равно "foo"? Советую проверить экспериментально -- эффект тебя удивит


Пробовал... Ничего не изменилось.…
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 14 Апрель 2003, 13:51:22 
Что пробовал?

Что не изменилось?

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 14 Апрель 2003, 23:51:50 
Может так лучше?:

Код:
#!/usr/bin/perl

print "Content-type: text/html\n\n";

$url = '/home/folder;
chdir $url;
opendir DIR, $url or die "Can't opendir '$url': $!";
readdir DIR;
@files = glob "*.txt";

foreach $a(@files){
     open (data, $a);
     @data=<data>;
     close(data);
     print "$a<BR><form action=\"change.pl?action=new\" method=\"post\"><textarea name=\"$a\">";
     foreach $curline (@data)
     {
           print "$curline";
     }       
     print "</textarea><input type=\"submit\">\n";
     print "</form><hr>\n";
}

if ($action eq "new") {
     foreach $a(@files){
           open (TEMPLATE, ">$a");
           print TEMPLATE $FORM{'$a'};
           print "Done";
           close(TEMPLATE);
     }
}

closedir DIR;


Но опять в файлы ничего не записывается... В чем дело то? Помогите.…

Спасибо...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 15 Апрель 2003, 06:10:14 
Ты не провел эксперимент.

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 15 Апрель 2003, 23:19:59 
Crazy,
Спасибо за помощь.… Разобрался...
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 16 Апрель 2003, 23:31:07 
Eще вопрос есть:
Как просканировать директорию на подкатегории, а не файлы? Фунцкия glob, вроде, не для этих целей.… Тоесть, чтобы эффект был как от glob (DIR, "*.txt"); только скрипт ищет не txt файлы, а директории...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 17 Апрель 2003, 07:21:26 
glob'м ищешь все, а потом проверяешь, является ли очередное имя именем каталога.

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 17 Апрель 2003, 07:32:11 
C glob'ом разобрался... Только вот при выявлении каталогов появились проблемы:
Код:
#!/usr/bin/perl
require "settings.pl";

print "Content-Type: text/html\n\n";

$url = $ENV{'QUERY_STRING'};
$new_url = "$root/$url";

chdir $new_url;
opendir DIR, $new_url or die "Can't opendir '$new_url': $!";
readdir DIR;
@files = glob "*";
closedir DIR;

foreach $a(@files) {
   if ($a ne "*.shtml" && $a ne "*.txt") {
      if ($url eq "") {
      print "<p><a href=\"test.pl?$url$a\">$a</a>\n";
      }
      else {
      print "<p><a href=\"test.pl?$url/$a\">$a</a>\n";
      }
   }
}


Скрипт вывод все: и директории, и файлы...
Вроде все описал, а он мои ограничения игнорирует.…
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 17 Апрель 2003, 08:19:37 
может я конечно и не прав (уже немного подзабыл перл), но мне кажется, что * в шаблоне имени файла не должнга работать :glasses:

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 17 Апрель 2003, 10:26:53 
Long,
А как же тогда высказать значение * в переменной? В моем случае.…
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 17 Апрель 2003, 10:31:56 
можно, например, через регулярные выражения.

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 17 Апрель 2003, 11:24:27 

Long писал(а):
мне кажется, что * в шаблоне имени файла не должнга работать :glasses:



Работать то она работает.… Но вовсе не так, как думает гражданин Proof... :)

Вероятно, имелось в виду:

Код:
if ($a !~ /\.(shtml|txt)$/) {


Кстати, Proof, твой скрипт делает вовсе не то, что ты думаешь... :)
Proof
новый человек
0
Сообщения: 79
Зарегистрирован: 14.01.02
Сообщение Добавлено: 17 Апрель 2003, 11:51:43 
Crazy,

Цитата:
if ($a !~ /\.(shtml|txt)$/) {


Да.… Именно это.…


Цитата:
Кстати, Proof, твой скрипт делает вовсе не то, что ты думаешь...


:lol: Это я уже давно догадался... :lol:
Это было смешно.…
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 17 Апрель 2003, 13:03:14 
Зачем регуляркой? есть же grep (!)

_________________
:: metal kick ass ::
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 17 Апрель 2003, 13:10:45 
MpaK999, а как ты содираешься использоват grep без регулярных выражений? :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 17 Апрель 2003, 13:17:40 
эээ, ну без них никуда, но
Код:
if ($a !~ /\.(shtml|txt)$/) {

легче сделать grep'ом

_________________
:: metal kick ass ::
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 17 Апрель 2003, 13:23:50 
Показывай. Я прокомментирую. :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 17 Апрель 2003, 13:32:02 
@files=grep(/\.(shtml|txt)/, @files);


:confused:

_________________
:: metal kick ass ::
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 31 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100