• ベストアンサー

入力フォームの改造をしたいんです。。。

GenesisさんのFRIENDS BOARD-i Ver.2.40というスクリプトを、自分で 少しだけ修正して女性向フリマのBBSとして使っています。 最近すごく困ってる事があるんですけど、多分業者さんだと思うんです けど、禁止しているアダルト商品とかを何度削除しても、何度も何度も 出品してくるんです。。。 女性向サイトだから意味ないのに。。。 そこで、色々対策し、その上で考えたですけど、投稿できるメールアド レス(ドメイン)を指定、限定できるようにしたいんです。 私もざっとプログラムを見てみたんですけど、標準では投稿者が新規 投稿時に入力した内容が、そのまま投稿者のメールアドレスとして登録 されています。 具体的に、こういう処理になっています。 メールアドレス<BR> <INPUT size="16" type="text" name="mail" maxlength="64"><BR> フォームに入力した内容 = "mail" といった感じです。 これを、@マーク以前は従来通りフォームからの自由入力で、ここでの 入力内容を仮にaとして、 @マークは固定、これを仮にbとして、 @マーク以降のドメインは、指定のドメインを<SELECT>メニューで指定 (仮に、 aaa.ne.jp ・ bbb.ne.jp ・ ccc.ne.jp)し、投稿者はその中か ら選択、 この選択結果を仮にcとして、 a+b+c= (name="mail") としたいんです。。。 私の説明メチャクチャですね。。。 うまく伝わるといいんですけど。。。 すごく困っていて、早く対策をしたいと思っています。。。 詳しい方、ぜひアドバイスお願いします。。。

  • CGI
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.2

当面やりたいことを、ということで、どうぞ: f_board.cgi: > $mail = $FORM{'mail'}; $mail = $FORM{'account'} . "\@" . $FORM{'domain'}; > メールアドレス<BR> > <INPUT size="16" type="text" name="mail" maxlength="64"><BR> メール アドレス<BR> <INPUT type=text name="account" size="16" maxlength="32">\@<SELECT name="domain"><OPTION value="aaa.ne.jp">aaa.ne.jp</OPTION><OPTION value="bbb.ne.jp">bbb.ne.jp</OPTION><OPTION value="ccc.ne.jp">ccc.ne.jp</OPTION></SELECT><BR> > if ($mail eq "") { &error("メールアドレスが未記入です。"); } if (!$FORM{'account'} || !$FORM{'domain'}) { &error("メール アドレスが未記入です。"); } ざっと通して見ただけなので、不足部分があるかもしれません。

maki_yoshinaka
質問者

お礼

レス、ありがとうございます。 早速、今晩にでも動作を確認してみますo(^o^)o とり急ぎお礼だけ。。。 また結果報告します!

maki_yoshinaka
質問者

補足

ものすごく遅くなってしまいましたが。。。 やりたい事はまさにこれでした! 解決しました。ありがとうございました。

その他の回答 (2)

  • xyz37005
  • ベストアンサー率51% (362/706)
回答No.3

思うに、maki_yoshinakaさんはその業者の記入してくるメールアドレスを書き込み不可にしたいとかそういうことだろうか? ちょっとそのCGIをダウンロードしてきて自分なりに改造してみた。 ・システム設定に許可メールアドレスと禁止メールアドレスを設ける。 ・許可メールアドレスが設定されてる場合、その許可メールアドレスのいずれかを含むメールアドレスしか書き込みできない。 ・禁止メールアドレスが設定されてる場合、その禁止メールアドレスのいずれかを含むメールアドレスは書き込みできない。 というふうにしてみた。 具体的にはどうしたかっていうと ダウンロードしてきたFRIENDS BOARD-i Ver.2.40のf_board.cgiを以下のように修正。 ○223行目と224行目の間に以下を追加 # 2006/05/26追加 $SYSTEM[23] =~ s/,/\n/g; print <<"EOM"; □ 許可メールアドレス<BR> ※複数指定の場合は改行で区切ってください。<BR> <TEXTAREA rows="10" cols="30" name="SYSTEM23">$SYSTEM[23]</TEXTAREA><BR> EOM $SYSTEM[22] =~ s/,/\n/g; print <<"EOM"; □ 禁止メールアドレス<BR> ※複数指定の場合は改行で区切ってください。<BR> <TEXTAREA rows="10" cols="30" name="SYSTEM22">$SYSTEM[22]</TEXTAREA><BR> EOM # 2006/05/26追加 ○315行目と316行目の間に以下を追加 $FORM{'SYSTEM22'} =~ s/\r\n/,/g; $FORM{'SYSTEM22'} =~ s/\r|\n/,/g; $FORM{'SYSTEM23'} =~ s/\r\n/,/g; $FORM{'SYSTEM23'} =~ s/\r|\n/,/g; ○342行目と343行目の間に以下を追加 $FORM{'SYSTEM22'} $FORM{'SYSTEM23'} ○406行目と407行目の間に以下を追加 □ 許可メールアドレス<BR> $SYSTEM[23]<BR> □ 禁止メールアドレス<BR> $SYSTEM[22]<BR> ○1012行目と1013行目の間に以下を追加 @KYOKA = split(/,/,$SYSTEM[23]); if (@KYOKA ne "") { foreach (@KYOKA) { if (index($mail,$_) < '0') { &error("メールアドレス不正。処理を中断します。"); } } } @TABOO2 = split(/,/,$SYSTEM[22]); if (@TABOO2 ne "") { foreach (@TABOO2) { if (index($mail,$_) >= '0') { &error("メールアドレス不正。処理を中断します。"); } } 行数はダウンロードしてきた未改造のファイルの行数なので注意ね。

回答No.1

内容は伝わりますが、HTML で結合することは無理なので、CGI スクリプトで結合させる必要があります。 ただ、そうしたとしても、スパム投稿を避けることにはつながらないのではないかと思います。

maki_yoshinaka
質問者

お礼

レスありがとうございます。 >内容は伝わりますが、HTML で結合することは~ そうですね。それはわかります。 そうする為にはどう記述したら良いか知りたいんです。。。 >ただ、そうしたとしても、スパム投稿を~ そうですね。 スパム投稿防止には色々な手法があるのは承知しています。 ただ、とりあえず今回は、先に書いた内容の対策を、その全体の対策の 一環としてとりたいと考えています。 今、試行錯誤やってみてたところなんですけど、なかなかうまくいき ません。。。 引き続き、詳しい方、アドバイスお願いします。。。

関連するQ&A

  • メールフォームにある必須入力について

    こんばんは、今メールフォームを作っています。入力画面→確認画面→完了ページという流れで作ったのですがよく必須項目に何も入れなかったり、間違った文字をいれたりするとエラーページが表示されるようにしたいと思っているのですが、なかなか上手くできません。下記のスクリプトからだとどうやってやったら良いのでしょうか?よろしくおねがいします。 <?php if (! isset($_POST[btn1]) and! isset($_POST[btn2]) and! isset($_POST[cancel])) { //入力画面 $body = "必要な項目を入力して[OK]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:<INPUT size='40' type='text' name='name'><BR><BR> フリガナ:<INPUT size='40' type='text' name='kana'><BR><BR> 電話番号:<INPUT size='40' type='text' name='tel'><BR><BR> E-Mailアドレス:<INPUT size='40' type='text' name='email'><BR><BR> お問い合わせ内容:<BR><TEXTAREA rows='6' cols='40' name='inquiry'></TEXTAREA><BR><BR> <INPUT type='submit' name='btn1' value=' OK '> </FORM>"; } elseif (isset($_POST[btn1])) { //入力画面で[OK]がクリックされたとき $name = htmlspecialchars(stripcslashes($_POST[name])); $kana = htmlspecialchars(stripcslashes($_POST[kana])); $tel = htmlspecialchars(stripcslashes($_POST[tel])); $email = htmlspecialchars(stripcslashes($_POST[email])); $inquiry = htmlspecialchars(stripcslashes($_POST[inquiry])); $body = "ご入力した内容でメッセージを送信します。<BR> よろしければ[送信]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:$name<BR><BR> フリガナ:$kana<BR><BR> 電話番号:$tel<BR><BR> E-Mailアドレス:$email<BR><BR> お問い合わせ内容:<BR>" . nl2br($inquiry) . "<BR><BR> <INPUT type='submit' name='btn2' value=' 送信 '> <INPUT type='submit' name='cancel' value='キャンセル'> <INPUT type='hidden' name='name' value=\"$name\"> <INPUT type='hidden' name='kana' value=\"$kana\"> <INPUT type='hidden' name='tel' value=\"$tel\"> <INPUT type='hidden' name='email' value=\"$email\"> <INPUT type='hidden' name='inquiry' value=\"$inquiry\"> </FORM>"; } elseif (isset($_POST[btn2])) { //確認画面で[送信]がクリックされたとき //メールの送信処理を行う $name = stripcslashes($_POST[name]); $kana = stripcslashes($_POST[kana]); $tel = stripcslashes($_POST[tel]); $email = stripcslashes($_POST[email]); $inquiry = stripcslashes($_POST[inquiry]); $mailto = "kuma202000@yahoo.co.jp"; $mailsbj = "メールフォームからの送信"; $mailbody = "$name さんからのメールが届きました。\n" . "---------------------------------------------\n" . "名前:$name \n" . "フリガナ:$kana \n" . "電話番号:$tel \n" . "E-Mailアドレス:$email \n" . "メッセージ:$inquiry \n" . "---------------------------------------------\n"; mb_language("ja"); if (mb_send_mail($mailto, $mailsbj, $mailbody, $mailheader)) { $body = "メールを送信しました。ありがとうございました。<BR><BR>"; } else { $body = "メールの送信に失敗しました。<BR><BR>"; } $body .= "<A href='$_SERVER[PHP_SELF]'>戻る</A>"; } elseif (isset($_POST[cancel])) { //確認画面で[キャンセル]がクリックされたとき header("location: $_SERVER[PHP_SELF]"); exit(); } ?> <HTML> <HEAD> </HEAD> <BODY> <?=$body?> </BODY> </HTML>

    • 締切済み
    • PHP
  • テキスト・セレクトフォームにて何も入力されていない状態ではフォームの色を変えるためには

     Rubyを使用して掲示板のシステムを作成しています。 必須項目 <input type="text" name="textfield"><br> 任意項目 <input type="text" name="textfield2"><br> 必須項目 <input type="text" name="textfield3"><br> 必須項目 <textarea name="textarea"></textarea><br> 必須項目 <select name="select"></select> と複数のテキストフォームとセレクトフォームがあり,その一部が必須項目です。そこで必須項目と分かるようにフォームの入力部分を赤く塗り,何か文字が入力されたら(何か選ばれたら),元の白の状態にしたいと考えています。  このようなことは実際可能なので使用か。ご教授お願いします。

    • ベストアンサー
    • HTML
  • JavaScriptでメールフォーム

    サイトでメールフォームをCGIを使わずに、JavaScriptで作成した時の話なのですが、 例えば、 <form name="mail" action="mailto:aaa@bbb.com" method="post" enctype="text/plain"> 名前<br> <input name="name"><br> 送信内容<br> <textarea style="WIDTH: 164px; HEIGHT: 50px" name="body"></textarea><br> <input style="WIDTH: 74px; HEIGHT: 21px" type="submit" size="37" value="送信"></form> ↑のような一般型のフォームは出来るのですが、 メールの送信先をメール送信者に指定させてそのアドレスにメールを送信するようにするにはどうしたら良いのでしょうか? すみませんが御願いします・・・

  • PHP入力フォームから確認画面にいって送信する。という事がやりたいので

    PHP入力フォームから確認画面にいって送信する。という事がやりたいのですが、入力フォームと送信画面は作成できたのですが、その間の確認画面をどう作成したらよいかわからないので、質問致します。 1.入力フォーム(mail.htmlで作成) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>sample</title> </head> <body> <form action="send.php" method="post"> 件名:<br> <input type="text" name="subject" size="30" value=""><br> 送信者名:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> 本文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="送信する"> </form> </body> </html> 2.確認画面・・・ここが作成したいページです。 3.送信画面(send.phpで作成) <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("hoge@example.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>sample</title> </head> <body> <p>メールが送信されました。</p> </body> </html> という感じです。 やりたい事としては、第三者に入力フォームに入力してもらい、送信ボタンを押すと、入力内容はこれでよろしいですか?という画面が出て OKならば、そのまま送信。修正したい場合は戻るボタンでmail.htmlに戻り、修正する。その際の戻るボタンを押した場合は 入力した内容が消えていないこと。という事がやりたいのです。 「2.確認画面」のサンプルスクリプトを教えて頂けないでしょうか。 1と3も間違っているならご指摘下さい。よろしくお願い致します。

    • 締切済み
    • PHP
  • フォームのtextareaにnl2brを使用すると、入力内容の改行部分に<br />が表示されてしまう。

    現在、フォームを作成しています。 セッションを利用してフォームの次のファイルにデータを受け渡しています。 問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。 フォームの流れ: start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。 mail.phpにおいて入力内容の確認及びデータ送信。 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> 解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。) mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?> start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。 入力例: あいうえおかきくけこ たちつてと 表示例(nl2br使用): あいうえおかきくけこ<br /> たちつてと 解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。 試しにnl2br()をコードから削除すると、以下のような表示となります。 表示例(nl2br未使用): あいうえおかきくけこたちつてと 解説:nl2brを使用しない場合、改行されません。 どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • 入力フォームの反映

    登録ページにて、申込者の情報入力フォーム、社長の入力フォーム、部長の入力フォームが同ページにあります。 申込者は社長か部長かをドロップダウンで選択してもらいます。 社長を選んだ場合、申込者の情報を入力すると下の社長の入力フォームに同じものが反映され 部長を選んで入力すると、下の部長の入力欄に同じく反映させたいのですが PHPで可能でしょうか? よろしくお願いいたします。 // <p>[お申込み者入力]</p> <dt> <label for="yakusyoku">役職</label> </dt> <dd> <select id="yakusyoku" name="yakusyoku"> <option value="社長">社長</option> <option value="部長">部長</option> </select> </dd> <dt> <label for="m_name">お名前</label> </dt> <dd> <input name="m_name" type="text" id="m_name" size="10" maxlength="20" /> </dd> <p>[社長情報入力]</p><br> <dt> <label for="s_name">お名前</label> </dt> <dd> <input name="s_name" type="text" id="s_name" size="10" maxlength="20" /> </dd> <p>[部長情報入力]</p><br> <dt> <label for="b_name">お名前</label> </dt> <dd> <input name="b_name" type="text" id="b_name" size="10" maxlength="20" /> </dd>

    • 締切済み
    • PHP
  • 入力フォームについて

    FC2のホームページを利用しています 入力フォームのサンプルを手本にして、以下のように作成しましたが 「送信ボタン」をクリックしても、メールが届きません。 どうしてでしょうか? <form action="mailto:xxx@xxx.ne.jp" enctype="text/plain" method="post"> <p><label>NAME:<br /> <input type="text" name="名前" value="" tabindex="1" accesskey="b"> </label></p> <p><label>E-MAIL:<br /> <input type="text" name="メールアドレス" value="" tabindex="2" accesskey="a"> </label></p> <p><label>感想・ご意見<br> <textarea name="title" rows="15" cols="30" tabindex="9" accesskey="i"> </textarea> </label></p> <p> <input type="reset" value="送信" tabindex="10" accesskey="s"> <input type="reset" value="取消" tabindex="11" accesskey="r"> </p> </form>

  • PHP入力フォームについて

    現在入力フォームを作っています。 流れとしてはDBに入っている会員情報をフォーム上に呼び出して(各inputにはDB内の会員の情報が表示される)各会員が自分の情報を編集できるというフォームです。 ここで質問なのですが、会員の人が自分の入力内容を変更した際に入力漏れがあるとフォーム画面に戻るのですがその際に入力した内容が表示されるのではなくDB内のデータが表示されてしまいます。 これをDB内のデータではなく入力した内容にしたいのですが、どうしたらよろしいでしょうか? ソースは下記になります。 form.php <?php DB呼び出し・・・ $_SESSION['name'] = $row['name']; ・・・ ?> <?php echo $_SESSION['err_name']; ?> <input type="text" name="name" value="<?php echo $_SESSION['name']; ?>" /> confirm.php <?php $name = htmlspecialchars($_REQUEST['name']); if(!strlen($name)) { $_SESSION['err_name'] = '氏名を入力してください。'; $errFlag = true; } else { unset($_SESSION['err_name']); } エラーの時はform.phpに戻る ?> <?php echo $name; ?> としています。 とても省略していますが、お分かりの方がいらっしゃいましたら教えていただけると助かります。

    • 締切済み
    • PHP
  • 入力フォームにおける配列データに関して

    こんにちは。お世話になっております。 タイトルにあるように、フォームの中に入力されたデータを配列として、POSTするようなものを作成しました。 こんな感じ。 <p>ファイル</p> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <p>キーワード</p> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> このフォームは、ファイルをアップロードし、かつ各ファイル毎に関連するキーワードを入力・登録させるためのものですが、データをPOSTしたとき、ファイルもキーワードも配列としているので、ファイル1段目とキーワード1段目。ファイル2段目とキーワード2段目・・・といった形で配列に格納されるものと思っておりましたが、ファイルがローカル上の同じフォルダ内にあるものに限っては、配列への格納順が保たれるのですが、違うフォルダからアップロードさせると、配列への格納順が保たれないことに気付きました。 そもそも、上記のようなフォームの作成は誤っているものなのか? それとも、このような場合、違う形式でのフォームを作成すべきなのか?などなど・・ 経験の乏しい私には解決策が見出せずに、今回投函させていただいた次第です。 お忙しい中恐縮ですが、アドバイスなど頂戴出来れば幸いです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • Webフォームについて

    OCNの無料ホームページサービスで、Webフォームを作成しました。 (団体への加入申込みフォームです) 下記のフォームで、未入力欄がある場合、   ・未入力を再度促す画面に戻るには?   ・入力した内容を確認して送信するには?   ・送信が終わって「ありがとうございました」旨を知らせる画面を表示するには?     (OCNサービスに標準仕様でも送信thank you画面があるが、画面を閉じる機能がない) HTMLタグが判らないので、ご教授をお願いします。 <html> <head> <title> サンプルフォーム </title> </head> <b>△○○△会加入フォーム</b></p> <FORM METHOD="post" ACTION="/cgi-bin/formmail.pl"> <INPUT TYPE="hidden" NAME="recipient" VALUE="△△@○○.ocn.ne.jp"> <INPUT type="hidden" NAME="subject" value="登録" /><BR> あなたのE-mail<BR> <INPUT TYPE="TEXT" NAME="email"><br> あなたの氏名<BR> <INPUT TYPE="TEXT" NAME="氏名"><br> 住所<BR> <INPUT TYPE="TEXT" NAME="住所" /><br> コメント<BR> <INPUT TYPE="TEXT" NAME="コメント"><br> <INPUT TYPE="submit" ACTION="/cgi-bin/formmail.pl" VALUE="送信" METHOD="post"> <INPUT TYPE="reset" VALUE="クリア"><br> </form> </div> </body> </html>

専門家に質問してみよう