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とかになってて欲しいのですが。 このあたりが、いけないのでしょうか。
|