Forum Webscript.Ru

Программирование => Perl => Тема начата: PaulB от 16 Декабря 2001, 23:30:15

Название: Массив из формы в скрипт
Отправлено: PaulB от 16 Декабря 2001, 23:30:15
Передать массив из формы в скрипт - передаю.
Как мне его там заюзать? В РНР несложно - получил и использую $maillist[]. А как на перле?
Название: В догонку
Отправлено: PaulB от 16 Декабря 2001, 23:33:40
Если можно, пишите мылом, а то в инете я не всегда, а почту забираю регулярно...
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 11:46:13
мыло ушло...
Название: Массив из формы в скрипт
Отправлено: PaulB от 17 Декабря 2001, 12:55:26
Это я уже читал. Как массив внутри скрипта использовать я знаю. Мне нужно знать, как принять его для обработки в скрипт.  Вот кусок кода, который формирует форму с массивом: for ($i=0; $i<=$count-1; $i++){($mail,$name,$city,$phone) = split(/\\::/, $allmail[$i]);
print "$name - $mail - $city
\\n";}. Т.е. в массив заносятся номера выбранных email адресов, делаю сабмит. Теперь, как мне эти данные поиметь?
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 13:29:39
Цитировать
Мне нужно знать, как принять его для обработки в скрипт.

То есть ты не можешь принять данные из формы в скрипт?
Название: Массив из формы в скрипт
Отправлено: PaulB от 17 Декабря 2001, 13:39:37
Да.
Код извлекаю вот этим:
if ($ENV{\'REQUEST_METHOD\'} eq "POST")
{
read(STDIN, $bufer, $ENV{\'CONTENT_LENGTH\'});
}
else
{
$bufer=$ENV{\'QUERY_STRING\'};
}
#End -------------------------

# Decode data ----------------
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
$FORM{$name} = $value;
}

Обращаюсь так: @mails=$FORM{\'mails[]\'}, но выдается только последнее значение из массива.
В чем проблемы могут быть?
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 13:54:50
RTFM однозначно!
Как думаешь, что делает эта строка?
$FORM{$name} = $value;
Это, друг, хэш, с ключем $name и значением $value. Так и используй его, не трогай масив.
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 14:00:18
Если хочешь поместить значения хеша в масив-
@array=%FORM;
после этого у тебя в масиве будут и ключи (нечетные значения ака $array[1]...) и значения (соответственно четные $array[2]...)
А вообще вариантов реализации-море...
Название: ему нужны ключи
Отправлено: Green Kakadu от 17 Декабря 2001, 14:16:20
Судя по форме, которую он создает, ему нужны майлы, т.е. ключи,
т.е. :
@mails= keys %FORM;
И все.
Название: Массив из формы в скрипт
Отправлено: PaulB от 17 Декабря 2001, 14:26:06
Ребята, я в Перле новичек. Не могли бы Вы поподробнее.
Как реально можно использовать это?
Если можно, пример, плз.
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 14:34:14
дык уже написали...
Вот что у тебя разбирает форму:
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
все это дело помещается в хэш %FORM
а далее как говорит Green Kakadu только ключи в масив
@mails= keys %FORM; (масив содержит только ключи хэша, то есть мейлы)

 или все скопом в
@mails=%FORM; (масив содержит и ключи и значения хэша)

а дальше работай с масивом...
Название: а что надо?
Отправлено: Green Kakadu от 17 Декабря 2001, 14:38:50
Цитировать
Как реально можно использовать это?

А что надо.
Вот получил ты массив с мейлами ну и чего еще надо?
Может тогда аналог на php приведешь (раз ты аналогию в начале провел) и тогда мы поймем что требуется

Например,
@mails= keys %FORM;

дает тебе массив из майлов, т.е. элементы:
$mails[1]="первый мейл",
$mails[2]="второй мейл",
и т.д.
Название: Массив из формы в скрипт
Отправлено: PaulB от 17 Декабря 2001, 14:55:04
На РНР:
for ($i=0; $i<=$count-1; $i++){($mail,$name,$city,$phone) = split(/\\::/, $allmail[$i]);
print "$name - $mail - $city
\\n";}
строчка аналогичная.
Обращаюсь в скрипте вот именно так, как и писали:
$mails[1]="первый мейл"
$mails[2]="второй мейл"

А здесь, выдает только последнее значение.
Еще один нюанс. Кроме массива mails[], передаются еще поля, action, например. Как тогда быть. В хеше есть два ключа: mails[] и action.
Название: все что в форме
Отправлено: Green Kakadu от 17 Декабря 2001, 15:07:11
угу, да мы про другие поля как-то того, забыли.
Тогда чтоб у тебя были чисто майлы можно написать так:

@mails=grep(/\\S+@\\S+/, keys %FORM);
Если есть особое желание, то можно майлы проверить и поусердней, вместо /\\S+@\\S+/ вписать например такое:
/(\\w\\d-)+@(\\w\\d-\\.)+\\w{2,4}/
ну если есть подозрения ,что твои майлы в форме могут попортить (там же ничего не стоит заменить на иные значения)
Название: Есть мысль:
Отправлено: Green Kakadu от 17 Декабря 2001, 15:17:20
Цитировать
"$name


;) mails[] - это же не один просто майл, а их кучка, так?
как оно выглядит?
или это $mails[$i]?
Название: Массив из формы в скрипт
Отправлено: PaulB от 17 Декабря 2001, 15:17:54
Ест что нибудь попроще? Ведь изначально, в моем случае, обращение типа $FORM{\'имя поля\'} давало значение этого поля. А если обращаюсь $FORM{\'mails[]\'} - выдает последнее значение массива.
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 15:23:33
Для проверки посылаю методом GET, выглядит так:
mails[]=asa1&mails[]=asa2&mails[]=asa3 и т.д
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 15:26:41
Цитировать
mails[] - это же не один просто майл, а их кучка, так?
как оно выглядит?

Да тут отсутствует самое главное-алгоритм работы скрипта!
Или его тщательно скрывают, чтобы мы с тобой, Green Kakadu, его не сперли. :)
Ты получил хэш? Да! Как с ним работать знаешь?
Если нет-http://perl.artil.ru:8101/docs/lama/g5.shtml#g501
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 15:30:45
Ничего не прячу я. Пишу скрип для конторы по рассылке прайс-листа. В админовской зоне надо сделать возможность удалять email адреса из рассылки. Формирую я их тем самым кодом, что писал выше. Теперь мне надо получить этот массив в скрипт и обработать его.
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 15:34:43
Цитировать
Ничего не прячу я.

О! Другое дело! Братьям-спаммерам рад всегда помочь! :) (это шутка если кто не понял)
А теперь с самого начала.
1. База у тебя в файле?
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 15:37:56
Ага. Вид такой:email::name::city::phone
Название: ж)
Отправлено: Green Kakadu от 17 Декабря 2001, 15:38:34
Цитировать
Да тут отсутствует самое главное-алгоритм работы скрипта!
Или его тщательно скрывают, чтобы мы с тобой, Green Kakadu, его не сперли.

:) во всяком случае, мы явно чего-то не понимаем.
Например,
mails[]=asa1&mails[]=asa2&mails[]=asa3 и т.д
где тут e-mail адреса? ;)
Вот из этой строки, кого надо получить, эти asa1, asa2?
Тогда они не в ключах, а в значениях
@mails=grep(/\\S@\\S/, values %FORM);
#Опять же, я ищу тут что-то вроде lala@lala.la, а там asa1,2,3

NeoNox
Мы явно не догоняем, как выглядит форма отправки. Думаю, если мы увидим ее в HTML варианте со значениями, то все нормально найдем.
Название: Массив из формы в скрипт
Отправлено: NeoNox от 17 Декабря 2001, 15:41:33
Цитировать
Ага. Вид такой:email::name::city:hone

Я так и думал
2.Как записать в этот файл знаешь?
3.Как прочитать знаешь?
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 15:44:55
Green Kakadu Попробуй зайти по этой ссылке: http://213.59.17.20/cgi-bin/mailprice/mail.pl. Нажми "Удалить адресата", посмотри форму и ХТМЛ код.
Название: нашел!
Отправлено: Green Kakadu от 17 Декабря 2001, 15:44:56
ЁЁЁ! Нашел.
Ошибка при парсинге:

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
$FORM{$name} = $value;


А надо:

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack("C", hex($1))/eg;
unless (exists $FORM{$name}){$FORM{$name}= $value;}
else {$FORM{$name} .=";$value"; }


А потом:
@mails=split(/;/, $FORM{\'mails[]\'}) ;
Вот!
Раньше там было последнее значение, т.к. перезаписывалось все.
Название: во!
Отправлено: Green Kakadu от 17 Декабря 2001, 15:49:50
Цитировать
Нажми "Удалить адресата", посмотри форму и ХТМЛ код.

Теперь понятно,
т.е. передаешь номера майлов, а потом в соотв. с номерами удаляешь,
и надо чтоб в @mails были эти самые номера, так?
Если да, то я правильно написал про изменение процедуры обработки.  (мой последний топик)
P.S. Кстати, назвал бы поле NAME как-нибудь попонятней, напр. mailnum ;) а то всякие небуквенные символы всегда настраживают
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 15:54:36
2 NeoNox
Знаю. И пишу и читаю.


2 Green Kakadu
Сейчас попробую изменить
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 16:00:19
2 Green Kakadu
В поле name - Имя пользователя, а не номер
Название: эээ
Отправлено: Green Kakadu от 17 Декабря 2001, 16:10:32
Вот что там:
Павел Черный -
В поле NAME - mails[]
а номер в значении поля, т.е. номер пользователя, как я понял
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 16:18:46
Green Kakadu
Все верно
Название: ну так работает?
Отправлено: Green Kakadu от 17 Декабря 2001, 16:31:26
Цитировать
Все верно

Так оно заработало?
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 18:15:12
Green Kakadu, спасибо, все работает... Уоу.

Иногда полезно, оказывается в форуме пообчатся...


Тхенкс всем.

Если кого интиресует дальнейшая разработка скрипта, то милости прошу в аську 73384708. Пообчасемся, может совместными усилиями доведем до ума...
Название: Массив из формы в скрипт
Отправлено: от 17 Декабря 2001, 18:43:21
Green Kakadu, другой вопрос есть.
Не встречал ли где алгоритма постраничного вывода на экран? Если где было, ткни меня носом, плз.