Forum Webscript.Ru
Программирование => Perl => Тема начата: AntiChrist от 03 Марта 2004, 02:26:28
-
При декодировании использую стандартную функцию Parseform из литературы. В ней плюсы заменяются пробелами а по знаку равно идет разбивка на пары ключ=значение. Конечно при это если вводишь + или = в форме они глючат.
Модули CGI и HTML мне не понравились, да и вообще хоцца свою функцию юзать а не подключать модуль ради нее одной.
Подскажите кто знает плиз.
-
perldoc CGI
Hint: use CGI qw(param);
-
AntiChrist:
стандартную функцию Parseform из литературы
плакал
AntiChrist:
Модули CGI и HTML мне не понравились
да что вы говорите?
а можно узнать почему?
Значит \'стандартную функцию\' из литературы нормально а модули которыми весь мир пользуется религия не позволяет?
И как любителю изобретать велосипеды, предложу тебе посмотреть как устроен модуль CGI и в частности функции escape и unescape. Это решает твою проблему с плюсиками, равно и другой нечистью.
-
Блин! Ну почему Web программисты все такие злюки :(
С программы нужно было регистрацию снять - залез на
-- == MADALF HACK TEAM == --прочитал факу, спросил - все ясно понятно обьяснили...
А здесь на все один ответ - перлдок :( А он огромный шо писец...
И везде ссылки на тысячи других разделов :(
Кстати как под вынью запустить перлдок по нужной команде (я все через хтмл читаю)
Насчет CGI - не знаю кому как но мне гораздо читабельнее
%Form чем выкрутасы с парам и стрелочками... или print "Content-type..." запоминать все варианты применения модулей мне лень, проще самому свои функции писать.....
А вообще это дело вкуса, имхо.... многие мануалы написаны без CGI.pm значит кто-то и так пользуется....
Да и не вижу я в нем удобства....
Мне бы вот только плюсики научиться передавать :)
-
Так....закругляемся.
perldoc входит в стандартную поставку перла (даже активперла под Вынь), ну а если утрачены навыки работы с командной строкой, то этому можно только посочувствовать...
Изобретение велосипедов не преследуется по закону, и если вы занялись этим процессом, то не стоит привлекать к нему остальных участников форума.
-
Ясно, мой perldoc.bat глюченый был, а exe у мя и вовсе нет щас поправил, с этим проблем нет.....
А вот sub escape{ я не нашел... есть только escapeHTML:
начинается так:
my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_);
(использовать внутренние параметры или их дефолт чтоли?)
а что такое
\'escapeHTML\' => <<\'END_OF_FUNC\',
(блин слева одно справа -другое)
-
Строка 27:
use CGI::Util qw(rearrange make_attributes unescape escape expires);
это значит что нужно экспортировать unescape и escape из модуля CGI/Util.pm.
-
Но ведь после
$todecode =~ tr/+/ /; # pluses become spaces
плюсов тоже не останется совсем?
еще такой вопрос:
как включить DBI + strict?
use DBI;
use strict;
...
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
|| die "Can\'t connect: $DBI::errstr\\n";
...
в логах появляется:
Global symbol "$dbh" requires explicit package at ...
и чо делать?
-
комментишь strict
#2: use strict;
и все пашет!
-
AntiChrist
При чем здесь DBI + strict???
Переменные объявлять надо! У тебя же в логах все написано!
http://forums.webscript.ru/showthread.php?s=&threadid=9932&msgnum=0
-
Спасибо, я понимаю некоторое раздражение по поводу моих вопросов, но я действительно только начинающий.
К сожалению в тех манах, что я читал не акцентировалась прагма strict. До сих пор я считал, что первое использование переменной в левой части присваивания - это и есть обьявление переменной.
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
|| die "Can\'t connect: $DBI::errstr\\n";
(все переменные используемые справа обьявленны перед этим)
Если это не так то как еще можно обьявить хэндлер $dbh?
Может что-то вроде $dbh = new(DBI); ?
Насчет изобретения велосипедов: нелюблю я использовать чужие библиотеки не разобравшись как они работают. Ту функцию которую я использую для обработки формы я взял из литературы, разобрал построчно, переписал посвоему (обеденив некоторые регэкспы), понимаю полностью. escape из CGI::UTIL я недопонимаю, но вроде основное что мне непонятно связано именно с модульностью - обработка формы почти такая же, и как я понимаю с теми же проблемами:
пробелы и плюсы передаются из формы одним и тем же сиволом - "+" поэтому, как я понимаю, надо еще перед передачей значений заменить все "+" на "_PLUS;"
(хотя, я конечно не уверен, что плюс обозначающий пробел, абсолютно такой же, как плюс обозначающий собссно сам плюс :) )
-
Про изобретение велосипедов:
дописываем в теге формы enctype="multipart/form-data" и проверяем работу свой функции "из литературы".
Далее читаем rfc2616...
strict - perldoc strict
-
пробелы и плюсы передаются из формы одним и тем же сиволом - "+"
Плюс, на сколько я знаю, передаётся как %2B, а вот пробел через "+".
А вообще, если уж возможны конфликты символов -
используй метод POST, он все такие знаки переводит в шестнадцатиричный код :cool: :D
-
AntiChrist
Может что-то вроде $dbh = new(DBI); ?
DBI - Data Base Interface, то бишь только интерфейс
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
|| die "Can\'t connect: $DBI::errstr\\n";
А здесь ты указываешь какой именно интерфейс, в данном случае MySQL
Я лично объявляю $dbh в начале скрипта как:
use vars \'$dbh\';
т.к. мне нужно подключаться только к одной базе данных и данное подключение требуется в самых разных частях скрипта, my использую только в пределах процедур...
вообще лучше почитать ман по переменным...
-
Может я чего не понял...?
Но я делаю так :
($x1,$text)=split(/=/,$text);
$text=~s/\\+/ /g;
$text=~s/%([0-9a-hA-H]{2})/pack(\'C\',hex($1))/ge;
Чем это плохо ?
Или я не понял что-то тут у вас... ???
-
Karabas конечно не понял.
при это если вводишь + или = в форме они глючат
и у тебя тоже они тоже "глючат".
-
Надо было писать
my $dbh=.....