PerlもHTMLも初心者です。hiddenの使い方が分からないのですが、
■sub test1
<form NAME="minshu" ACTION="test.cgi" METHOD="post">
<input TYPE="submit" >
<INPUT TYPE="hidden" NAME="aso" VALUE="write"> ..
■test.cgi
$hatoyama=$Form{'aso'};

と、hiddenで送った変数をtest.cgiで受け取る時、$Form{}で受け取ると決まっているのですか?$minshu{aso}とかでは受け取れないのですか?
この場合、hiddenのnameはどういう役目をしているのですか?
hiddenのname="minshu" とかすれば$minshu{aso}で受け取れるかと思っていたのですが、うまくいかないようなので..

A 回答 (2件)

例えば、


<INPUT TYPE="hidden" NAME="aso" VALUE="write"> と
<INPUT TYPE="hidden" NAME="minshu" VALUE="ok">
を送ると

$Form{aso} には write 、$Form{minshu} には ok が入ります。
$Form の Form は受け取る時に任意に変えられ $minshu{aso} 、$minshu{minshu} とするのは可能です。
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございました。
>$Form の Form は受け取る時に任意に変えられ
>$minshu{aso} 、$minshu{minshu} とするのは可能です。

$form のformを変えたら動かないのは、他に問題がありそうですね..

なお、hiddenのnameは何に使うのか教えていただけましたら、幸いです。

お礼日時:2009/05/23 15:55

>>hiddenのnameは何に使うのか教えていただけましたら、幸いです。


 データーを送信(渡す)したい時の任意の変数名だと思います。

 例えば、write とか ok というデーターを送りたい時に、任意の name名で、
 name=kakikomi value=write
 name=check value=ok

 として送り、受け取ったPerl等で、$IN{'kakikomi'} には write が入り、$IN{'check'} には ok が入ります。
 
    • good
    • 1
この回答へのお礼

あ、そうですね。おっしゃるとおりですね。hiddenで送るデータは一個でない訳だからですね。
ありがとうございました。

お礼日時:2009/05/24 06:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

QPOSTで

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return false">hoge</a>
<form action="./sample.cgi" method="POST" name="post2">
<input type="hidden" name="md" value="bb">
<input type="hidden" name="tx" value="yy">
          :
<a href='#' onClick="document.post2.submit();return false">hoge2</a>

このような手法が見つかりました
これだと行数が多くなり、なんとなくすっきりしません
どなたかいい解決方法を教えてください
よろしくお願いします

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return...
続きを読む

Aベストアンサー

JavaScriptオフの場合を考えないなら、このように書けます。


<!-- フォーム -->
<form action="sample.cgi" method="post" name="form1">
<input type="hidden" name="md">
<input type="hidden" name="tx">
</form>


<!-- スクリプト -->
<script type="text/javascript"><!--
function Post(md, tx) {
  form1.md.value = md;
  form1.tx.value = tx;
  form1.submit();
}
//--></script>


<!-- リンク -->
<a href="javascript:Post('aa', 'zz')">hoge</a>
<a href="javascript:Post('bb', 'yy')">hoge2</a>

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

QPOSTで配列のデータを渡す方法は?

初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。
だれか、教えてください。
.....
&ReadParse(*in);
for ($i = 0 ; $i <=10 ; $i++){
   $data[$i] = $in{'data[$i]'};
}
sub main {
。。。以下修正部分・。。。
print "<form method=\"POST\" action=\"$userpro\">";
print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>";
print " <input type=\"text\" name=\"data[1]\" size=\"20\" value=\"$data[1] \">";
print " <input type=\"text\" name=\"data[2]\" size=\"20\" value=\"$data[2] \">";
print " <input type=\"text\" name=\"data[3]\" size=\"20\" value=\"$data[3] \">";
......
print " <p><input type=\"submit\" value=\"修正\" name=\"B1\"></p>\n" ;
print "</form>\n" ;
・・・・

}

#Submit後実行される関数
sub miss1 {
print "Content-type: text/html\n\n";
for ($i = 0 ; $i <=10 ; $i++){
print "$i-$data[$i]<br>";
}
exit;
}

結果は
0-空(空白)
1-空(空白)
2-空(空白)
。。。
にです。

何が間違っているでしょうか。よろしくお願いします。

初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。
だれか、教えてください。
.....
&ReadParse(*in);
for ($i = 0 ; $i <=10 ; $i++){
   $data[$i] = $in{'data[$i]'};
}
sub main {
。。。以下修正部分・。。。
print "<form method=\"POST\" action=\"$userpro\">";
print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>";
print " <input type=\"text\" name=\"data[1]...続きを読む

Aベストアンサー

配列を利用するのではなく、この場合は、$data_1や$data_2などの変数を利用するのが無難です。<input type> がtextですので。
ただ、<select ... multiple>やcheckboxの場合は、別の処理の仕方を工夫する必要があります。
一番良いやり方は、&ReadParseを使わず、連想配列を活用する方法です。
インプレス社の「Perl5 パワフルテクニック大全集」の、第7章にヒントがあります。ご参考まで。

尚、PHPを使えば、abparkさんが書かれたような「配列」を利用することが出来ます。

Q複数ファイルの読み込みについて

perl初心者です。

あるディレクトリから拡張子がdataであるファイルを全て読み込みたいのですが、方法がわかりません。
cshで書くと
foreach arg (*.data)
コマンド $arg

のようになりますが、perlだと
foreach $arg (@arg){
コマンド $arg

となりますよね?
引数がリストなのでよくわかりません。
そもそもperlではできないのでしょうか?


それともう一点ですが、ファイルオープンするときに
foreachループの中で
open(FILE, "$arg");
とすることは可能ですか?
上の質問と組み合わせて全てのファイルを開いて作業を行いたいので。

説明が下手ですいません。補足しますのでよろしくお願いします。

Aベストアンサー

while(<*.data>)
{
## $_には、*.DATAなファイル名が格納されている。
open(F,"$_"); ##openする。
while(<F>)
{
##読み出された内容が$_に格納されている。
print $_; ##出力してみる。
}
}

というのが最短コーディングです。

QチェックボックスのCGIへの値の受け渡し方

チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。
【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。)
<INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br>
<INPUT type="checkbox" name="q1" value="黄" onclick="return limitation(this,2)">黄<br>
<INPUT type="checkbox" name="q1" value="青" onclick="return limitation(this,2)">青<br>
【CGI】
use CGI qw(:standard);
@check1=param("q1");
$result1=join(',',@check1);

print "<td width=300><font size=2>$result1</font></td>\n";

このPerlは@check1にq1のチェックが付いたものが格納されていると認識しています。では、どうしたらそれをとりだせるのでしょうか?初心者で申し訳ありません。やり方にこだわらず、今回の目標は
(1)チェックボックスに規定(2つ)以上のチェックが入るとアラートでチェックしすぎた瞬間に知らせてくれる
(2)2つチェックされた場合の値の取出しを可能にする。

チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。
【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。)
<INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br>
<INPUT type="checkbox" name="q1" value="黄"...続きを読む

Aベストアンサー

説明が悪かったかな。
先ほど表記したのは同じcheckboxの場合の受け取り方のテストスクリプトです。
受け取った配列をHIDDENで渡せば問題ありません。

ただ、私のほうでCGI.pmを使用したものをテストしたところ同じnameを使った場合は渡された文字列が連結されてしまうみたいです。

以下テスト用

#!/usr/local/bin/perl


use CGI;
$query = CGI->new;
$on = $query->param('on');

@params = $query->param();

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>test</TITLE></HEAD>\n";
print <<HTML;
<form action="chk.cgi" method="POST">
<input type="checkbox" name="q1" value="RED">RED<br>
<input type="checkbox" name="q1" value="BLUE">BLUE<br>
<input type="checkbox" name="q1" value="YELLOW">YELLOW<br>
<input type="submit" name="on" value="TEST">
</form>
HTML

if ($on) {
print "<p>変数result1: $result1</p>\n";
print "<p>配列q1<br>\n";
foreach $q1 (@check1) {
print "$q1<br>\n";
}

foreach $param (@params) {
print $param, ":\t", $query->param($param), "<br>\n";
}

}

print "</BODY>\n";
print "</HTML>\n";

exit;


以上でテストした結果:
q1: REDBLUEYELLOW
on: TEST

説明が悪かったかな。
先ほど表記したのは同じcheckboxの場合の受け取り方のテストスクリプトです。
受け取った配列をHIDDENで渡せば問題ありません。

ただ、私のほうでCGI.pmを使用したものをテストしたところ同じnameを使った場合は渡された文字列が連結されてしまうみたいです。

以下テスト用

#!/usr/local/bin/perl


use CGI;
$query = CGI->new;
$on = $query->param('on');

@params = $query->param();

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TIT...続きを読む

QPerlプログラム上でアラートを表示

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというものです。

前置きはこのような感じで、教えていただきたい内容は、
チェックプログラム内の記述に以下のようなチェック項目があります。
------------------------------
if(!(-e $CIRCUIT)){
print"END";
exit(0);
}
------------------------------
「$CIRCUIT」というフォルダが存在するか否か、存在すれば次のチェック項目へ、存在しなければ処理終了というような単純な構文なのですが、
このif文内に、"そのようなフォルダはありません"アラートを表示させるような記述を追加することは可能でしょうか?

サンプルURLや情報等お持ちの方いらっしゃいましたら、
よろしくお願いいたします。

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというも...続きを読む

Aベストアンサー

ウェブ上でアラートを出すなら
print <<END;
<script>
alert('メッセージ');
</script>
END
とかしてみたらどうでしょう。
(未確認自信なし)

QINPUTでデフォルト値(数値)をあらかじめセットしておきたい

INPUT時に入力BOXへ入力しますが、ここにあらかじめ数値をセットしておきたいと思います。
どのようにするのでしょうか?
通常だと空白なので、そこに手で「123」のように入力しないとだめなのですが、あらかじめ「123」を入れておいて入力の簡便化を図りたいと思います。
よろしくお願いいたします。

Aベストアンサー

# 状況の説明を適切にしましょう
> tokcodeという項目名に「123」が入っている場合に項目名で指定する方法がわかりません。

クライアントスクリプトで処理する事お望みですか?
それとも サーバーサイドの動的な変更をお望みなのでしょうか

それにより処理法方が異なります

クライアントサイドならVBScriptやJavaScriptを記述して希望するイベント条件でエレメントを特定しデータを取得、更新します

たとえば ページが完成した場合なら bodyタグ(またはWindow)のonloadイベントで処理します
< script type="text/javascript" >
function myLoad()
{
  var objSrc, objTrg;
  objSrc = document.getElementById("tockcode");
  objTrg = document.getelementById("txt1");
  if ( ( objSrc != "undefined" ) && (objTrg != "undefined" ) ){
    objTrg.value = objSrc.value;
  }
}
window.onload = myLoad;
</scriipt>
といった具合になります

サーバーサイドの場合 tockcodeの詳細が不明なので …
<%
dim sTockCodeValue
sTockCodeValue = サーバサイドでtockcodeからデータを取得
%>
<input type="text" id="txt1" value="<%= sTockCodeValue %>">
といった記述でしょう

# 状況の説明を適切にしましょう
> tokcodeという項目名に「123」が入っている場合に項目名で指定する方法がわかりません。

クライアントスクリプトで処理する事お望みですか?
それとも サーバーサイドの動的な変更をお望みなのでしょうか

それにより処理法方が異なります

クライアントサイドならVBScriptやJavaScriptを記述して希望するイベント条件でエレメントを特定しデータを取得、更新します

たとえば ページが完成した場合なら bodyタグ(またはWindow)のonloadイベントで処理します
< sc...続きを読む

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

QCGIに渡しているパラメータを表示させたくない

現在 xxx.cgi?para1=aaa&para2=bbb
といったようにパラメータを渡して動いているCGIがあります。
このCGIの変更は無理な状況で(仕様変更にお金がかかるので...)
渡しているパラメータを隠したいと思っています。

とりあえず考えたのがもうひとつ別のCGIを作って
そこでJava Scriptで本来のURLに飛ばす処理でしたが、
JavaScriptを無効にされたり、リンク先を保存されたりしたらわかってしまいます。

何かいいアイデアはないでしょうか?

Aベストアンサー

<FORM method="POST" action="cgi-bin/xxx.cgi" name="F1" target="_blank">

でできませんか?
意味が違うのかな。

そのCGIはPOST、GETどちらでも引数が読み出せるようになっているのでしょうか?
この、method="POST"をmethod="GET"に置き換えて実行してみてください。GETで動作してPOSTで動作しない場合は
CGIの修正が必要です。
下記参考URLにGETとPOST時の引数のとり方が載っています。

参考URL:http://tohoho.wakusei.ne.jp/wwwcgi3.htm#CgiParameter


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報