Re: パラメータの名前の取り出しができない
( No.1 ) |
- 日時: 2016/09/14 08:02
- 名前: 名無しさん
- デバッグする位置を「# 配列に内容をpush」のあとくらいにして確認してみてください。
CGI.pmだと思いますが、POSTDATAはPOSTで送信された内容を そのまま表示しますので、CGI.pmは値を受け取れていますが、 その後、エスケープしたりの後でおかしいのではないかと思います。
ひとまず sub FrmDcd の末尾あたりでデータが正しく格納されているか確認し、 格納されているのであれば、sub Main で参照できないということなので、 対象の配列をourにするなどして参照できるようにします。 sub FrmDcd末尾でも参照できない場合は、取り出し方か、エスケープの不備かもしれません。
|
Re: パラメータの名前の取り出しができない
( No.2 ) |
- 日時: 2016/09/14 14:06
- 名前: 名無しさん
- ご指摘、ありがとうございます。
35行目にPush前のデバッグと 36行目にPush後のデバックをいれた結果、 Push前は
mode=send message=あ name=ああああ ああ kana=いいいい いいい
Push後は 空白でした。
pushの記述がおかしいのでしょうか。
15 sub FrmDcd{ 16 my $query = new CGI; 17 foreach my $field ($query->param) { 18 my @value = $query->param($field); 19 for (my $i=0; $i < @value; $i++) { 20 # 不都合な文字を取り除く 21 # tab,&,",<,>をエスケープ 22 $value[$i] =~ s/\t//g; 23 $value[$i] =~ s/&/&/g; 24 $value[$i] =~ s/"/"/g; 25 $value[$i] =~ s/</</g; 26 $value[$i] =~ s/>/>/g; 27 $value[$i] =~ s/,/ /g; 28 # 改行コード(CR,LF,CRLF)を<BR>に変換 29 $value[$i] =~ s/\x0D\x0A/<BR>/g; 30 $value[$i] =~ s/\x0D/<BR>/g; 31 $value[$i] =~ s/\x0A/<BR>/g; 32 # 文字コードを変換(条件によって使い分ける) 33 jcode::convert(\$value[$i], 'sjis'); 34 # 配列に内容をpush 35 #&debug($value[$i]); 36 push(@{$form{$field}},$value[$i]); 37 #&debug(@{$form{'mode'}}[0]); 38 }#for 39 }
|
Re: パラメータの名前の取り出しができない
( No.3 ) |
- 日時: 2016/09/14 14:17
- 名前: 名無しさん
- 配列と連想配列がごっちゃになってる気がしますが、pushは配列の末尾に要素を追加するので、以下のように行います。
(配列 @array の末尾に '文字列' を追加)
push(@array,'この要素を末尾に追加');
対して連想配列はキーを元に要素を扱いますので、以下のように値を入れます。 (連想配列 %Hash のキー five に 5 を代入)
$Hash{five} = 5;
このあたりを確認してみてください。
|
Re: パラメータの名前の取り出しができない
( No.4 ) |
- 日時: 2016/09/14 16:12
- 名前: 名無しさん
- 早々のご回答、有難うございます。
連想配列ですね。
push(@{$form{$field}},$value[$i]);
デバックでは$value[$i]の値はちゃんと入っていますし、
要素の$filedに何がはいっているかデバックしたら、 POSTDATAとなります。
予想は、modeとかmessageとかになってて欲しいのですが。 このあたりが、いけないのでしょうか。
|