Skip to content

Instantly share code, notes, and snippets.

@kawabataryo
Last active September 3, 2015 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kawabataryo/961cdd6037739311f9a7 to your computer and use it in GitHub Desktop.
Save kawabataryo/961cdd6037739311f9a7 to your computer and use it in GitHub Desktop.
mailform sample
<?php
ini_set('display_errors', 0);
session_start();
//トークンを生成
$token = sha1(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;
//エスケープ
function h($s){
return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<form id="contact-form" action="./check.php" method="post">
<input type="hidden" name="sub_actions" value="confirm">
<table>
<tbody>
<tr>
<th>お名前</th>
<td><input type="text" name="name" value=""></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><input type="text" name="e_mail" value=""></td>
</tr>
<tr>
<th>メールアドレス(確認用)</th>
<td><input type="text" name="e_mail_confirm" value=""></td>
</tr>
<tr>
<th style="vertical-align:top;">お問い合わせ内容</th>
<td><textarea name="comment" rows="4" cols="40"></textarea>
</td>
</tr>
</tbody>
</table>
<div class="bt">
<input type="hidden" value="<?php echo h($_SESSION['token']); ?>" name="token">
<input type="submit" value="確認画面へ" name="submit">
</div>
</form>
</body>
</html>
<?php
ini_set('display_errors', 0);
session_start();
//不正アクセスチェック
if(empty($_SESSION['token']) || ($_SESSION['token'] != $_POST['token'])){
echo '不正なアクセスです。';
exit;
}
if(strpos($_SERVER['HTTP_REFERER'],$_SERVER['SERVER_NAME']) === false){
echo '不正なアクセスです。';
exit();
}
$_SESSION = $_POST;
//エスケープ
function h($s){
return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}
//入力項目チェック用の関数
function checkNameRequired(){
if(!empty($_POST['name'])){
return true;
}
}
function checkMailRequired(){
if(!empty($_POST['e_mail']) ){
return true;
}
}
function checkMail(){
if (preg_match('|^[0-9a-z_./?-]+@([0-9a-z-]+\.)+[0-9a-z-]+$|', $_POST['e_mail'])) {
return true;
}
}
function checkMailConfirm(){
if($_POST['e_mail'] == $_POST['e_mail_confirm']){
return true;
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<form id="contact-form" action="./send.php" method="post">
<input type="hidden" name="sub_actions" value="confirm">
<table>
<tbody>
<tr>
<th>お名前</th>
<td>
<?php
if(checkNameRequired()){
echo h($_POST['name']);
}else{
echo '入力必須項目です。';
}
?>
</td>
</tr>
<tr>
<th>メールアドレス</th>
<td>
<?php
if(checkMailRequired() && checkMail() && checkMailConfirm()){
echo h($_POST['e_mail']);
}else if(!checkMailRequired()){
echo '入力必須項目です。';
}else if(!checkMail()){
echo 'メールアドレスの形式が間違っています。';
}else if(!checkMailConfirm()){
echo 'メールアドレスが一致していません。';
}
?>
</td>
</tr>
<tr>
<th style="vertical-align:top;">お問い合わせ内容</th>
<td><?php echo h($_POST['comment']);?>
</td>
</tr>
</tbody>
</table>
<div class="bt">
<a href="javascript:history.back();">
<input type="button" value="戻る">
</a>
<input type="hidden" value="<?php echo h($_SESSION['token']); ?>" name="token">
<?php
if(checkNameRequired() && checkMailRequired() && checkMail() && checkMailConfirm()){
echo '<input type="submit" value="送信" name="submit">';
}
?>
</div>
</form>
</body>
</html>
<?php
ini_set('display_errors', 0);
session_start();
//不正アクセスチェック
if(empty($_SESSION['token']) || ($_SESSION['token'] != $_POST['token'])){
echo '不正なアクセスです。';
exit;
}
if(strpos($_SERVER['HTTP_REFERER'],$_SERVER['SERVER_NAME']) === false){
echo '不正なアクセスです。';
exit();
}
//config
$admin_mail = 'test@sample.com';
//メールヘッダー
$add_header="From: $admin_mail\r\n";
$add_header .= "X-Mailer: PHP/". phpversion();
$opt = '-f'. $admin_mail;
//自動返信メール
$return_message =<<<HTML
お問い合わせ内容の確認です。
お名前
{$_SESSION['name']}
E_mail
{$_SESSION['e_mail']}
お問い合わせ内容
{$_SESSION['comment']}
HTML;
//管理者宛メール
$admin_message =<<<HTML
お問い合わせが届きました。
お名前
{$_SESSION['name']}
E_mail
{$_SESSION['e_mail']}
お問い合わせ内容
{$_SESSION['comment']}
HTML;
//メールアドレスチェック
$e_mail = $_SESSION['e_mail'];
if (preg_match('|^[0-9a-z_./?-]+@([0-9a-z-]+\.)+[0-9a-z-]+$|', $e_mail)) {
$e_mail = $e_mail;
}else{
echo '不正なメールアドレスです。';
exit;
}
mb_language("ja");
mb_internal_encoding("UTF-8");
mb_send_mail($e_mail,"【お問い合わせ】確認メール",$return_message,$add_header,$opt);
mb_send_mail($admin_mail,"お問い合わせがありました",$admin_message,$add_header,$opt);
// セッション、セッションIDを破棄
session_destroy();// セッションを破棄
setcookie("PHPSESSID", '', time() - 1800, '/');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<p>送信完了しました</p>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment