6/4授業メモ PHP
index.php
<?php
require_once dirname(__FILE__).'./init.php';
$name = '';
$email = '';
$tel = '';
$message = '';
if(isset($_SESSION['mail_data'])){
$name = $_SESSION['mail_data']['name'];
$email = $_SESSION['mail_data']['email'];
$tel = $_SESSION['mail_data']['tel'];
$message = $_SESSION['mail_data']['message'];
}
?>
<!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>
<form action="check.php" method="post" id="mailform">
<table>
<tr>
<th><label for="name">お名前:<br><span>※必須</span> 30文字以内</label></th>
<td><input type="text" name="name" id="name" size="30" placeholder="例:東京太郎"
value="<?php echo h($name); ?>"></td>
</tr>
<tr>
<th><label for="email">email:<br><span>※必須</span> 50文字以内</label></th>
<td><input type="text" name="email" id="email" size="50" placeholder="例:sample@sample.com" value="<?php echo h($email); ?>"></td>
</tr>
<tr>
<th><label for="tel">お電話番号:<br><span>※必須</span> 半角数字</label></th>
<td><input type="text" name="tel" id="tel" size="30" placeholder="例:123-4567-8910" value="<?php echo h($tel); ?>"></td>
</tr>
<tr>
<th><label for="message">お問い合わせ:<br><span>※必須</span> 128文字以内</label></th>
<td><textarea name="message" id="message" cols="30" rows="5" placeholder="例:御社商品の資料請求を致します。" ><?php echo h($message); ?></textarea></td>
</tr>
</table>
<input type="submit" value="確認">
</form>
</div>
</body>
</html>
<?php
ob_end_flush();
check.php
<?php
require_once dirname(__FILE__).'./init.php';
if(empty($_POST)){
header('Location:index.php');
exit;
}
$name = $_POST['name'];
$email = $_POST['email'];
$tel = $_POST['tel'];
$message = $_POST['message'];
$error = true;
$name_error = '';
$email_error = '';
$tel_error = '';
$message_error = '';
if($name==''){
$name_error = 'お名前が、入力されていません。';
$error = false;
}
if($email==''){
$email_error = 'メールアドレスが、入力されていません。';
$error = false;
}
if($tel==''){
$tel_error = 'お電話番号が、入力されていません。';
$error = false;
}
if($message==''){
$message_error = 'お問い合わせ内容が、入力されていません。';
$error = false;
}
if(strlen($name)>30){
$name_error = 'お名前が長すぎます。';
$error = false;
}
if(strlen($email)>50){
$email_error = 'メールアドレスが長すぎます。';
$error = false;
}
if(strpos($email, '@') === false){
$email_error = '不正なメールアドレスです。';
$error = false;
}
if(strlen($tel) !== mb_strlen($tel, "utf-8")){
$tel_error = '半角数字で入力してください。';
$error = false;
} else {
if(strlen($tel)>13){
$tel_error = 'お電話番号が長すぎます。';
$error = false;
}
}
if(strlen($message)>128){
$message_error = 'お問い合わせ内容が長すぎます。';
$error = false;
}
$_SESSION=array();
$_SESSION['mail_data'] ['name'] = $name;
$_SESSION['mail_data'] ['email'] = $email;
$_SESSION['mail_data'] ['tel'] = $tel;
$_SESSION['mail_data'] ['message'] = $message;
$_SESSION['mail_date'] ['error'] = $error;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせ確認画面</title>
<link rel="stylesheet" href="css/style1.css">
</head>
<body>
<div id="container">
<h1>お問い合わせ確認</h1>
<table>
<tr>
<th>お名前:</th><td><?php echo h($name) . h($name_error); ?></td>
</tr>
<tr>
<th>email:</th><td><?php echo h($email) . h($email_error); ?></td>
</tr>
<tr>
<th>お電話番号:</th><td><?php echo h($tel) . h($tel_error); ?></td>
</tr>
<tr>
<th>お問い合わせ内容:</th><td><?php echo nl2br(h($message) . 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>
<?php
ob_end_flush();
thanks.php
<?php
require_once dirname(__FILE__).'./init.php';
if(!$_SESSION['mail_date'] ['error']){
header('Location:index.php');
exit;
}
//セッションから値を取得
$name = $_SESSION['mail_data']['name'];
$email = $_SESSION['mail_data']['email'];
$tel = $_SESSION['mail_data']['tel'];
$message = $_SESSION['mail_data']['message'];
//セッションを取っておく必要がないのでクリア
$_SESSION['mail_data'] =array();
unset($_SESSION['mail_data']);
//クライアントへのメール送信内容の設定
$to = 'xxxxxxxxxx@gmail.com';
$subject = 'お問い合わせメール';
$body =<<<BODY
【お問い合わせメール】
以下の内容で承りました。
お名前:
{$name}
メールアドレス:
{$email}
お電話番号:
{$tel}
メッセージ:
{$message}
BODY;
//メールのコーディング設定
mb_language('japanese');
mb_internal_encoding("UTF-8");
$r = mb_send_mail( $to , $subject , $body );
$thanks_message ='上記の内容でお問い合わせメールを承りました。';
if(!$r) {
$thanks_message ='メール送信エラー。以下お問い合わせは送信されませんでした。';
}
?>
<!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>
<th>お名前:</th>
<td><?php echo h($name); ?></td>
</tr>
<tr>
<th>email:</th>
<td><?php echo h($email); ?></td>
</tr>
<tr>
<th>お電話番号:</th>
<td><?php echo h($tel); ?></td>
</tr>
<tr>
<th>お問い合わせ内容:</th>
<td><?php echo nl2br(h($message)); ?></td>
</tr>
</table>
<p>
<?php
if(!$r){
echo '<span>' . h($thanks_message) . '</span>';
} else {
echo h($thanks_message);
}
?>
</p>
<p><a href="index.php">戻る</a></p>
</div>
</body>
</html>
<?php
ob_end_flush();
☆index.php、check.php、thanks.phpの
require_once './init.php';
に
dirname(__FILE__).
を追記する↓
require_once dirname(__FILE__).'./init.php';
※(__FILE__)の__はアンダースコア(半角)を2個続けて記述。
☆check.phpの
if($message==''){
$message_error = 'お問い合わせ内容が、入力されていません。';
$error = false;
}
の下に
if(strlen($name)>30){
$name_error = 'お名前が長すぎます。';
$error = false;
}
if(strlen($email)>50){
$email_error = 'メールアドレスが長すぎます。';
$error = false;
}
if(strlen($tel)>13){
$tel_error = 'お電話番号が長すぎます。';
$error = false;
}
if(strlen($message)>128){
$message_error = 'お問い合わせ内容が長すぎます。';
$error = false;
}
を記述する。
※strlenはストリングレンスと読む。
※strlen($name)>30は30文字以上の入力だとエラーをかける命令。
☆index.phpの
<tr>
<th><label for="email">email:<br><span>※必須</span></label></th>
<td><input type="text" name="email" id="email" size="30" placeholder="例:sample@sample.com" value="<?php echo h($email); ?>"></td>
</tr>
に、 50文字以内に追記し、30→50に書き換える。
<tr>
<th><label for="email">email:<br><span>※必須</span> 50文字以内</label></th>
<td><input type="text" name="email" id="email" size="50" placeholder="例:sample@sample.com" value="<?php echo h($email); ?>"></td>
</tr>
☆check.phpの
if(strlen($tel)>13){
$tel_error = 'お電話番号が長すぎます。';
$error = false;
}
を
if(strlen($tel) !== mb_strlen($tel, "utf-8")){
$tel_error = '半角数字で入力してください。';
$error = false;
} else {
if(strlen($tel)>13){
$tel_error = 'お電話番号が長すぎます。';
$error = false;
}
}
に書き換える。
※半角と入力文字数のエラーを表示させる命令文。
☆check.phpの
if(strlen($email)>50){
$email_error = 'メールアドレスが長すぎます。';
$error = false;
}
の下に
if(strpos($email, '@') === false){
$email_error = '不正なメールアドレスです。';
$error = false;
}
を記述する。
※@を入力しないとエラーを表示させる。
☆init.phpに
header('X-Frame-OPTIONS:DENY');
を記述する。
※自分のサイトのコンテンツが他のサイトに埋め込まれないようにする。
※DENYは、ディナイと読む。