• 締切済み

単純なお問い合わせフォーム

お問い合わせのフォームを作り、確認、最後にメールを飛ばす仕組みを作っているのですが、メールにインプットされたデータが入ってこない状態で届きます。どうか助けてください。(息切れ) *下記参照 #フォームの情報を初めに格納する所 省略 #-------------------------------↓ if ( $ACT eq 'ckt' ){ &kakunin; } elsif ( $ACT eq 'ckt2' ) { open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; # すべてのデータについて繰り返す foreach (@all){ # 1行の文字列をコロンを目印にして項目に分割する ($firstname) = split(/:/, $_); # 1件分のデータを表示するサブルーチン &sendmail; } close(KEIJI); #------------------------------------↑ sub kakunin{ $new_data = "$firstname\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データを追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書きこみ完了メッセージ &write_ok; exit; } sub sendmail { #以下省略メール送信プログラム exit; }

みんなの回答

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

外していたらごめんなさい。(^_^; ReadParse(*in);以下の処理   ↓ ReadParse; while(($k,$v) = each %in) {  &jcode'convert(*v,"sjis");  $in{$k} = $v; } #フォームの情報を初めに格納する所 $ACT = "$in{'ACT'}"; $name = 'お問合せ'; $from = "$in{'from'}"; $subject = 'お問合せ'; $body = 'お問合せ'; #●オリジナル挿入開始 $firstname = "$in{'firstname'}"; $to = 'love-0720@nifty.com'; としてみて下さい。 尚、念のためsendmailの print MAIL "TO: $to\n"; も   ↓ print MAIL "To: $to\n"; にしておいて下さい。 また、print MAIL "Content-Type: text/plain;\n\n"; の前に print OUT "Content-Transfer-Encoding: 7bit\n"; があった方が良いかもしれません。 お試し下さい。 #本当はopen(MAIL, "| /usr/lib/sendmail -t"); にもエラー処理があった方が良い様な気がしますが・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

とりあえず質問内容と記載されているソース部分が合致していない気がします。 まずはフォームの値読み出し(ReadParse)から加工と、実際のメール送信部分を記載された方が良いですよ。(^_^)

gcc
質問者

補足

サブルーチン全部のソースを下記に示しました。 全体的な動きは最初に書いたとおりになっています。 ちなみに一時データ格納場所は*.dataファイルに格納することになっています。 ●補足1 &ReadParse(*in); #フォームの情報を初めに格納する所 $ACT = "$in{'ACT'}"; $name = 'お問合せ'; $from = "$in{'from'}"; $subject = 'お問合せ'; $body = 'お問合せ'; #●オリジナル挿入開始 $firstname = "$in{'firstname'}"; $to = 'love-0720@nifty.com'; ●補足2 sub sendmail { #送信前処理 &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); # send mail open(MAIL, "| /usr/lib/sendmail -t"); print MAIL "TO: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "\n"; print MAIL "---------------------------------------------\n"; print MAIL " 名前:$name\n"; print MAIL " 内容:$body\n"; print MAIL " お名前:$firstname $secondname\n"; print MAIL " かな:$kanafirstname $kanasecondname\n"; print MAIL " 所在都道府県 :$area1 $area2\n"; print MAIL " 電話番号:$telno\n"; print MAIL " 性別:$sex\n"; print MAIL " メールアドレス:mailto:$mailad\n"; print MAIL "お問合わ、ご相談内容:"; print MAIL " $con1\n"; print MAIL "---------------------------------------------\n"; close(MAIL);

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【再】Cookieを使用してフォームで送信

    #!/usr/local/bin/perl # ライブラリ require 'cgi-lib.pl'; require 'jcode.pl'; require 'keiji_write_sub.pl'; # デコード &ReadParse(*form); # 名前・メッセージ欄のチェック if ($form{'name'} eq "" || $form{'message'} eq "") { # 名前・メッセージが空ならエラー &input_error; # 終了 exit; } else { # 名前・メッセージも空でないなら書込処理 # HTMLタグと衝突する記号を変換 $name = &henkan($form{'name'}); $mail = &henkan($form{'mail'}); $title = &henkan($form{'title'}); $message = &henkan($form{'message'}); $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得る $time = &jp_time; # データを1行に(区切りはコロン) $new_data = "$time:$name:$mail:$title:$message\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データ追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書込完了メッセ &write_ok; } というコードでdatファイルに書き込みしています。 この時に、名前などを1度入力したらCookieに記憶させて次からは自動で入るようにしたいのです。 あちこち検索して読んだりしたのですが、わからなくて…。 どなたか教えてください。

    • ベストアンサー
    • CGI
  • ファイルに書き込めない/ファイルの内容が消える

    編集機能を掲示板につけているところです。 テキストファイルの内容がまったく消えてしまうのです。 どうしてでしょうか? データ形式 314:2006年2月20日(月)22時31分:あああ:いいい:ううう 313:2006年2月20日(月)22時31分:あああ:いいい:ううう 312:2006年2月18日(土)23時18分:あああ:いいい:ううう #コード↓######################################## open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; @all = <KEIJI>; $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # 重複があったら置き換えるルーチン foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); foreach (@all){ print KEIJI $_,"\n"; } flock(KEIJI, 8); close(KEIJI); ~~~~~~~~~~~~~~~~~~~~~~~~ どんどん手をつけていったら書きこめなくなってしまいました。最初は書き込めていたんですけど・・・。 真ん中あたりのじ「重複があったらおきかえるルーチン」を付け加えていたら書き込めなくなりました。書き込めたときはpushではなくunshiftを使っていました。

    • ベストアンサー
    • Perl
  • 新しい書き込みができない、編集は可能。

    たびたび失礼します。 編集機能のついた掲示板を作成中です。 編集機能はつけられたのですが、今度は新しい書き込みができなくなりました。 新しい書き込みをすると、新しいデータが保存されずデータが逆に保存されたり、消えたりします。 ソース↓ open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all = <KEIJI>; # HTMLタグと衝突する記号などを変換 $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; foreach(@all){ $data = $_;     $count = 0; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); $count++; } if( $count == 0 ){ unshift @all_data, $data; } else { push @all_data, $data; } } ################################################ $countで新しいデータか編集かを分岐させたつもりなのですが、ここの処理が上手くいっていないようです。 怪しいのは、 unshift、$dataにちゃんとデータが入っているか、というところが怪しいように感じました。 もしヒントがあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • sendmailができない

    (1)お問い合わせフォームを入力(2)入力データを確認する(3)最後に指定先のメールに送り終了 という具合ですが(3)のところで指定先にメールが届きません。メール自体も送られてこないのですがどのような方法があるのでしょうか?どうか教えていただけないでしょうか?お願いします。 (3)のソースコートです。------------- &header; open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; split(/:/, $_); if( $_ = $all[0] ){ ($time, $name, $mail, $title, $message, $to) = split(/:/); #送信前処理 &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); # send mail open(MAIL, "| /usr/lib/sendmail -t"); print MAIL "TO: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "\n"; print MAIL "---------------------------------------------\n"; print MAIL " 名前:$name\n"; print MAIL " 内容:$body\n"; print MAIL " お名前:$firstname $secondname\n"; print MAIL " かな:$kanafirstname $kanasecondname\n"; print MAIL " 所在都道府県 :$area1 $area2\n"; print MAIL " 電話番号:$telno\n"; print MAIL " 性別:$sex\n"; print MAIL " メールアドレス:mailto:$mailad\n"; print MAIL "お問合わ、ご相談内容:"; print MAIL " $con1\n"; print MAIL "---------------------------------------------\n"; close(MAIL); &one_message; } close(KEIJI); # フッターを表示するサブルーチン &footer;

  • カウンターで重複カウントの防止について

    勉強がてら以下のようなカウンターをつくりたいと思っています。 1 画像つきのカウンタである 2 重複カウンタを防止したい 3 昨日と今日のカウンターも表示させたい で、2でけつまずきました。 何がいけないのでしょうか? 以下のプログラムだと更新毎にカウンターが回ってしまいます。 ご指摘下さい。よろしくお願い申し上げます。 #!C:\Perl\bin\perl $flg = 0; #IPアドレスの取得と重複カウントの防止============ $ipadd = $ENV{'REMOTE_ADDR'}; #IPアドレスの取得 open (FILE, "<logcount.dat") || die "File Open Err!-logcount.dat\n"; #データをすべて配列logdataに読み込む @logdata = <FILE>; close(FILE); #取得したIPアドレスと履歴のIPアドレスを比較====== for($i=0; $i<=$#logdata; $i++){ if($ipadd eq $logdata[$i]){ #新規のIPデータと過去ログのIPデータが等しかったら $flg = 1; #合致するのは1つのアドレスのみ } } #==================================================================== # $flg = 0 だったら、数をカウント #==================================================================== open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; #カウントデータの読み込み $count = <FILE>; #変数countにデータを収納 close(FILE); if($flg == 1){ $data = $count; }else{ $data = ++$count; #プラス1をカウント # ログの更新================================== open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); seek(FILE, 0, 0); #.datに上書き保存する為にデータの記位置を調整 print FILE $data; #カウントを記録 flock(FILE,8); close(FILE); # IPアドレスを更新============================= open (FILE, ">>logcount.dat") || die "File Open Err!-logcount.dat\n"; print FILE $ipadd,"\n"; close(FILE); } print $data; #==================================================================== # カウンタの数字に画像を付ける #==================================================================== @count = split(//, $data); foreach $cou(@count){ push(@view, "./img/$cou.gif"); } require "./gifcat.pl"; print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view);

    • ベストアンサー
    • Perl
  • flockについて

    ファイルを読み書きする場合に使用するflockですが、closeする前に別ファイルのflockは使用できるのでしょうか? テストしてみたところ、うまくいってるような気もするのですが、確証が持てないので質問させていただきました。 例) $file1="file1.txt"; $file2="file2.txt"; open(OUT,"+<$file") flock(OUT,2); $count1=<OUT>; open(DAT,"<$file2") flock(DAT,1); $count2=<DAT>; close DAT; $count=$count1+$count2; truncate(OUT,0); seek(OUT,0,0); print OUT "$count "; close OUT; ちょっとあえて複雑な書き方としてみましたが、上記のようにflockを使ってる最中に別ファイルのflockを使用することは出来ますでしょうか? 参考URLでも結構ですので、どなたかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 全行読み込むには

    open( IN, "pass.dat" ) or die "Can't open pass.dat: $!"; $f_data = <IN>; close( IN ) or die "Can't close pass.dat: $!"; $f_data1 = $f_data; $f_data2 = $f_data; $f_data1 =~ s/<br>//g; $f_data2 =~ s/\S//g; open( OUT, ">log.dat" ) or die "Can't open log.dat: $!"; select OUT; print "$f_data1"; print "$f_data2"; select STDOUT; close( OUT ) or die "Can't close word.js: $!"; 上記スクリプトでは、pass.datの一行目しか読み込まれません。全行を読み込むためにはどのように書き換えればいいのでしょうか?宜しくお願いします。

    • ベストアンサー
    • Perl
  • 2つのデータを統合を効率よく出来ません

    2つのデータを統合を効率よく出来ません 2つのデータを統合するプログラムをperlで作成しています。 データはテキストでサーバー環境にあります。 クラスデータ 1,1-1,1年 2,1-2,1年 3,1-3,1年 4,2-1,2年 5,2-2,2年 6,3-1,3年 7,3-2,3年 名前データ 1,田中,たなか 2,伊藤,いとう 3,斎藤,さいとう 4,上野,うえの 5,大阪,おおさか 6,福島,ふくしま 7,矢部,やべ 最終データ 1,田中,たなか,1-1,1年 2,伊藤,いとう,1-2,1年 3,斎藤,さいとう,1-3,1年 4,上野,うえの,2-1,2年 5,大阪,おおさか,2-2,2年 6,福島,ふくしま,3-1,3年 7,矢部,やべ,3-2,3年 以下のプログラムで動作させていますが、件数が多くなると非常に非効率となり動作しなくなります。 ※公開用にプログラムを修正しています。おかしい部分があるかもしれません。 (ここから) 略・・・ open(DB10,"<$namefile") || next; flock(DB10, 1); @lines10 = <DB10>; close(DB10); foreach $lines10 (@lines10) { ($seq,$name,$kana,$classnew,$nennew) = split("<>", $lines10); open(DATA,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA,1); @lines11 = <DATA>; close(DATA); foreach $lines11(@lines11){ ($seq1,$class,$nen) = split("<>", $lines11); $classnew = $class; $nennew = $nen; open(DATA1,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA1,1); @line21 = <DATA1>; close(DATA1); foreach $line21(@line21){ local(@val) = split("<>", $line21); if($seq1 == $val[0]){ $line21 ="";} push(@new,"$line21"); } push(@new,"$seq1<>$class<>$nen\n"); open(DATA1,">$classfile")|| die &error(" $classfile をwrite出来ません "); flock(DATA1,2); print DATA1 @new; close(DATA1); @new = ""; } @new1 = ""; open(DB12,"<$namefile") || &error("Can't open $namefile"); flock(DB12, 1); @line12 = <DB12>; close(DB12); foreach $line12 (@line12) { local(@val1) = split("<>", $line12); if($seq == "$val1[0]"){ $line12 ="";} push(@new1,"$line12"); } push(@new1,"$seq<>$name<>$kana<>$classnew<>$nennew<>\n"); open(DB12,">$namefile")|| die &error(" $namefile をwrite出来ません "); flock(DB12,2); print DB12 @new1; close(DB12); } } (ここまで) プログラムの流れとしては(私が解釈している)、2つのファイルを1件読み込み更新を最終行へ毎回行っているというものになります。 恐らく、もっと効率の良い方法があるとは思っているのですが、アイデアが浮かばす止まってしまいました。 このプログラムではなく別のものでもOKです。私がこの方法しかしらないのでこの記述をしています。 ファイルの更新系でアドバイスがいただけたらと思い書き込みます。 ご指導よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • flockのタイミング

    掲示板のスクリプトを作っています。 ログは1行ごとに1記事分のデータが格納されているので、書き込み処理の場合は、 $lines = file("./log.dat"); としていったん配列にログを読み込み、 array_unshift($lines, $new_data); 等して、新しい記事のデータを配列の先頭に追加し、 $fp = fopen("./log.dat", "wb"); foreach ($lines as $line) { fputs($fp, $_); } fclose($fp); として、最終的にログに書き込みます。 Perlを扱っているときは(複数更新すべきログファイルがあったので)、別途ロックファイルを作ってそれに対してflockをかけるという方法を行っていましたが、今回はログファイルが1つであるのでそのログファイル自体にflockをかけようと思っています。 しかし、fileで最初にopenしているため、ファイルポインタが取得できず、flockをかけるタイミングは、本当の書き込み作業の部分(fopen)からかけるしかなさそうなのですが、これは危険ではないでしょうか? それと、マニュアルに、 注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。 とかいてありますが、この意味がいまいちわからず、困惑しています。

    • ベストアンサー
    • PHP
  • 連想配列で時間短縮したい

    aaa.txt 06011800, 5.3 06012100, 5 06020000, 4.5 06020300, 6.2 … bbb.txt 06011800, 5.1 06012100, 7.5 06020000, 5.1 06020300, 9.3 … という二つのファイルがあります。 以下のプログラムを用いて、 06011800, 5.3, 5.1 06012100, 5, 7.5 06020000, 4.5, 5.1 06020300, 6.2, 9.3 … といった感じでデータを作る事に成功したのですが、どうしてもループに無駄が多く、時間がかかってしまいます。 連想配列などを使えば時間が短縮出来そうなのですが、よくわかりません。 ご教示いただけないでしょうか。 以下、作成したプログラム。 $csvfile1 = $ARGV[0]; $csvfile2 = $ARGV[1]; open(DAT1, $csvfile1) || die $!; while($line=<DAT1>) { chomp($line); @dat = split(/,/,$line); open(DAT2, $csvfile2) || die $!; while($line2=<DAT2>) { chomp($line2); @dat2 = split(/,/,$line2); if($dat[0] == $dat2[0]){ print "$dat[0],$dat[1],$dat2[1]\n"; } } } close(DAT);

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • ブラザー製品のMFC-J6997CDWを購入して1週間経ちましたが、印字が薄くて読みにくいです。
  • 品質チェックは問題なく通っているのに、2枚目から印字が薄くなってしまいます。
  • 返品や交換しても同じ症状が続きます。この印字が薄い原因は何なのでしょうか?
回答を見る

専門家に質問してみよう