初歩的な質問で申し訳ございません。配列でデータを入力し、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と関連する良く見られている質問

QCなどで要素の数が固定できない配列はどうやって実現しますか?

配列について質問します。

BASIC系では配列は動的配列で要素の数が自由に変えられます。
ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。
もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか?
どのように実現するのでしょうか?
配列と同じ使い勝手なら配列でなくともかまいません。

今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。

よろしくお願いいたします。

Aベストアンサー

malloc等のメモリ確保はNo.1さんの回答のリンクが詳しいですね。
C言語でプログラムを組む場合は、大抵はこれらメモリ操作関数のお世話になります。

これに加えて、C++やJavaのライブラリでは、動的配列クラスというものが使えます。
C++だとvectorやlist、JavaだとVectorやArrayListあたりですね。
他にも、言語や環境に依存したライブラリ、フレームワークで
様々な動的配列の機構が用意されていたりします。

簡単にまとめると、
・malloc、free、realloc等を使う方法 → ReDim
・動的配列クラス → Collection
のようなものだと考えてください。

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

QC#かJavaで、配列の中から別の配列を探し出す

お世話になります。

C#かJava(CやC++は入れない)で、特定の配列の中に、該当する
配列があるかどうかを調べるメソッドがあれば、教えてください。

例えば…

int[] a={0,0,0,1,2,3,4,5,6,7};
int[] b={3,4,5};

ならば、『5』が返ってくるなどです。

力技では、aの配列を順にみていき、bの一番目と同じなら、
お互いの配列の次の要素を比較…などとやっていくのですが、
これらの方法を、標準のメソッドがあれば…と思い、
質問させていただきました。

以上、よろしくお願いいたします。

Aベストアンサー

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の先頭の添字だけ欲しい場合
listA.indexOf(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の最後の添字だけ欲しい場合
listA.lastIndexOf(b[index]);

最初に見つかる添字だけ欲しいなら標準ライブラリで取得できますが、
全添字が欲しいとなると途端に泥臭くなります。

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオ...続きを読む

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

QC言語の2次元配列 容量が大きすぎる場合の対処方法

私はC言語をもちいて2次元配列を作ろうとしています。

しかし、配列数が double c[10000][10000];
と大きいものにすると、エラーになってしまいます。

もちろん小さい double c[10][10];
のような配列では問題ありません。

malloc関数とかも調べたのですがなかなかいい文献が見つからずに
困っています。
どうかいいご意見があればよろしくお願いします。

Aベストアンサー

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fread(&c, 1,8, fp);
 return c;
}

void write_c(FILE *fp, double *c, int x, int y) {
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fwrite(c, 1,8, fp);
}

int main(void)
{
 FILE *fp;
 double c,s;
 int x,y;
 int a[10000],b[10000];
 
 fp = fopen("c.dat","w+b");// double c[10000][10000]; の意味
 
 for(x=0; x<10000; x++) {
  for(y=0; y<10000; y++) {
   c=a[x]*b[y];
   write_c(fp, &c, x,y);// c[x][y]=a[x]*b[y]; の意味
  }
 }
 
 for(x=0; x<10000; x++) {
  s=0;
  for(y=0; y<10000; y++) {
   s += read_c(fp, x,y);// s += c[x][y]; の意味
  }
  b[x] = s / 10000;
 }
 
 fclose(fp);
 return 0;
}

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);...続きを読む

Q$yerr = "$year (Y)"; と記述していいでしょうか?

「" "」の中で、かっこ「( )」を使っても問題ないですか?
エスケープが必要でしょうか?

Aベストアンサー

> $yerr = "$year (Y)";
のような、単なる文字列の文字としてカッコを使う分には、エスケープの必要はありません。
エスケープしなければならないのは、「$ 自身」と「@ 自身」くらいでしょう。
(これらは "~" の中では変数展開されてしまうので、エスケープする必要があります。)

Qc言語の配列の先頭アドレスが偶数アドレスとなる理由について

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
printf("%p\n",&nc);
printf("%p\n",&nd);


}

実行結果
0xbffff8cf
0xbffff8ce
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8b0 0xbffff8b1 0xbffff8b2 ← S配列
0xbffff8af
0xbffff8ae

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
pr...続きを読む

Aベストアンサー

メモリの配置はコンパイラとコンパイルオプションに依存します。
デフォルトだと、32ビットのメモリ処理単位=4バイトとか8バイトが多いかと。
理由は32ビットCPUが4バイト単位でメモリにアクセスするのでアクセス効率を優先したためです。

例えば、
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8ce 0xbffff8cf 0xbffff8d0 ← S配列
だとしたら、S配列の内容全てを参照するためにCPUは0xbffff8ccと0xbffff8d0の合計8バイトにアクセスする必要が出てきます。無駄ですよね。

Q$postflag=1とか$flag=1とかってなにを意味しているの?

CGIでperlを勉強してます。

アンケートフォームや掲示板などのデコード処理の中によく、$postflag=1;とか$flag=0;とか出てくるんですけど、この変数はなにを意味しているのですか?

Aベストアンサー

勉強を始めたばかりの方とお見受けします。
小難しい説明だと理解しづらいですよね。

コーディングの暗黙的ルールとして
flag(フラグ)というものは1か0です。(またはtrue/false、真/偽、on/off、などなど。。。)
つまり2者択一をする場合の判定条件に使われる変数だと思ってください。

例えば性別を選ばせるアンケートフォームがあるとします。
で、女性と回答された場合のみ割引サービスの画面を見せたいって場合などに
フラグを利用します。$seibetsu_flagとでもしましょう。
基本は$seibetsu_flag=0ですが"女性"と選択された場合のみ$seibetsu_flag=1となるよう
プログラムを組んでおけば、後の処理で、


if ($seibetsu_flag=1) {

  ★女性なのでサービス画面表示する処理

}
else {

  ★男性なので通常処理

}


こんな感じで判定することができますよね。
$postflagは名前から察するにNo.3さんの回答の用途だと思いますよ。

勉強を始めたばかりの方とお見受けします。
小難しい説明だと理解しづらいですよね。

コーディングの暗黙的ルールとして
flag(フラグ)というものは1か0です。(またはtrue/false、真/偽、on/off、などなど。。。)
つまり2者択一をする場合の判定条件に使われる変数だと思ってください。

例えば性別を選ばせるアンケートフォームがあるとします。
で、女性と回答された場合のみ割引サービスの画面を見せたいって場合などに
フラグを利用します。$seibetsu_flagとでもしましょう。
基本は$seibets...続きを読む

QC言語でunsigned char配列を連結する方法ってありますか?

C言語でunsigned char配列を連結する方法ってありますか?

例えば
unsigned char test[]={0x00,0x02,0x03};
unsigned char test2[]={0x05,0x06};
という配列があったとして

test[]という配列のあとにtest2の配列を追加することは可能でしょうか?
{0x00,0x02,0x03,0x05,0x06}という配列になればOKです。

よろしくお願いします。

Aベストアンサー

testの領域は3バイトのため、それ以上の配列を追加することは出来ません。
もし、testのサイズが5バイト以上あれば、test2を追加することは、できます。
その場合は、memcpy(&test[3],test2,2); とすれば、
testの4バイト目からあとに、test2の2バイトが追加されます。
新たに配列を作成して良いなら、
unsigned char test3[5];として
memcpy(test3,test,3);
memcpy(&test3[3],test2,2);
とすれば、test3はtestとtest2を連結したものとなります。

Q{ ; }とは、どういう意味?

現在読んでいるスクリプトに以下のような部分があります。
---------------------
if($FORM{'name'} ne ''){
・・・・・・・・・・・・・・・・
・・・・(略)・・・・・・・・・
}else{ ; }
----------------------
最後の部分{ ; }とは、どういう意味でしょうか?

Aベストアンサー

No1さんも答えてますが、これだけでは何もしません。
なので、書くだけ無駄なので

if($FORM{'name'} ne ''){
・・・・・・・・・・・・・・・・
・・・・(略)・・・・・・・・・
}

でいいわけです。

if文は

if(条件式){
条件式が"真"だったときの処理
}else{
条件式が"偽"だったときの処理
}

です。

;はプログラムとしての改行に使われます。


人気Q&Aランキング

おすすめ情報