CGI-BBS > CGI > Perl > PerlについてCGI内のhtmlを表示したい。


カレッヂ
カレッヂ


質問者 AKI  投稿日 2005/4/7(木) 13:02:45
本体CGIの中にあるSUB ehtmlというhtmlを表示させたいのですが
どうすればいいですか?

本体CGI http://xxx.com/xxx.cgi
アドレスのあとに?をつけてサブルーチン名をいれるのですか?

【習熟度】(未選択)

回答者 sim  [削除]  投稿日 2005/4/9(土) 13:43:31
xxx.cgiがどのようなものかわかりませんが、

require 'xxx.cgi';
&ehtml;#print &ehtml;かも


こんなのが通常じゃないでしょうか。
質問者 AKI  [削除]  投稿日 2005/4/9(土) 15:22:38
説明不足でした まず表示用サブルーチン&html(表示画面)に行きます
pass入力後サブルーチン&ehtml(書き込み&削除画面)に移動します
そこで書き込みや削除などをするのですが、書き込み後&ehtmlに戻し、続けて書き込みが
できるようにしたいのですが・・
if ($FORM{'action'} eq "true") { &regist; }
elsif ($FORM{'action'} eq "del") { &delete; }
elsif ($FORM{'action'} eq "pass") { &ehtml; }
&html;
exit;
sub html {
if (!open(NOTE,"$file")) { &error(bad_file); }
@DATA = <NOTE>;
close(NOTE);
@DATA = reverse(@DATA);
print "<html>\n";
print "<head>\n";
print "<title>$title</title></head>\n";
print "<body bgcolor=#FFFFFF vlink=#0000FF>\n";
print "<form action=$url method=post>\n";
print "<input type=hidden name=action value=pass>\n";
print "<h1>$title</h1><br>\n";
print "<table border=1 cellspacing=1 >\n"; 
print "<tr>\n"; 
&WriteTD(0,$yoko-1);
print "</table>\n"; 
print "<table border=1 cellspacing=1 >\n"; 
print "<tr>\n";
&WriteTD(1,$yoko-1);
print "</table>\n"; 
<DIV ALIGN=right><input type=text size=5 name=passwd><input type=submit value=編集></DIV>\n";
print "</body></html>\n";
exit;
}
sub WriteTD{
if  (!open(NOTE,"$file")) { &error(bad_file); }
@DATA = <NOTE>;
close(NOTE);
@DATA = reverse(@DATA);
  my($jan_num,$yoko,$linemax,$count);
  ($jan_num,$linemax) = @_;
  $count = 0;
  foreach(@DATA){ 
    chomp; 
    my($no,$name,$banar,$se,$jan)=split /<>/; 
    if($count > $linemax){print"</tr>";$count=0;} 
    if ($jan eq $jan_num){ 
      print "<td width='140'><a href=http://$name target='_blank'><center><img src=http://$banar height='100' width='60' Border='0' ALT=$se ></a></td></center>\n";
       $count++; 
}}}
sub ehtml {
if($FORM{'passwd'} eq $passwd){
if  (!open(NOTE,"$file")) { &error(bad_file); }
@DATA = <NOTE>;
close(NOTE);
@DATA = reverse(@DATA);
print "<html>\n";
print "<head>\n";
print "<title>$title</title></head>\n";
print "<body bgcolor=#FFFFFF vlink=#0000FF>\n";
print "<div align=center><center>\n";
print "<br>\n";
print "<form action=$url method=post>\n";
print "<input type=hidden name=action value=true>\n";
print "<table border=1 cellspacing=1>\n";
print "<tr>\n";
print "<td align=center>掲示板アドレス</td>\n";
print "<td><input type=text size=29 name=name></td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=center>掲示板の名前</td>\n";
print "<td><input type=text size=29 name=banar></td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=center>説明</td>\n";
print "<td><input type=text size=29 name=se></td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=center>どちらかチェック</td>\n";
print "<td><INPUT TYPE=radio NAME=jan value=0 >個人のみ宣伝可<INPUT TYPE=radio NAME=jan value=1
>商用OK</td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=center colspan=2><input type=submit value=登録></td>\n";
print "</tr>\n";
print "</table></center></div>\n";
print "</form>\n";
print "<form action=$url method=POST>\n";
print "<input type=hidden name=action value=del>\n";
my $linemax=$yoko-1;
my $count=0;
    
for(@DATA){
        chomp;
        ($no,$name,$banar,$se,$jan)=split /<>/; 
        if($count > $linemax){print"<br>";$count=0;}
       print "<INPUT TYPE=checkbox NAME=$no><a href=http://$name><img src=http://$banar height='100' width='60' Border='0' ALT=$se ></a>\n";
        $count++;
}
print "<br><input type=submit value=削除>\n";
print "</body></html>\n";
exit;
}}
#3.データ書き込みルーチン
sub regist {
@lines = <IN>;
close(IN);
($nextnum) = split(/\t/, $lines[0]);
$nextnum++;
$value = "$nextnum<>$FORM{'name'}<>$FORM{'banar'}<>$FORM{'se'}<>$FORM{'jan'}<>\n"  ;
unshift(@lines, $value);
if  (!open(OUT,">$file")) { &error(bad_file); }
print OUT @lines;
close(OUT);
}
回答者 sim  [削除]  投稿日 2005/4/9(土) 16:38:01
if ($FORM{'action'} eq "true") { &regist;&ehtml; }

こんな感じでいいんじゃないでしょうか?
質問者 AKI  [削除]  投稿日 2005/4/11(月) 09:04:14
やはり &htmlに行きます
print "<form action=$url method=post>\n";
上記の$urlを変更しないといけないのでしょうか?
回答者 sim  [削除]  投稿日 2005/4/11(月) 10:07:53
<input type=hidden size=5 name=passwd value=$FORM{'passwd'}>

これをつける必要がありそうですね。
質問者 AKI  [削除]  投稿日 2005/4/11(月) 12:31:40
一応&最後に><input type=text size=5 name=passwd><input type=submit value=編集>
はつけてます

はじめに表示するのは&htmlでpass入力後&ehtmlに移動して
登録&削除をおこないます。
if ($FORM{'action'} eq "true") { &regist; }
elsif ($FORM{'action'} eq "del") { &delete; }
elsif ($FORM{'action'} eq "pass") { &ehtml; }
&html;
exit;
続けて登録や削除をしたいので&ehtmlにもどしたいのですが
いろいろためしたのですがうまくいきません
&registは書き込みルーチン
&deleteは削除ルーチンです。
回答者 sim  [削除]  投稿日 2005/4/11(月) 12:47:04
&ehtmlの中に先ほどのタグを入れてみてください。
size=***とかはいらないですが。
質問者 AKI  [削除]  投稿日 2005/4/13(水) 11:55:29
<form action=$url method=post>
とセットで追加したらできました
ありがとうございます

このページは終了したので返信(回答)は書きこめません
 


Web裏技