初歩的な質問で申し訳ございません。配列でデータを入力し、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-空(空白)
。。。
にです。

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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

配列を利用するのではなく、この場合は、$data_1や$data_2などの変数を利用するのが無難です。

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

尚、PHPを使えば、abparkさんが書かれたような「配列」を利用することが出来ます。
    • good
    • 0
この回答へのお礼

X-Terra様
ありがとうございました.
自分も配列ができなかったので、$data_1。。。の方法をとっては
見ましたが、できなかったので質問しましたが、コメントのあと
もっとやってみるとできました.
本当にありがとうございます.
以下のようにしました.

sub correct {
print "Content-type: text/html\n\n";
print "data1-list->$data1<>$data2<>$data3<p>\n\n";
for ($i=1;$i<=3;$i++) {
$da = "data$i";
print " $i-> $$da <br>\n\n";
}
}

//結果は
data1-list->test1<>test2<>test3
1-> test1
2-> test2
3-> test3
以上でできました.

お礼日時:2001/12/11 12:53

HTMLが問題で、name の値に [ があるからだと思いました。



<html>
<input name=inp value=test01>
<input name=inp[0] value=test02>
<button onClick=alert(inp.value)>inp</button>
<button onClick=alert(inp[0].value)>inp[0]</button>
<html>
    • good
    • 0
この回答へのお礼

A__様
ありがとうございました.
コメント、役に立ちました.

お礼日時:2001/12/11 12:55

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

QPerlのCGIでフォームのテキスト配列をPerlで取得するには?

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが配列になった場合、
#<input type="text" name ="namae">
#<input type="text" name ="namae">
#<input type="text" name ="namae">
# のような場合、3件取得する場合

exit;

__END__

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが...続きを読む

Aベストアンサー

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
------------------------------------------------

例) CGI.pmを使う場合 --------------------------------
use CGI;

$query = new CGI; # 新しいCGIオブジェクトの作成
@hoge = $query->param('hoge'); # パラメータhogeの内容の受け取り
------------------------------------------------

参考URL:http://www.futomi.com/lecture/form/cgilib.html#3.2,http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_THE_VAL

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
---------------------------------------...続きを読む

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]\">";
}
とか?

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...続きを読む

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QPHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。
プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、

例えば

<form method="POST" action="○○○">
<input type="checkbox" name="color[]" value="赤" />赤<br />
<input type="checkbox" name="color[]" value="青" />青<br />
<input type="checkbox" name="color[]" value="緑" />緑<br />
<input type="submit" value="送信" />

とこのように書いてすべてにチェックを付けて送った配列のデータはどのように取り出したら良いのでしょうか?
foreachで下記のように、

$x = $_POST['color'];
foreach( $x as $value ){
echo "色 = ". $value."<br />\n";
}
exit;

$_POST['color']の配列を取り出そうすると

Invalid argument supplied for foreach()

と表示されてしまいます。
var_dumpで配列を表示させると、

string(3) "Array"

と表示され確かに配列として届いていると思います。
確かにチェックはいれて送信もしています。
print "{$_POST['color']}"で表示してみると、"A"と"r"と"r"でした。

チェックボックスを10個に増やして、それぞれ$_POST['color'][0]~[9]まで
表示させてみたところ、はじめの5個はArrayも文字がいつつ表示され、残りは空白でした。

知恵袋のほうで、取り出し方が間違っているとの指摘をいただきましたが、どのように取り出したら良いのでしょうか。
どなたかお手数ですが、教えていただけないでしょうか。
よろしくお願いします。

PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。
プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、

例えば

<form method="POST" action="○○○">
<input type="checkbox" name="color[]" value="赤" />赤<br />
<input type="checkbox" name="color[]" value="青" />青<br />
<input type...続きを読む

Aベストアンサー

ご質問のコードは、合ってる気がします。

その記述のほかに、何か別のロジックかましてないですか?
例えばですが、magic_quotes_gpcの対策コードですとか、文字コードを一括で変換するコードですとかそういうものです。

$_POST['color']に含まれるべき配列を、変な変換処理を行っているために、文字列「Array」に変換されてしまっているようです。

PHPは、
<?php
$arr = array('a', 'b', 'c');

//上記の配列を

echo $arr;

//とすると、出力結果は、「Array」と文字列が表示されます。


?>

一度、ご質問のコード以外の場所を確認してみてください。

Q数値かどうかの判定方法

$aに代入されているものが数値かどうかを判定するにはどのようにしたらよいのでしょうか?

Aベストアンサー

$a =~ /^[0-9]*$/
上記の場合、*は「直前のパターンの0回以上の繰り返し」の意味なので、0から9がなくても、つまり$aが空でもマッチしてしまいます。
なので、
$a =~ /^[0-9]+$/
としましょう。
(+は「直前のパターンの1回以上の繰り返し」)
また、0-9は\dで表すこともできるので
$a =~ /^\d+$/
と書くこともできます。

Qcgi 実行時のエラー

perl初心者でまた質問させていただきます。「送信」ボタンをクリックすると、HPで入力してもらった情報をメールで送信するcgiを作成しました。ただ、実行すると、
Can't locate object method "new" via package "Net::SMTP" (perhaps you forgot to load "Net::SMTP"?) at C:\www\cgi-bin\downloadmail.cgi line 62.
というエラーが出ます。
cgiは、
my $smtp = Net::SMTP->new($192.1.1.1);
$smtp->mail($email);
$smtp->to($to);

$smtp->data();
$smtp->datasend("From:$email\n");
$smtp->datasend("To:***@***.co.jp\n");
$smtp->datasend("Subject:テストメール\n"); #件名
$smtp->datasend("Content-Type: text/plain; charset=iso-2022-jp\n\n");
$smtp->datasend("テストメール\n");
$smtp->dataend();
$smtp->quit;
というものです。どなたか分かりましたらお願いします。

perl初心者でまた質問させていただきます。「送信」ボタンをクリックすると、HPで入力してもらった情報をメールで送信するcgiを作成しました。ただ、実行すると、
Can't locate object method "new" via package "Net::SMTP" (perhaps you forgot to load "Net::SMTP"?) at C:\www\cgi-bin\downloadmail.cgi line 62.
というエラーが出ます。
cgiは、
my $smtp = Net::SMTP->new($192.1.1.1);
$smtp->mail($email);
$smtp->to($to);

$smtp->data();
$smtp->datasend("From:$email\n");
$smtp->datasend...続きを読む

Aベストアンサー

Net::SMTPモジュールのロードを指示する
use Net::SMTP;
は書いてある?

1行目の
#!/usr/bin/perl
の下あたりに
use Jcode;
って書いてあると思うので、そこを
use Net::SMTP;
use Jcode;
にしましょう。

Qフォームで同じ複数のnameで違うvalueの送信

始めまして、現在一個のフォーム内で複数の同じnameで、違うvalueを送信しようと苦戦しております、、普通にタグを書くだけでは
一個のnameで違うvalueの送信は、最後のvalueしか送信できないです、
phpは使用できません。javaは、、殆ど素人なので、あまり分かりません、、formを一個一個区切るのも、レイアウト上できません、、
どうすればいいのでしょうか?・・・以下タグです。
昨日から、ここから先に進めません。。
先輩方助けてください、本当によろしくお願いします。

<form action="http://hoge.net/hoge/hogecheck.php" method="post">
<input type="hidden" name="site" value="hoge">
<input name="id" type="text" id="idform" maxlength="10" />

<input type="hidden" name="kin" value="3000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="5000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="10000">
<input type="image" src="buybtn.gif" />
<input type="hidden" name="kin" value="20000">
<input type="image" src="buybtn.gif" />

</form>

始めまして、現在一個のフォーム内で複数の同じnameで、違うvalueを送信しようと苦戦しております、、普通にタグを書くだけでは
一個のnameで違うvalueの送信は、最後のvalueしか送信できないです、
phpは使用できません。javaは、、殆ど素人なので、あまり分かりません、、formを一個一個区切るのも、レイアウト上できません、、
どうすればいいのでしょうか?・・・以下タグです。
昨日から、ここから先に進めません。。
先輩方助けてください、本当によろしくお願いします。

<form action="http://hoge...続きを読む

Aベストアンサー

No.2の回答者です。
スミマセンm(__)m、Javaでしたね。PHPで書いてしまいました。。。

Java だったらこれで取れます。(HTML側の修正は不要です。)
String[] kin= req.getParameterValues("kin");

QJavaScriptにて動的に配列を作成して、POSTで渡したい

独学でJavaScriptの勉強をしているものです。
勉強用に作っているサイトにて、どうしてもやり方がわからないことがあるので、教えて下さい。

以下のようなフォームがあったとします。

<form name="testForm1">
<input type="hidden" name="id" value="1" />
<input type="checkbox" name="check" />
</form>

このフォームは動的に複数作成され、idのvalueはフォームごとに別の値が入ります。

それで行いたいことは、複数あるtestForm1から、チェックボックスにチェックが付いているidだけを取得して、別のページにPOSTで渡したいんです。

以下のようなスクリプトを書いたのですが、思うように動作してくれませんでした。

<form action="hoge" name="testForm2" method="post">
<input type="hidden" name="id" />
</form>

function func() {
var idArray = new Array();
for ( count = 0; count < document.testForm1.length; count++ ) {
if ( document.testForm1.check.checked == true ) {
idArray.push( document.testForm.id.value );
}
}
document.testForm2.id.value=idArray;
document.testForm2.submit();
}

JavaScriptに関しては独学で必要に応じて勉強している感じで、あまり基礎がわかっておらず、もしかしたらかなり的外れな質問になってしまっているかもしれませんが、どうか宜しくお願い致します。

独学でJavaScriptの勉強をしているものです。
勉強用に作っているサイトにて、どうしてもやり方がわからないことがあるので、教えて下さい。

以下のようなフォームがあったとします。

<form name="testForm1">
<input type="hidden" name="id" value="1" />
<input type="checkbox" name="check" />
</form>

このフォームは動的に複数作成され、idのvalueはフォームごとに別の値が入ります。

それで行いたいことは、複数あるtestForm1から、チェックボックスにチェックが付いているidだけを取得し...続きを読む

Aベストアンサー

<input type="checkbox" name="fuga" value="xxxx">
<input type="checkbox" name="fuga" value="xxxx">
<input type="checkbox" name="fuga" value="xxxx">
<input type="checkbox" name="fuga" value="xxxx">


var a = document.getElementsByTagName( 'fuga' );
var c , o, b = [ ];

for( c = 0; o = a[ c++ ]; ) if( a.checked ) b.push( a.value );
document.getElementById( 'yyyy' ).value = b.join(',');
とか。

Qhiddenで送ったデータの取り出し方

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ベストアンサー

例えば、
<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} とするのは可能です。


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

人気Q&Aランキング