Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Проверка пользовательского ввода


Автор: study 30.11.2004, 11:10
Подскажите мне, а лучше дайти примерчики smile , как проверить данные, введённые пользователем в форме.

1. Как проверить число это или строка?
2. Как проверить правильно ли пользователь ввёл IP адрес?
3. Как проверить не превышаел ли размер строки определённого значения?

З.Ы. Было бы хорошо если с примерами рабочего кода, если писать лень, то киньти ссылку на статейку по теме.

Заранее спасибо.

Автор: Guest 30.11.2004, 11:48
HTML-файл
Код

<form action="cgi-bin/test.pl" method="get">
число: <input type="text" name="p_chislo">
<br>
IP: <input type="text" name="p_ip" size="20" maxlength="15">
<br>
Строка:
 <textarea name="p_str" rows="10" cols="40">
   Строка
 </textarea>
<hr>
<input type="submit" value="Проверить">
</form>



test.pl
Код

#!usr/bin/perl
use CGI;

$lenstr=10;  #дли на строки

$chislo = param('p_chislo');
if ($chislo =~ m/\d+/) {print "$chislo - число\n";} #для целых чисел
else {print "$chislo - не число\n";}  

$ip = param('p_ip');
$ip =~ s/\s{1,}//;
if ($ip =~ m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\./) {print "$ip - ip address\n";}
else {print "$ip - non ip address\n";}

$s = param('p_str');
if (length($s) <= $lenstr) {print "Строка $s удовлетворяет заданным размерам\n";}
else {print "не удовлетворяет\n";}



Вот тебе не большой примерчик. НЕ ПРОВЕРЯЛ, ТАК ЧТО МОГУТ БЫТЬ ЕРОРЫ

Автор: chaos 30.11.2004, 11:52
Цитата(Guest @ 30.11.2004, 11:48)
HTML-файл
Код

<form action="cgi-bin/test.pl" method="get">
число: <input type="text" name="p_chislo">
<br>
IP: <input type="text" name="p_ip" size="20" maxlength="15">
<br>
Строка:
 <textarea name="p_str" rows="10" cols="40">
   Строка
 </textarea>
<hr>
<input type="submit" value="Проверить">
</form>



test.pl
Код

#!usr/bin/perl
use CGI;

$lenstr=10;  #дли на строки

$chislo = param('p_chislo');
if ($chislo =~ m/\d+/) {print "$chislo - число\n";} #для целых чисел
else {print "$chislo - не число\n";}  

$ip = param('p_ip');
$ip =~ s/\s{1,}//;
if ($ip =~ m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\./) {print "$ip - ip address\n";}
else {print "$ip - non ip address\n";}

$s = param('p_str');
if (length($s) <= $lenstr) {print "Строка $s удовлетворяет заданным размерам\n";}
else {print "не удовлетворяет\n";}



Вот тебе не большой примерчик. НЕ ПРОВЕРЯЛ, ТАК ЧТО МОГУТ БЫТЬ ЕРОРЫ

Это мой пример, забыл авторизоваться на форуме
А то потом не будут знать кому + ставить smile

Кстати в скрипте после
use CGI;
поставь print header; а то забыл написать

Автор: chaos 30.11.2004, 13:15
Вот 'рабочий' пример
Код

#!c:\Perl\bin\Perl.exe
use CGI qw(:standard);

print header;

$lenstr=10;  #дли на строки

$chislo = param('p_chislo');
if ($chislo =~ m/\D/g) {print "$chislo - не число<br>";}   #для целых чисел
else {print "$chislo - число<br>";}

$ip = param('p_ip');
$ip =~ s/\s{1,}//g;
if ($ip =~ m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/) {
 if (($1 <256 && $1>0) && ($2 <256) && ($3 <256) && ($4 <256)){
print "$ip - ip address<br>";
 } else {print "$ip - non ip address<br>";}
}else {print "$ip - non ip address<br>";}

$s = param('p_str');
if (length($s) <= $lenstr) {print "Строка $s удовлетворяет заданным размерам\n";}
else {print "не удовлетворяет\n";}

Автор: study 30.11.2004, 13:17
Спасибо chaos, сейчас по тестю smile, а можно без модуля CGI?

Автор: chaos 30.11.2004, 14:31
Цитата(study @ 30.11.2004, 13:17)
Спасибо chaos, сейчас по тестю smile, а можно без модуля CGI?

можно
тогда за место print header;
поставь print "Content-Type: text/html\n\n" но могут возникнуть проблемы с интерпретацией \n\n на сервере

Автор: GoodBoy 30.11.2004, 14:49
Цитата(chaos @ 30.11.2004, 14:31)
можно
тогда за место print header;
поставь print "Content-Type: text/html\n\n"

а как тогда с этим: $chislo = param('p_chislo');??? smile

Автор: korob2001 30.11.2004, 15:26
Цитата

а как тогда с этим: $chislo = param('p_chislo');???

Тогда нужно юзать unpack

Автор: chaos 30.11.2004, 16:57
Цитата(GoodBoy @ 30.11.2004, 14:49)
Цитата(chaos @ 30.11.2004, 14:31)
можно
тогда за место print header;
поставь print "Content-Type: text/html\n\n"

а как тогда с этим: $chislo = param('p_chislo');??? smile

да!!!, действительно. Проглядел smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)