Имеется скрипт статей на моем сайте.
Недавно я решил «прикрутить» к нему комментарии. Написал код, по моему мнению, рабочий. Но при проверке его, работать он отказался. Вот сурс:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
use CGI;
$cgi= new CGI;
$action= $cgi->param("action");
$type= $cgi->param("type");
$id= $cgi->param("id");
$nick= $cgi->param("nick");
$comment= $cgi->param("comment");
&addcom if ($action eq "post");
#подпрограмма добавления комментария к статье:
sub addcom {
#
$lt= "<";
$gt= ">";
$nick=~ s/>/>/g;
$nick=~ s/</</g;
$nick=~ s/;;;;;/:::::/g;
$comment=~ s/>/>/g;
$comment=~ s/</</g;
$comment=~ s/;;;;;/:::::/g;
$comment= substr($comment, 0, 512);
$nick= substr($nick, 0, 64);
$comment=~ s/\n/
/g;
$comment=~ s/\r//g;
@word= split(/ /, $comment);
foreach $word (@word)
{
if (length($word)> 64)
{
$ok= "BAD";
}
}
#
open OC, ">>articles/$type/$id.comm";
@old = ;
close OC;
($old_nick, $old_comment) = split(/;;;;;/, $old[@old-1]);
if ($old_comment eq $comment)
{
$ok = "BAD";
}
#
if (($ok ne "BAD") and ($comment ne ""))
{
open FC, ">>articles/$type/$id.comm";
$to_base = join("", $nick, ";;;;;", $comment, "\n");
print FC $to_base;
close FC;
}
}
#подпрограмма вывода существующих комментариев:
sub viewcom {
if (-e "articles/$type/$id.comm")
{
open VFC, "articles/$type/$id.comm";
@comments = ;
close VFC;
foreach $comments (@comments)
{
($nick, $comment) = split(/;;;;;/, $comments);
print "
<table>
<tr>
<td>$nick:
$comment
<b r="«></tr></td>\n»;</b>
<b r="">}</b>
<b r="">} else</b>
<b r="">{</b>
<b r="">print «</b>
</td>
</tr>
<tr align=«center»>
<td>
<center>Комментариев к данной статье пока нет!</center></td></tr>»;
}
}
#если не указан ни раздел, ни номер статьи, выводим список разделов:
if (($id eq «») and ($type eq «»))
{
print »
<table width=«60%» align=«center»>
<tr align=«center»>
<th>Мои статьи::Разделы</th></tr>»;
print »
</th>
</tr>
<tr>
<td>
<center>»;
open TYPES, «articles/types.cfg»;
@types = ;
close TYPES;
for ($i= @types- 1; $i>=0; $i--)
{
($t, $inf)= split(/;;;;;/, $types[$i]);
print »», $t, «</a>
print «</center></td></tr></table>\n»;
#если не указан номер статьи, но указан раздел, выводим список статей из этого раздела:
if (($id eq «») and ($type ne «»))
print »
<table width=«60%» align=«center»>
<tr align=«center»>
<th>Мои статьи</th></tr>»;
print »
</th>
</tr>
<tr>
<td>»;
$b= 0;
while (open $a, «articles/$type/$b.cfg»)
{
close $a;
$b++;
}
print »
<center>Всего статей в разделе: », $b, ».
</center>»;
for ($a= 0; $a< $b; $a++)
{
open $b, «articles/$type/$a.cfg»;
@a= <$b>;
close $b;
print »», $a[0], «</a>
#если указан и номер статьи, и раздел, выводим саму статью:
if (($id ne «») and ($type ne «»))
print »
<table width=«60%» align=«center»>
<tr align=«center»>
<th>Мои статьи</th></tr>»;
print »
</th>
</tr>
<tr>
<td>»;
open ART, «articles/$type/$id.cfg»;
@art = ;
close ART;
print »
<center><font size=«3»>», $art[0], «</font></center>
»;
</font>
<font size=«3»>foreach $line (@art)</font>
<font size=«3»>{</font>
<font size=«3»>if ($line ne $art[0])</font>
<font size=«3»>{</font>
<font size=«3»>print $line, «</font>
<font size=«3»>»;</font>
<font size=«3»>}</font>
<font size=«3»>}</font>
<font size=«3»>print «</td></tr>»;</font>
<font size=«3»>print «</font>
\n
Проблема вот в чем: при добавлении комментария в папке articles создается файл .comm с помещенным комментарием. Названия у файла .comm почему-то нет, хотя он должен называться так же, как и перемнная $id и находится он должен в папке по названию перменной $type. Этого почему-то не происходит.
Подскажите, пожалуйста, в чем проблема и какое у неё решение?
<table>
<tr align=«center»>
<th>Комментарии к статье:</th></th>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>»;
&viewcom;
print »
</td>
</tr>
<tr>
<td>
<form action=«articles.pl» method=«post»>»;
print «Ваш ник: <input name=«nick»>
»;
print »
<textarea rows=«10» cols=«40» name=«comment»>
</TEXTAREA>
</textarea>
»;
print «<input name=«action» value=«post» type=«hidden»>»;
print «<input type=«submit» value=«Комментировать»>»;
print «</form>»;
print «</td></tr></table>\n»;
}
</form>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark

Ну в форме точно надо добавить строки
<input type=«hidden» name=«id» value=«$id»>
<input type=«hidden» name=«type» value=«$type»>
зачем?
а почему возникает такая проблема, описанная мной, не из-за этого же?
Почему не из-за этого?? Когда у тебя работает addcom она пытается использовать переменные $type и $my
А теперь внимательно смотри какие переменные получает твоя прога, когда ты жмешь кнопарь добавить коментарий.
Если не прописать туда эти две строки, то получается, что у тебя эти переменные просто не объявлены. Пустые они — отсюда и результат.
Понял, спасиб ;)