こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

KENT-WEBのClipMailでのチェックボックスについて質問です

KENT-WEBのClipMailでのチェックボックスについて質問です。

KENT-WEBで無料配布されているClipMailのVer1.1を使用してメールフォームを設置しているものです。チェックボックスについて教えてください。

チェックボックスにチェックを複数入れ確認画面へ遷移・送信すると、チェックを入れた分のvalue値が、半角スペースを入れた横並び状態で羅列されます。(以下イメージ)
チェック項目 | イベントA イベントB イベントC

しかし、これだと見づらいので、半角スペースではなく、value値ごとに改行されるように表示させたいと思っています(以下イメージ)
       | イベントA
チェック項目 | イベントB
       | イベントC

どこを、どういじればよいのでしょうか?

投稿日時 - 2010-08-28 16:39:01

QNo.6141810

困ってます

質問者が選んだベストアンサー

$hidden_key =~ s/\0/\|/g;

↑これは\0を\|に変更するという正規表現ですので$hidden_keyにしたところは縦棒になるはずです。

$in{$key} =~ s/\0/<br>/g;

↑これは\0を<br>に変更するという正規表現ですので$in{$key}にしたところは改行になるはずです。

縦棒にしたいのは登録&メール送信データですので、$hidden_keyに(メールの改行は<br>ではありません)、
ブラウザ上で改行したいのは、テンプレートに入るほうですので、テンプレートに入るほうを$in{$key}にします。
メールは<br>では改行になりませんので、$hidden_keyで縦棒にしたデータをいったん送り、
sendmail.plの145行目で↓を追加して縦棒を\n\tに変換しています。

$in{$_} =~ s/\|/\n\t/g;
※\nはテキストの改行コードで、\tはインデント用のタブです。

送信メールで<br>が送られるということはhiddenに$in{$key}を入れている場合ですので、
修正部分の記述ミスか古いデータを上書きしないで使っている可能性があります。

FTP上のファイルをもう一度確認してみましょう。

(1)sendmail.plの145行目前後が、

# 本文内容
my $tmp;
if ($in{$_} =~ /\n/) {
$tmp = "$_ = \n$in{$_}\n";
} elsif($in{$_} =~ /\|/) {
$in{$_} =~ s/\|/\n\t/g;
$tmp = "$_ = $in{$_}\n";
} else {
$tmp = "$_ = $in{$_}\n";
}

になっているかどうか。
(2)preview.plの111行目前後が、

$hidden_key = $in{$key};
$hidden_key =~ s/\0/\|/g;
$in{$key} =~ s/\0/<br>/g;
$hidden .= qq|<input type="hidden" name="$key" value="$hidden_key" />\n|;

になっているかどうか。

一見まったく同じように見えても、実は微妙に違っていたということは、
スクリプトに慣れていても、よくありますので、
エディターソフトの検索機能で検索して、
まったく同じかどうかを再確認してみるのも一つの手です。

スクリプトに慣れるまでは気長に触っていくしかないですが、
くじけずがんばってみましょう。

投稿日時 - 2010-09-02 00:12:59

お礼

なるほど、なるほど~。
kuzumiHKさん、わかりやすいご説明ありがとうございます。

ようやく念願叶いました~!!確認画面でも受信メールでも希望通りに改行されてました!

本当に何度も何度もありがとうございました!
このあと教えてもらった事を復習したいと思います。

くじけずに頑張ってみますね♪本当にどうもありがとうございました!
また、よろしくお願いします。

投稿日時 - 2010-09-02 18:30:37

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

おそらく、<br>のままになる理由は、preview.plの

$hidden .= qq|<input type="hidden" name="$key" value="$in{$key}" />\n|;

部分が、

$hidden .= qq|<input type="hidden" name="$key" value="$hidden_key" />\n|; 

に変更されていないからだと思います。
最初の投稿でこの部分の変更をつけ忘れていたからかもしれません。。

$in{$key}は、\0を<br>に変更していますから、こちらを使えば<br>になります。
$hidden_keyは\0を\|に変更していますから、縦棒になるはずです。

投稿日時 - 2010-09-01 22:41:04

お礼

どうもありがとうございました!縦棒「|」区切りで表示することができました。
何度もお答えいただいて恐縮です。

>$in{$key}は、\0を<br>に変更していますから、こちらを使えば<br>になります。
>$hidden_keyは\0を\|に変更していますから、縦棒になるはずです。

これはどういう意味でしょうか?value="$in{$key}"を使えば改行表示で、value="$hidden_key"を使うと縦棒区切り表示という意味なのでしょうか?

value="$in{$key}"を使えば、たしかに縦棒区切り表示になるのですが、value="$hidden_key"を使うと、「改行」ではなく「<br>」(←ローマ字としての<br>表示という意味)となってしまうのですが・・・
できれば、受信メールのほうも、確認画面と同様改行されるようにしたいと思っています。

投稿日時 - 2010-09-01 23:23:38

ANo.3

送信メールに<br>が反映されてしまうのを直すには、
preview.plを下記のように修正する必要があります。

$in{$key} =~ s/\0/ /g;
$hidden .= qq|<input type="hidden" name="$key" value="$in{$key}" />\n|;



$hidden_key = $in{$key};
$hidden_key =~ s/\0/\|/g;
$in{$key} =~ s/\0/<br>/g;
$hidden .= qq|<input type="hidden" name="$key" value="$hidden_key" />\n|;

また、送信メールの結果も改行したい場合ですが、
sendmail.plの145行目を

# 本文内容
my $tmp;
if ($in{$_} =~ /\n/) {
$tmp = "$_ = \n$in{$_}\n";
} else {
$tmp = "$_ = $in{$_}\n";
}



# 本文内容
my $tmp;
if ($in{$_} =~ /\n/) {
$tmp = "$_ = \n$in{$_}\n";
} elsif($in{$_} =~ /\|/) {
$in{$_} =~ s/\|/\n\t/g;
$tmp = "$_ = $in{$_}\n";
} else {
$tmp = "$_ = $in{$_}\n";
}

とすれば、希望の状態に近くなると思います。

チェックボックスの登録データを半角スペースで登録してしまうと、
メッセージなどと区別がつかなくなってしまうため「|」縦棒で区切る形で保存されるように変更しました。

そのことで別の表示画面に影響が出る可能性もあります。
細かいカスタマイズについては、他への影響がいろいろと出てきますので、
スクリプトの内容をある程度は把握する必要が出てくると思います。
その辺は自己責任のうえで変更していただくしかないと思っています。

投稿日時 - 2010-08-29 23:59:11

お礼

お返事が遅くなり申し訳有りません。

該当する箇所を修正しましたが、表示に反映されません・・・
ちなみに「|」縦棒で区切る形にもなりません。

以前と同じ、確認画面では思う通りの改行表示になっているんですが、受信メールにはやはり「<br>」が表示されます。

スクリプトの内容もわからず、何度もお手間をおかけして申し訳ありません。

投稿日時 - 2010-09-01 21:15:21

ANo.2

>$in{$key} =~ s/\t/<br>/g;

たしかにこの部分も記述が似てますね。。
では、$in{$key} =~ s/\t/の部分は修正前に戻していただき、
再度、「$in{$key} =~ s/\0/」で検索してみてください。
微妙に違う\0になっている部分があると思います。
その部分を修正してみてください。

投稿日時 - 2010-08-29 13:20:14

補足

お礼を書いた後に分かりました。

すみません!二重送信は私のミスでした。
私が何度も送信作業をしていたために起こった通常のエラーメッセージでした!!!

しばらく時間をおいてやったら、キチンとできました!!!確認画面で思う通りに改行されていました~。kuzumiHKさん、ありがとうございます!


・・・しかし、また違う問題が・・・

送信ボタンでデータを送信すると、管理人とユーザー双方に申し込み内容のメールがいくようになっているのですが、その表示に問題が。

参加希望 = イベント1<br>イベント2<br>イベント3<br>イベント4

となってしまいます。

メール文でも管理画面と同様改行させて表示させるにはどうしたらいいのでしょうか??
$messageの部分をどうにかするんだと思うのですが・・・
あと少しお力をお貸し下さい!!!

投稿日時 - 2010-08-29 20:24:13

お礼

回答ありがとうございます。最初のデータから再び修正を行いました。

1.errcheck.plの71行目
$in{$key} =~ s/\0/ /g;

の部分を以下の様に変更
$in{$key} =~ s/\0/<br>/g;//変更

2.preview.plの112行目
$in{$key} =~ s/\0/ /g;

の部分を以下のように追加・変更
$hidden_key = $in{$key};//追加
$hidden_key =~ s/\0/ /g;//追加
$in{$key} =~ s/\0/<br>/g;//追加

しかし、やはり改行されません。プラス送信を行うと「二重送信のため処理を中止しました」 というエラーがでてしまいます。

私の修正している場所が違っているのでしょうか・・・

投稿日時 - 2010-08-29 20:08:25

ANo.1

preview.pl(確認画面用)とerrcheck.pl(エラー確認画面用)に該当の記述(正規表現)があります。
preview.plのほうはhiddenにも同じ値を使っているようですので、新たに変数を作る必要がありそうです。

▼preview.pl
$hidden_key = $in{$key}; // 追加
$hidden_key =~ s/\0/ /g; // 追加
$in{$key} =~ s/\0/<br>/g; // 変更

$hidden .= qq|<input type="hidden" name="$key" value="$hidden_key" />\n|; // 変更

▼errcheck.pl
$in{$key} =~ s/\0/<br>/g; // 変更

※動作確認はしていませんので、ご了承ください。

投稿日時 - 2010-08-29 02:13:58

お礼

早速のご回答ありがとうございます。
教えていただいた箇所を以下のように変更・追加してみました。(変更箇所があってるか、ハッキリ分かりませんが、ご指摘いただいた箇所を推測)

1.previe.plの115行目あたり
# 改行変換
$in{$key} =~ s/\t/<br>/g;

の箇所を以下のように追加・変更

# 改行変換
$hidden_key = $in{$key}; // 追加
$hidden_key =~ s/\0/ /g; // 追加
$in{$key} =~ s/\0/<br>/g;// 変更


2.errcheck.plの67行目あたり
# テキスト(添付以外)
} else {
$in{$key} =~ s/\t/<br>/g;

の箇所を以下のように変更

# テキスト(添付以外)
} else {
$in{$key} =~ s/\0/<br>/g; // 変更

以上のように変更・追加してみましたが、確認画面ではValue値は改行されていないようです。プラス、送信ボタンを押すと「メールアドレスの書式が不正です」エラーになってしまします。変更箇所が間違っているのでしょうか???

知識不足で申し訳有りませんが、もう少し詳しくご教授いただけますか??

投稿日時 - 2010-08-29 12:18:52

あなたにオススメの質問