質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

6733閲覧

phpで確認ページなしで問い合わせページを作りたいです。

KotaMiura

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2016/04/05 09:27

編集2016/04/17 04:07

phpで確認ページなしでお問い合わせページを作りたいです。
入力ページ(contact.php)→送信完了ページ(send.php)
入力ページで入力エラー→入力ページ。
という流れです。
入力ページでチェックし、大丈夫ならメール送信し、送信完了ページに飛ぶ設定です。
ここまで出来ましたが、アドバイスお願いします。

<?php header("Content-Type: text/html;charset=UTF-8"); error_reporting(0); $name = htmlspecialchars($_POST["name"],ENT_QUOTES); $e_mail = htmlspecialchars($_POST["e-mail"],ENT_QUOTES); $subject = htmlspecialchars($_POST["subject"],ENT_QUOTES); $message = htmlspecialchars($_POST["message"],ENT_QUOTES); if ($name == null) { $errormsg1 = "<span class='f_red'> 必須項目</span>"; } if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $e_mail)) { } else { $errormsg2 = "<span class='f_red'> 必須項目</span>"; } if ($message == null) { $errormsg3 = "<span class='f_red'> 必須項目</span>"; } if($errormsg1!="<span class='f_red'> 必須項目</span>" && $errormsg2!="<span class='f_red'> 必須項目</span>" && $errormsg3!="<span class='f_red'> 必須項目</span>"){ mb_language("Japanese"); mb_internal_encoding("UTF-8"); $message2 = "名前:".$name."\n メールアドレス:".$e_mail."\n 件名:".$subject."\n お問い合わせ内容:".$message; if (mb_send_mail("crack-.-tmrku327@ezweb.ne.jp", "お問い合わせ", $message2, "From: " . $_POST["e-mail"])) { header('location: send.php'); }else{ exit("error"); } } ?>

contact.phpのhtmlです。

<form name="contact" action="contact.php" method="post"> <p>your name<?php echo $errormsg1; ?></p> <p> <input type="text" name="name" maxlength="100" value="<?php echo $name; ?>"> </p> <p>your e-mail<?php echo $errormsg2; ?></p> <p><input type="text" name="e-mail" maxlength="100" value="<?php echo $e_mail; ?>"></p> <p>subject</p> <p><input type="text" name="subject" maxlength="100" value="<?php echo $subject; ?>"></p> <p>message<?php echo $errormsg3; ?></p> <p><textarea name="message" maxlength="5000" style="width:100%; height:100px;"><?php echo $message;?></textarea></p> <p><input type="submit" name="submit" value="SEND" id="send"></p> </form>

$name,$email,$messageのどれかに値が代入されいなかったら、contact.phpに戻り、$errormsg1,$errormsg2,$errormsg3のうち代入されているものをechoで表示させたいです。
もしすべての値が取れていたら、メールを送信するようにしたいです。
今できているphpはここまでです。何かアドバイスありませんか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

だいぶ、マイナス評価がついてしまっているようなので、ちょっと気の毒?と思い、初歩的なヒントだけ。

php

1<?php 2// send.php 3$name = $_GET['name']; 4$email = $_GET['e-mail']; 5$subject = $_GET['subject']; 6$message = $_GET['message']; 7 8//エラー処理の例 9if($email == ""){ 10 //emailが空文字(contact.phpで、errormessageを表示するとかの例) 11 header('location: contact.php?errormessage=メールアドレスが指定されていません。'); 12 exit(); 13} 14 15// 16//管理者側にメール送信するとか、の処理を追加して 17 18//送信完了ページの表示 19echo $name . "様。お問い合わせありがとう!"; 20 21?>

php

1<?php 2//contact.php 3echo $_GET['errormessage']; 4?> 5<form name="contact" action="send.php" method="post"> 6 <p>your name</p> 7 <p> 8 <input type="text" name="name" maxlength="100" value=""> 9 </p> 10 <p>your e-mail</p> 11 <p><input type="text" name="e-mail" maxlength="100" value=""></p> 12 <p>subject</p> 13 <p><input type="text" name="subject" maxlength="100" value=""></p> 14 <p>message</p> 15 <p><textarea name="message" maxlength="5000" style="width:100%; height:100px;"></textarea></p> 16 <p><input type="submit" name="submit" value="SEND" id="send"></p> 17</form>

エラー処理など一切していない、最小限ですので、このままでは動作しませんが、ヒントになれば。

ちなみに、

PHPでログイン画面、とか、PHPでお問い合わせ画面、と検索してみましたが、なかなか、いいサンプルはないですね。あまりにも簡易すぎて、そのままではとても使えない物か、逆にあまりにも凝り過ぎで難解すぎるか。

さて、皆さんに低評価をされてしまっているのは「そこまでプログラム書かせるのであれば金をクレ、とか業者に頼めよ!」、というプロとしての意識の現れかと、
そのくらい、この手の実装は簡単なようで、チェックやら何やらで、面倒な実装です。プロだからといって、ちゃらっと、書けるほどでもなく、以外と面倒見ることが多い。
なので、いいサンプルも見つからない訳です。

なのでなので、マイナス評価に、目くじら立てないでくださいね、何度も書きますが、ちゃんと動作するものを作ると一手間かかる実装です。
特に、入力系は、何が入力されるかわからず、その判定だけでも、結構な面倒さです。

大変かと思いますが、もう少しご自身でがんばりましょう!!!
それでも、動作しないなら、ここに来るとよいかもですね。

投稿2016/04/05 21:18

ItoTomonori

総合スコア1283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KotaMiura

2016/04/06 03:07

ありがとうございます! 自分の意識の低さを痛感しました! 少し自分で試してみます!
guest

0

ベストアンサー

処理のフローについて簡単に回答します。
エラー時のフォームの再表示をするなら1ページ内で完結させた方が簡単だと思います。

フォームメールの全体の処理の流れとして、自身のファイルへポストして入力エラーチェックを行い駄目なら再度フォームを表示します。
エラーがあった場合に最初から入力し直しではお客様が中断してしまう可能性が高くなってしまいます。

この時にエラーのあった内容もPHPを使って動的に出力するのでセキュリティー面に気を付ける必要があります。
エラーが無かったらメール送信を行い、送信が正常に完了したら別ページなりに遷移して終了します。


【フローチャート】
メールフォーム処理フロー

サイトに問い合わせフォームを設置しているとツールを使ってのスパム自動投稿が多いので、実際には自分のページからPOSTされたかのリファラーチェック及び本文に日本語が含まれているかもチェックしています。
(スパム投稿はほぼ100%英文です)

Ito様が回答されている通り全部をコードを示すには複雑で長すぎるので一部のみ提示させていただきます。フォーム再表示の参考にしてください。

以下は自作サイトのメールフォームのHTML部分ですが、POST内容はあらかじめセキュリティーチェックを行ってから文字列をPHPの変数に代入してあります。
POST[]の内容をそのまま表示すると非常に危険ですので注意してください。
(配列でないか、攻撃コードが含まれていないか、長すぎる場合は文字数制限をするetc.)

メールアドレスは正規表現などを使って xxx@yyyy.zzz のような形式かチェックを行っておきます。
メールアドレスは間違いも多いので確認欄があると安全かと思います。

HTML

1<form id="form1" name="form1" method="post" enctype="multipart/form-data" action=""> 2 <label for="mtitle">タイトル</label> 3 <input id="mtitle" name="mtitle" class="form-control" type="text" size="60" value="<? if( !empty( $mtitle_post ) ) {print $mtitle_post;} ?>" maxlength="40"> 4 <label for="email">お客様の連絡先メールアドレス</label> 5 <input name="email" id="email" class="form-control" type="text" size="60" value="<? if( !empty( $email_post ) ) {print $email_post;} ?>" maxlength="40"> 6 <label for="email2">確認用メールアドレス入力</label> 7 <input name="email2" id="email2" class="form-control" type="text" size="60" value="<? if( !empty( $email2_post ) ) {print $email2_post;} ?>" maxlength="40"> 8 <br> 9 <label for="msg">お問い合わせ内容</label> 10 <textarea name="msg" class="form-control" cols="60" rows="10" id="msg" onchange="restChar();"><? if( !empty($msg_post) ) { print htmlspecialchars( $msg_post, ENT_QUOTES); }?></textarea> 11 <input name="submit" type="submit" class="btn btn-primary" id="submit_ok" value="送 信" onclick="return inputCheck();"> 12</form> 13

投稿2016/04/11 13:11

編集2016/04/11 13:27
chinyato

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問