未解決の記事

2016/09/12 09:50
題:パラメータの名前の取り出しができない
名:秀seven
ID:gs063Ff6eEV0
問合せフォームでメール送信処理で行き詰っています。以下のCGIソースで、6行目のデバックでは、以下の結果が返ってきますが、7行目のName指定では、値がブランクになり、エラー処理に移ってしまいます。また35行目のPushで配列に追加していますが、デバックで$value[$i]も値が取れています。ご教示下さい。デバック結果mode=sendmessage=あname=ああああ ああkana=いいいい いいいcgiソース抜粋1 my %form;2 Main();34 sub Main {5 &FrmDcd;6 &debug(@{$form{'POSTDATA'}}[0]);7 my $mode = @{$for...
全文 メンテ
No.1 2016/09/14 08:02
名:名無しさん
デバッグする位置を「# 配列に内容をpush」のあとくらいにして確認してみてください。CGI.pmだと思いますが、POSTDATAはPOSTで送信された内容をそのまま表示しますので、CGI.pmは値を受け取れていますが、その後、エスケープしたりの後でおかしいのではないかと思います。ひとまず sub FrmDcd の末尾あたりでデータが正しく格納されているか確認し、格納されているのであれば、sub Main で参照できないということなので、対象の配列をourにするなどして参照できるようにします。sub FrmDcd末尾でも参照できない場合は、取り出し方か、エス...
全文 メンテ
No.2 2016/09/14 14:06
名:名無しさん
ご指摘、ありがとうございます。35行目にPush前のデバッグと36行目にPush後のデバックをいれた結果、Push前はmode=sendmessage=あ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/&/&am...
全文 メンテ
No.3 2016/09/14 14:17
名:名無しさん
配列と連想配列がごっちゃになってる気がしますが、pushは配列の末尾に要素を追加するので、以下のように行います。(配列 @array の末尾に '文字列' を追加)push(@array,'この要素を末尾に追加');対して連想配列はキーを元に要素を扱いますので、以下のように値を入れます。(連想配列 %Hash のキー five に 5 を代入)$Hash{five} = 5;このあたりを確認してみてください。
メンテ
No.4 2016/09/14 16:12
名:名無しさん
早々のご回答、有難うございます。連想配列ですね。push(@{$form{$field}},$value[$i]);デバックでは$value[$i]の値はちゃんと入っていますし、要素の$filedに何がはいっているかデバックしたら、POSTDATAとなります。予想は、modeとかmessageとかになってて欲しいのですが。このあたりが、いけないのでしょうか。
メンテ


返信フォーム


題名 (必須)


名前


パスワード


本文(必須)


状態の設定






掲示板に戻る