Perl初級者です。


Perlで、HTMLページ内のチェックボックスがチェックされているか調べ、
「もしチェックされていたら○○する」という if文を書きたいのですが、
どう書けばいいのでしょうか?

テキストに入力された文字列を取得することもしているので、これを邪魔しないように
なるべくシンプルに書く書き方を教えてください。


チェックボックスやテキストは、こんな感じで書いています。

<input type="checkbox" name="uwagaki">上書きする
ファイル名 <input type="text" name="FileName" size=20 value=$FileName>

テキストの入力の取得はこんな感じ。。。

use CGI;
$FileName = param('FileName');

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/07/02 22:14:44
  • 終了:2008/07/03 21:31:48

ベストアンサー

id:Catfish No.3

Catfish回答回数25ベストアンサー獲得回数42008/07/03 01:04:09

ポイント50pt

最近WEB開発をやっていないので、うろ覚えな感じは否めないのですが、

記憶をたどると、以下のようになります。


上の回答のソースだと、'uwagaki'の値として'書きする'が当てられます。



送信ページのフォームで、


<input type="checkbox" name="uwagaki" value="上書きする">上書きする

<input type="checkbox" name="uwagaki" value="さらに上書きする">さらに上書きする


と、同じnameで2つのデータを送信した場合、


use CGI;

$obj = new CGI;

push(@uwagaki, $obj->param('uwagaki'));



で、フォームデータを読み取ると、


'$uwagaki[0]' の値は '上書きする'

'$uwagaki[1]' の値は 'さらに上書きする'


になります。


ただし、サーバーのPERLにCGIモジュールがインストールされている場合です。


CGIモジュールの解説はここが分かり易そうです。

http://www.futomi.com/lecture/form/cgi-pm.html

詳細な解説は

http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod



自分でフォーム内容を取り込むなら、同じホームページの下記の記事を参考にしてください。

ここの実例のラジオボタンの「input type="radio"」を「input type="checkbox"」置き換えれば同じです。

http://www.futomi.com/lecture/form/index.html


cgi-lib.plを使用した場合は、サーバーの環境を選ばないので、お勧めです。

動作させるCGIのファイルと同じフォルダに、'cgi-lib.pl'をコピーしておけば使用できます。

・解説は

  http://www.futomi.com/lecture/form/cgilib.html

  http://www.webkoza.com/doc1/perl_g.htm

  http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page...

・cgi-lib.plのページは

  http://cgi-lib.berkeley.edu/

・ダウンロード先は

  http://cgi-lib.berkeley.edu/2.18/cgi-lib.pl.txt

id:uta_at_home

ありがとうございます。

明日試してみます。m(_"_)m

2008/07/03 04:09:31

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/07/02 22:56:50

ポイント50pt

まず、HTML側で value を設定してください。たとえば

<input type="checkbox" name="uwagaki" value="書きする">上書きする

のようにしてください。


Perl側は下記のようにして受け取ります。こうすれば、name は同じで value が異なる chekbox の value の内容を配列 uwagaki に代入していきます。

use CGI;

$obj = new CGI;

push(@uwagaki, $obj->param('uwagaki'));

id:uta_at_home

ありがとうございます。

ちょっとやってみたのですが、うまく取り出せませんでした。

if( $uwagaki[0] ){

$result = "YES";

}

とやっても、

if( @uwagaki ){

$result = "YES";

}

とやっても、$resultは"YES"になってくれませんでした。

IF文の条件式はどうやって書いたらいいのでしょう?

2008/07/02 23:57:37
id:shintabo No.2

shintabo回答回数45ベストアンサー獲得回数102008/07/03 01:04:08

ポイント50pt

# http://modperlis.bounceme.net/work/checkbox.html

# post to cb.cgi

#!/usr/bin/perl

use strict;

use warnings;

use CGI;

my $cgi = CGI->new();

my @cb = $cgi->param('cb');

print "Content-type:text/html\n\n";

if (@cb) {

print "YES<br>\n";

} else {

print "NO<br>\n";

}

for (@cb) {

print "val => $_<br>\n";

}

exit;

# OK?

id:uta_at_home

ありがとうございます。

明日試してみます。m(_"_)m

2008/07/03 04:09:26
id:Catfish No.3

Catfish回答回数25ベストアンサー獲得回数42008/07/03 01:04:09ここでベストアンサー

ポイント50pt

最近WEB開発をやっていないので、うろ覚えな感じは否めないのですが、

記憶をたどると、以下のようになります。


上の回答のソースだと、'uwagaki'の値として'書きする'が当てられます。



送信ページのフォームで、


<input type="checkbox" name="uwagaki" value="上書きする">上書きする

<input type="checkbox" name="uwagaki" value="さらに上書きする">さらに上書きする


と、同じnameで2つのデータを送信した場合、


use CGI;

$obj = new CGI;

push(@uwagaki, $obj->param('uwagaki'));



で、フォームデータを読み取ると、


'$uwagaki[0]' の値は '上書きする'

'$uwagaki[1]' の値は 'さらに上書きする'


になります。


ただし、サーバーのPERLにCGIモジュールがインストールされている場合です。


CGIモジュールの解説はここが分かり易そうです。

http://www.futomi.com/lecture/form/cgi-pm.html

詳細な解説は

http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod



自分でフォーム内容を取り込むなら、同じホームページの下記の記事を参考にしてください。

ここの実例のラジオボタンの「input type="radio"」を「input type="checkbox"」置き換えれば同じです。

http://www.futomi.com/lecture/form/index.html


cgi-lib.plを使用した場合は、サーバーの環境を選ばないので、お勧めです。

動作させるCGIのファイルと同じフォルダに、'cgi-lib.pl'をコピーしておけば使用できます。

・解説は

  http://www.futomi.com/lecture/form/cgilib.html

  http://www.webkoza.com/doc1/perl_g.htm

  http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page...

・cgi-lib.plのページは

  http://cgi-lib.berkeley.edu/

・ダウンロード先は

  http://cgi-lib.berkeley.edu/2.18/cgi-lib.pl.txt

id:uta_at_home

ありがとうございます。

明日試してみます。m(_"_)m

2008/07/03 04:09:31
  • id:humiya_r
    if文の組立てが複雑になるようでしたら
    switchを使うのも一つの手です。
  • id:uta_at_home
    質問者です。

    すごいポカミスをやらかしていることに気づかず、確認するのが遅くなってしまいました。
    「うまくできませんでした」と書いた pahooさんのやり方でも本当はできていたのだと思います。

    そういうわけで、ポイントは均等に配分させて頂きます。

    Catfishさんがいろいろ紹介してくれたサイトで、あーだこーだといろいろ試してみて、やっと自分の間違いに気づくことができました。
    しょぼい質問者ですいませんでした。

    humiya_r さん、コメントで有用な情報ありがとうございます。
    PerlでSwitch文は使えないと思い込んでいましたが、5.8以降で使えるようになっていたのですね。
    これで少しすっきりした書き方ができます。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません