1. TOP
  2. WEB
  3. お問い合わせをWEBサイトにPHPで設置する作り方

お問い合わせをWEBサイトにPHPで設置する作り方


Warning: Undefined array key 2 in /home/itweb/it-tantou.com/public_html/wp-content/themes/mythemes/functions.php on line 319

WEBサイトを制作しているとお問い合わせページはかなりの頻度で必要になってきます。企業サイトでは必須ページです。

しかし、HTMLで作成した場合はメールソフトを立ち上げる程度の装備しかできません。本格的なお問い合わせフォームを作成して、送信まで作るとなるとPHPが必要になります。

このページでは、PHPを使って簡単なお問い合わせページの作り方をご紹介します。

お問い合わせの特徴

制作するお問い合わせの特徴をまとめました。

お問い合わせフォームの入力時に記入項目が適切であるかチェックして、入力ミスを表示するように設計します。このシステムをバリデーションと言います。

バリデーション機能で入力ミスを表示

必須項目と通常項目の設定できるようにします。必須項目が入力されずに「送信」ボタンをクリックすると、エラーを表示します。

必須項目と通常項目

確認画面を表示して、送信内容を確かめられるように設計します。

送信確認画面の表示

PHPを使用して送信できるようにします。

送信完了画面

制作方法

お問い合わせを作るには3つのページが必要になります。

  • お問い合わせフォームのページ
  • 確認画面ページ
  • 送信完了ページ

以上を作成します。

お問い合わせフォームのページ

お問い合わせフォームページのサンプル

まずは、お問い合わせフォームのページを作成します。

contact.htmlの名前でファイルを作成します。html内には以下の内容を記述します。

          <form action="check_inquiry.php" method="post">
            <h3>お問い合わせフォーム</h3>
            <p>弊社製品についてのお問い合わせは、下記にて承っております。</p>
            <p>*は必須項目です。</p>
            <table>
              <tbody>
                <tr>
                  <th>会社名<span>※</span></th>
                  <td><input type="text" name="company" size="50" class="validate required" /></td>
                </tr>
                <tr>
                  <th>担当者様</th>
                  <td><input type="text" name="username" size="50" class="validate" /></td>
                </tr>
                <tr>
                  <th>電話番号<span>※</span></th>
                  <td><input type="text" name="tel1" size="4" maxlength="4" class="validate number required" />
                    -
                    <input type="text" name="tel2" size="4" maxlength="4" class="validate number required2" />
                    -
                    <input type="text" name="tel3" size="4" maxlength="4" class="validate number required2" /></td>
                </tr>
                <tr>
                  <th>E-Mail<span>※</span></th>
                  <td><input type="text" value="" size="50" name="mail" class="validate mail required"/></td>
                </tr>
                <tr>
                  <th>E-Mail(確認)<span>※</span></th>
                  <td><input type="text" value="" size="50" name="mail_check" class="validate mail mail_check required"/></td>
                </tr>
                <tr>
                  <th>内容<span>※</span></th>
                  <td><textarea id="message" name="message" rows="10" cols="40" class="validate required"></textarea></td>
                </tr>
              </tbody>
            </table>
<p><input type="submit" value="  確認  " class="button"></p>
          </form>

上記のHTMLフォームはサンプルですので、項目や内容はお使いのサイトに併せてカスタマイズしてください。バリデーション機能を動作させるには各項目のclassに「validate」を必ず記述してください。

バリデーション用のCSSです。

td.error input , 
td.error textarea , 
td.error label {
	background:#FFCCCC;
}
td p.error{
	margin:0;
	color:red;
	font-weight:bold;
	margin-bottom:1em;
}

次に、入力ミスなどを表示するためのバリデーション機能はjQueryを使用して設置します。

以下のjQueryを使用するためのコードを</head>より上に記述します。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="validate.js"></script>

jQueryはバージョン1.3.2を使用していますが、サンプルですので他のバージョンでも構いません。

次に、バリデーション機能を持つjQueryを作ります。ファイル名は、validate.jsで作成して以下のコードを記述します。

// JavaScript Document

$(function(){
	$("form").submit(function(){
	
		//エラーの初期化
		$("p.error").remove();
		$("td").removeClass("error");
		
		$(":text,textarea").filter(".validate").each(function(){
			
			//必須項目のチェック
			$(this).filter(".required").each(function(){
				if($(this).val()==""){
					$(this).parent().prepend("<p class='error'>※必須項目です</p>");
				}
			});
			
			//必須項目のチェック
			$(this).filter(".required2").each(function(){
				if($(this).val()==""){
					$(this).parent().prepend("");
				}
			});
			
			//数値のチェック
			$(this).filter(".number").each(function(){
				if(isNaN($(this).val())){
					$(this).parent().prepend("<p class='error'>※数値のみ入力可能です</p>");
				}
			});
			
			//メールアドレスのチェック
			$(this).filter(".mail").each(function(){
				if($(this).val() && !$(this).val().match(/.+@.+\..+/g)){
					$(this).parent().prepend("<p class='error'>※メールアドレスの形式が異なります</p>");
				}
			});
			
			//メールアドレス確認のチェック
			$(this).filter(".mail_check").each(function(){
				if($(this).val() && $(this).val()!=$("input[name="+$(this).attr("name").replace(/^(.+)_check$/, "$1")+"]").val()){
					$(this).parent().prepend("<p class='error'>※メールアドレスと内容が異なります</p>");
				}
			});
			
		});
		
		//ラジオボタンのチェック
		$(":radio").filter(".validate").each(function(){
			$(this).filter(".required").each(function(){
				if($(":radio[name="+$(this).attr("name")+"]:checked").size() == 0){
					$(this).parent().prepend("<p class='error'>※選択してください</p>");
				}
			});
		});
		
		//チェックボックスのチェック
		$(".checkboxRequired").each(function(){
			if($(":checkbox:checked",this).size()==0){
				$(this).prepend("<p class='error'>※選択してください</p>");
			}
		});
		
		// その他項目のチェック
		$(".validate.add_text").each(function(){
			if($(this).attr("checked")==true && $("input[name="+$(this).attr("name").replace(/^(.+)$/, "$1_text")+"]").val()==""){
				$(this).parent().prepend("<p class='error'>※その他の項目を入力してください。</p>");
			}
		});
		
		//エラーの際の処理
		if($("p.error").size() > 0){
				$('html,body').animate({ scrollTop: $("p.error:first").offset().top-40 }, 'slow');
				
				$("p.error").parent().addClass("error");
				return false;
		}
	});
});

上記のコードの各チェック部分にある「.〇〇(.requiredや.numberなど)」を先程のcontact.html内のclassに記述すると、動作するようになります。

required

入力されていない場合に「※必須項目です」と表示します。

required2

入力されていない場合にエラーを返しますが、「※必須項目です」とは表示されません。

number

数値以外を記入すると、「※数値のみ入力可能です」と表示します。

mail

メールアドレス以外を記入すると、「※メールアドレスの形式が異なります」と表示します。

mail_check

お問い合わせではメールは間違いがないか確認のために2回入力しますが、一致しない場合は「※メールアドレスと内容が異なります」と表示します。

required

ラジオボタンのチェックがない場合に「※選択してください」と表示します。

ラジオボタンのサンプルhtmlです。片方にclassを記述します。

<input type="radio" name="example" value="サンプル" class="validate required">サンプル
<input type="radio" name="example" value="サンプル">サンプル

checkboxRequired

チェックボックスのチェックがない場合に「※選択してください」と表示します。

チェックボックスのサンプルhtmlです。全体をdivで囲んでclassを記述します。div以外にもtdやddでも構いません。なお、チェックボタンに関してはclassタグにvalidateは必要ありません。

<div class="checkboxRequired">
<input type="checkbox" name="example" value="サンプル">サンプル
<input type="checkbox" name="example" value="サンプル">サンプル
</div>

validate add_text

チェックボックスのその他をチェックして、フォームに入力がない場合に「※その他の項目を入力してください。」と表示します。

チェックボタンのその他の項目のバリデーション

チェックボックスのその他のサンプルhtmlです。

<div class="checkboxRequired">
<input type="checkbox" name="example" value="サンプル">良い
<input type="checkbox" name="example" value="サンプル">悪い
<input type="checkbox" name="example" value="サンプル" class="validate add_text">その他<input type="text" name="example_text" value="">
</div>

エラーの際の処理

お問い合わせフォームを入力してエラーが表示された場合に上にスクロールして戻ります。初期値は40です。数値が小さいほど遅く上部に戻り、大きいほど早く上部に戻ります。

上部にスクロールして戻る

参考にしたjQuery:HtmlDrive

確認画面ページ

確認画面ページのサンプル

内容を確認するためのページを作成します。

check_inquiry.phpの名前でファイルを作成します。ファイル内には以下の内容を記述します。

<?php
	// 会社名、担当者様、電話番号、メールアドレス
	$company = htmlspecialchars($_POST['company'], ENT_QUOTES);
	$username = htmlspecialchars($_POST['username'], ENT_QUOTES);
	$tel1 = htmlspecialchars($_POST['tel1'], ENT_QUOTES);
	$tel2 = htmlspecialchars($_POST['tel2'], ENT_QUOTES);
	$tel3 = htmlspecialchars($_POST['tel3'], ENT_QUOTES);
	$mail = htmlspecialchars($_POST['mail'], ENT_QUOTES);
	$mail_check = htmlspecialchars($_POST['mail_check'], ENT_QUOTES);
	// お問い合わせ内容
	$message = htmlspecialchars($_POST['message'], ENT_QUOTES);

?>

            <h3>お問い合わせフォーム</h3>
<p>お問い合わせ内容を確認してください。</p>
<form action="send_inquiry.php" method="POST">
<input type="hidden" name="company" value="<?php echo $company; ?>">
<input type="hidden" name="username" value="<?php echo $username; ?>">
<input type="hidden" name="tel1" value="<?php echo $tel1; ?>">
<input type="hidden" name="tel2" value="<?php echo $tel2; ?>">
<input type="hidden" name="tel3" value="<?php echo $tel3; ?>">
<input type="hidden" name="mail" value="<?php echo $mail; ?>">
<input type="hidden" name="mail_check" value="<?php echo $mail_check; ?>">
<input type="hidden" name="message" value="<?php echo $message; ?>">

            <table>
              <tbody>
                <tr>
                  <th>会社名<span>※</span></th>
                  <td><?php echo $company; ?></td>
                </tr>
                <tr>
                  <th>担当者様<span>※</span></th>
                  <td><?php echo $username; ?></td>
                </tr>
                <tr>
                  <th>電話番号<span>※</span></th>
                  <td><?php echo $tel1; ?><?php echo $tel2; ?><?php echo $tel3; ?></td>
                </tr>
                <tr>
                  <th>E-Mail<span>※</span></th>
                  <td><?php echo $mail; ?></td>
                </tr>
                <tr>
                  <th>E-Mail(確認)<span>※</span></th>
                  <td><?php echo $mail_check; ?></td>
                </tr>
                <tr>
                  <th>内容<span>※</span></th>
                  <td>
<?php
	// 改行部分にBRタグを埋め込む
	echo nl2br($message);
?>
                  </td>
                </tr>
              </tbody>
            </table>
<input type="submit" value="  送信  ">
<input type="button" VALUE="  戻る  " onClick="self.history.back()">
</form>

送信完了ページ

送信完了ページのサンプル

送信完了のページを作成します。

send_inquiry.phpの名前でファイルを作成します。ファイル内には以下の内容を記述します。

<?php
	// 会社名
	$company = htmlspecialchars($_POST['company'], ENT_QUOTES);
	// 担当者様
	$username = htmlspecialchars($_POST['username'], ENT_QUOTES);
	// 電話番号
	$tel1 = htmlspecialchars($_POST['tel1'], ENT_QUOTES);
	$tel2 = htmlspecialchars($_POST['tel2'], ENT_QUOTES);
	$tel3 = htmlspecialchars($_POST['tel3'], ENT_QUOTES);
	// メールアドレス
	$mail = htmlspecialchars($_POST['mail'], ENT_QUOTES);
	$mail_check = htmlspecialchars($_POST['mail_check'], ENT_QUOTES);
	// 件名、内容
	$title = 'お問い合わせ';
	$message = htmlspecialchars($_POST['message'], ENT_QUOTES);

	// 日本語(UTF-8)の設定
	mb_language('ja');
	mb_internal_encoding('UTF-8');

	// Fromアドレスの設定(自動送信<送信元のアドレス>)
	$name = '自動送信';
	$email = 'info@abc@gmail.com';
	$header = 'From: '. mb_encode_mimeheader($name) . '<' . $email .'>';

	// 本文の末尾に[お名前][メールアドレス]を追加
	$message = $message . "\n[" . $company . "]";
	$message = $message . "\n[" . $username . "]";
	$message = $message . "\n[" . $tel1 . "]";
	$message = $message . "\n[" . $tel2 . "]";
	$message = $message . "\n[" . $tel3 . "]";
	$message = $message . "\n[" . $mail . "]";
	$message = $message . "\n[" . $mail_check . "]";
	
	// メール送信
	$result = mb_send_mail("def@gmail.com", $title, $message, $header);
	
	if ($result) {
		// メール送信の成功
		echo '■お問い合わせ内容を担当者へ送信しました。';
	} else {
		// メール送信の失敗
		echo '■担当者への送信に失敗しました。';
	}
?>

$email = ‘info@abc@gmail.com’;の部分は自分に届くメールのFromアドレスの設定(自動送信<送信元のアドレス>)です。形だけですので特に何でも良いです。

$result = mb_send_mail("def@gmail.com", $title, $message, $header);の部分は、送信内容を受け取るメールアドレスです。この例だと、def@gmail.comにメールが届きます。ご自身のメールアドレスに合わせて変更します。

なお、複数のメールアドレスを記述する場合は"def@gmail.com,ghi@gmail.com"とします。

実際に届いたメールの文書です。

届いたメールの内容

まとめ

PHPとjQueryを使った簡単なお問い合わせフォームですが、WEBサイトに設置するときに役立つと思います。

最近はWordPressでサイトを制作することが多くなり、プラグインで簡単にお問い合わせが設置できるので、1から作る必要もなくなりました。しかし、HTMLを使用したWEBサイトを制作する場合は、お問い合わせを良く設置するので、作り方を知っていると便利です。