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


Автор: ilya9339 23.2.2012, 17:46
Доброго времени суток, есть такой вопрос, как перехватить html и php коды которые отправлены формой.
Как их подчистить или проигнорировать, регулярным выражением или <cobe>? или есть  какая-то библиотека?

Автор: Pfailed 23.2.2012, 17:52
Куда они отправлены?

Автор: ilya9339 23.2.2012, 17:56
Есть форма, она заполняется текстом отправляется в perl скрипт, который в последствии должен записать данные в БД. 

Автор: Pfailed 24.2.2012, 05:37
Покажите код perl скрипта

Автор: ilya9339 24.2.2012, 06:09
Функция выглядит вот так
Код

sub newSection {
    my $html1=<<HTML1;
    <FORM action="$DATA{'URL_SITE'}cgi-bin/forum.pl" method="POST">
    <INPUT type="submit" name="newSection" value="Новый Раздел" class="newSection">
    </FORM>
HTML1
    my $html2=<<HTML2;
    <center>
    <form action="$DATA{'URL_SITE'}cgi-bin/forum.pl" method="POST">
    <table>
    <tr>
    <td>Название</td>
    <td><input type="text" name="nameSection" maxlength="16" placeholder="введите название" class="nameSection"></td>
    </tr><tr>
    <td>Позиция</td>
    <td><input type="text" name="sectionPosition" maxlength="10" placeholder="введите позицию" class="sectionPosition"></td>
    </tr><tr>
    <td><input type="submit" name="createSection" value="Создать" class="createSection"></td>
    <td><a href="$DATA{'URL_SITE'}cgi-bin/forum.pl" class="newSection">Отмена</a></td>
    </tr>
    </table>
    </form>
    </center>
HTML2
  if (!defined(param("newSection")) and !defined(param("createSection"))) {
    print $html1;
  }
  elsif (defined(param("newSection"))) {
    print "<center><b>Новый раздел:</b></center>";
    print $html2;
  }
  elsif (defined(param("createSection"))) {
    my $name = param("nameSection");
    my $position = param("sectionPosition");
    my $ds = 'DBI:mysql:' . $DATA{'DB'} . ':' . $DATA{'PASSW'};
    my $db = DBI->connect($ds, $DATA{'USER'}, $DATA{'PASSW'});
    if (!$db) {
      print "$DATA{'C-T'}";
      print "Ошибка соеденения с БД";
      exit();
    }
    $db->do("SET NAMES utf8");
    my $checkSection = $db->prepare("SELECT id_section FROM section WHERE name='$name'");
    $checkSection->execute() or die $db->errstr;
    if ($checkSection->err) {
      print "$DATA{'C-T'}";
      print "1 Ошибка выборки из БД";
      exit();
    }
    if ($checkSection->rows() == 1) {
      print "<b>Раздел с таким названием уже существует!</b>";
      print $html2;
      $checkSection->finish();
      $db->disconnect();
    }
    else {
      $db->do("INSERT INTO section (name, position) VALUES ('$name', $position)");
      $db->do("INSERT INTO section_access (id_status) VALUES (1)");
      print "<center><b></b>Раздел успешно создан!</b></center>";
      $checkSection->finish();
      $db->disconnect();
    }
  }
}

Автор: Pfailed 24.2.2012, 08:54
Ну вот я вижу вы получаете функцией param() то, что отправлено из формы. А что еще нужно?

Автор: ilya9339 24.2.2012, 09:05
Допустим param() вернула следующий текст : "Ссылка: <a href="index.pl"><?php echo("Hello") ?></a>" как мне эту строку подчистить от php скрипта и html, или как в последствии распечатать это проигнорировав  php и html?

Автор: krypt3r 24.2.2012, 09:39
Цитата

"Ссылка: <a href="index.pl"><?php echo("Hello") ?></a>"

В таком виде и выведется в браузер, без обработки PHP-интерпретатором. Точнее, вы это увидите при просмотре HTML-кода, в самом браузере на этом месте будет пусто

Автор: Pfailed 24.2.2012, 12:09
Код

$text = param("form");
$text =~ s/<[^>]*(?:>|$)/ /g; # убрать все теги

Автор: yazu 24.2.2012, 12:29
Perl Cookbook: Recipe 20.6. Extracting or Removing HTML Tags 

http://search.cpan.org/~hinnerk/HTML-StripTags-1.01/lib/HTML/StripTags.pm

http://stackoverflow.com/questions/3176842/strip-html-tags-with-perl

Автор: ilya9339 25.2.2012, 08:58
Всем спасибо, за помощь.

Автор: chorny 3.3.2012, 01:30
1. Использовать placeholders для добавления данных в БД

2. При выводе данных (в HTML) делать HTML escape.

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