PHP メールフォーム【check.php】
PHP メールフォーム【check.php】について記載します。
※但し、あくまでも練習です。
下記5枚のファイルで構成されます。
本日は、3.check.php について記載します。
<?php
//設定ファイルを入れ込む処理をする
//./が無くても大丈夫
//functionが中に入っている
//枚数が100枚とかになった場合も、この一行ですむ。
require_once dirname(__FILE__).'/init.php';
/*
$referer_domain='http://localhost/php/mail/index.php';
//$referer_domain='http://felica-portfolio.com/php/mail/index.php';
if(strpos($_SERVER['HTTP_REFERER'],$referer_domain)===false){
header('Location:index.php');
exit;
}
*/
//POSTデータが渡ってきてるかチェックする
//渡ってきてなかったら、先頭ページへ返す
//if(empty($_POST)===true){$_POSTは空ですか?と聞いている。
if(empty($_POST)){
//'Location:実際に表示させる場所(トップへ戻すの意味)htt//;等でもOK 相対でも絶対でもOK
header('Location:index.php');
exit;
}
//:index.phpは悪戯される可能性あり。check.PHPに直接アクセスされしまい、空データを大量に送られてしまう可能性あり。
//empty関数;POSTが空かどうかを調べる関数
//空だったら、index.phpに戻る。
//空だったら、exit。→以下の命令文は実行しない。
//POSTから来たデータを変数に代入している。この時に変数に"様"などを入れてもOK。
$name = $_POST['name'];
$email = $_POST['email'];
$tel = $_POST['tel'];
$message = $_POST['message'];
//error =trueを代入 →ここに差し掛かると$nameにエラーが無ければ、この内側に入らない、$name_error='お名前が、入力されていません'なので、 $error = false;にならない。
$error = true;
//$※※_errorに空文字を代入する。
//初期化している。
$name_error = '';
$email_error = '';
$tel_error = '';
$message_error = '';
var_dump(mb_strlen($name,"utf-8"));
//文字列長チェック
//$nameが空だったらこのメッセージが代入される。$namには、POST_nameでいれた値が入っている。
if(mb_strlen($name,'utf-8')>30){
$name_error = 'お名前が長すぎます。';
$error = false;
}
//もし空だったら、このメッセージが$email_errorに代入される。
//320がemailの最大MAXが、今回は50で設定
if(mb_strlen($email,'utf-8')>50){
$email_error = 'メールアドレスが長すぎます。';
$error = false;
}
//電話番号の最大は11 これにハイフン2つ足す。なので13に設定
if(mb_strlen($tel,'utf-8')>13){
$tel_error = 'お電話番号が長すぎます。';
$error = false;
}
if(mb_strlen($message,'utf-8')>128){
$message_error = 'お問い合わせ内容が長すぎます。';
$error = false;
}
//@マークのチェック
//320がemailの最大MAX。@の前は64文字まで。今回は50で設定
//strposは、($email,'@') →$emailの中に@が入っている調べる関数
var_dump(strpos($email,'@'));
if(strpos($email,'@')===false){
$email_error = '不正なメールアドレスです。';
$error = false;
}
//半角チェック
//strlen→16バイト mb_strlen($○○,"UTF-8")→3バイト これを利用してこの二つを満たさない場合は半角が入っていると判断する
//strlen(ストレングレングスの略)文字列*sの長さを取得し返却します。
if(strlen($tel)!==mb_strlen($tel,'utf-8')){
$tel_error = '半角数字で入力してください。';
$error = false;
}
if(strlen($email)!==mb_strlen($email,'utf-8')){
$email_error = '半角数字で入力してください。';
$error = false;
}
//空文字チェック
if($name=='') {
$name_error = 'お名前が、入力されていません。';
$error = false;
}if($email=='') {
$email_error = 'メールアドレスが、入力されていません。';
$error = false;
}
if($tel=='') {
$tel_error = 'お電話番号が、入力されていません。';
$error = false;
}
if($message=='') {
$message_error = 'お問い合わせ内容が、入力されていません。';
$error = false;
}
//ログイン画面を作成するので、['mail_data']を使って次のページにパスワードをもっていく。そうしないと、次のページにいったらログアウトになってしまう。
//['mail_data'] 無くして、二次元配列にしなくてもいけるが、最後に空にしたい。$_SESSIONは、最後に消さないといけない。その際に['mail_data']を使って削除することが出来る。
//var_dump($_SESSION['mail_data'] ['name']);
$_SESSION['mail_data']['name']=$name;
$_SESSION['mail_data']['email']=$email;
$_SESSION['mail_data']['tel']=$tel;
$_SESSION['mail_data']['message']=$message;
$_SESSION['mail_data']['error'] = $error;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせ確認画面</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="container">
<h1>お問い合わせ確認</h1>
<table>
<tr class="small">
<th>お名前:</th><td><?php echo h($name); echo h($name_error); ?></td>
</tr>
<tr class="small">
<th>email:</th><td><?php echo h($email); echo h($email_error); ?></td>
</tr>
<tr class="small">
<th>お電話番号:</th><td><?php echo h($tel); echo h($tel_error); ?></td>
</tr>
<tr class="small">
<th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); echo h($message_error)?></td>
</tr>
</table>
<p><a href="index.php">戻る</a>
<?php
if($error){
echo '<a href="thanks.php">送信</a>';
}
?>
</p>
</div>
</body>
</html>
//ob_end_flush(); は、、メモリーカードのような働きをする。
<?php ob_end_flush();