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