huskycyan

webデザインを中心に学習したことを日記として残しています。

PHP・フォームの作成

PHPを使ってフォームを作成した。セキュリティは完全じゃないのだがそこそこ見栄えのするものだ。「フォーム入力」、「確認」、「送信しました」の3枚構成です。

  • 出来上がりイメージ

f:id:husky1127:20141019005957p:plain

<?php
require_once dirname(__FILE__).'/init.php';
$input_data=array('name','email','message','name_error','email_error','message_error');
foreach($input_data as $v){
	$$v='';
}

//初期化


//変数が値が入っているかどうか調べる、入っていたらtrue
if(isset($_SESSION['mail_data'])){
	//foreachは配列を繰り返し構文
	//$k(キー、添え字)$v(値)この変数はforeach文内で定義できる
	foreach($_SESSION['mail_data'] as $k => $v){
	$$k = $v;
	}
}

?>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせフォーム</title>
<style>
body{
  background-color:#CCC;
  }
#container{
  width:650px;
  margin:0 auto;
  background:#FFF;
  padding:10px;
  border-radius:10px;
  background: linear-gradient(#999,#666);
  }
h1{
  font-size:18px;
  }
a{
  margin:0 20px;
  }
span{
  color:red;
  }
</style>
</head>
<body>
<div id="container">
<h1>お問い合わせフォーム</h1>
<form action="check.php" method="post">
<p>お名前: <span>※必須</span> 30文字以内 <input type="text" size="30" name="name" placeholder="例:山田太郎" maxlength="30" value="<?php print h($name); ?>"> <?php print h($name_error); ?></p>
<p>email: <span>※必須</span> 50文字以内 <input type="text" size="50" name="email" placeholder="例:abc@sample.com" maxlength="50" value="<?php print h($email); ?>"> <?php print h($email_error); ?></p>
<p>お問い合わせ: <span>※必須</span> 128文字以内<br>
<textarea name="message" rows="5" cols="30" placeholder="例:御社の商品の資料請求を致します" maxlength="128"><?php print h($message); ?> </textarea><?php print h($message_error); ?></p>
<input type="submit" value="確認">
</form>
</div>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
<style>
body{
  background-color:#CCC;
  }
#container{
  width:650px;
  margin:0 auto;
  background:#FFF;
  padding:10px;
  border-radius:10px;
  background: linear-gradient(#999,#666);
  }
h1{
  font-size:18px;
  }
a{
  margin:0 20px;
  }
th{
  text-align:left;
  width:200px;
  }
span{
  color:red;
  }
</style>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
</head>

<body>
<div id="container">
<h1>お問い合わせ確認</h1>
<table>
<tr><th>お名前:</th><td><?php print h($name); ?></td></tr>
<tr><th>email:</th><td><?php print h($email); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr><!--nl2br改行対策-->
</table>

<p><a href="index.php">戻る</a>&nbsp;<a href="thanks.php">送信</a></p>

</div>
</body>
</html>
<?php
require_once dirname(__FILE__).'/init.php';

//セッションスタート再開
if( !isset($_SESSION['mail_data']['name'])|| !isset($_SESSION['mail_data']['email'])|| !isset($_SESSION['mail_data']['message']) || !$_SESSION['mail_data']['error_flg'] ){
	//リダイレクション
	header("Location:http://localhost/namae_php/mail2/index.php");
	//header("Location:http://localhost/namae_php/mail/index.php")
	exit;//以下の処理をカット
}

$input_data=array('name','email','message','name_error');
foreach($input_data as $v){
	$$v='';
}

foreach($_SESSION['mail_data'] as $k => $v){
	$$k=$v;
	}
//セッションで取っておく必要長いのでクリア
$_SESSION['mail_data']=array();//これで中身が消える、$nameなどにすでに移行したので消す
unset($_SESSION['mail_data']);//unsetでmail_dataの器も消す

if(isset($_COOKIE[session_name()])){
	setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();

$to="xxx@abc.com";//ここにメールアドレス
$subject="お問い合わせメール";
$from=$email;

$body=<<<BODY
【お問い合わせメール】
以下の内容で承りました。
お名前:
{$name}
メールアドレス:
{$email}
メッセージ:
{$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>
<head>
<meta charset="utf-8">
<title>送信終了</title>
<style>
body{
  background-color:#CCC;
  }
#container{
  #container{
  width:650px;
  margin:0 auto;
  background:#FFF;
  padding:10px;
  border-radius:10px;
  background: linear-gradient(#999,#666);
  }
h1{
  font-size:18px;
  }
a{
  margin:0 20px;
  }
th{
  text-align:left;
  }
span{
  color:red;
  }
</style>
</head>

<body>
<div id="container">
<table>
<tr><th>お名前:</th><td><?php print h($name); ?></td></tr>
<tr><th>email:</th><td><?php print h($email); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr><!--nl2br改行対策-->
</table>
<p>
<?php
if(!$r){
print'<span>'.h($thanks_message).'</span>';
}else{
		print h($thanks_message);
	}
?>
</p>
<a href="index.php">確認</a>
</div>
</body>
</html>
<?php
function h($str){
	return htmlspecialchars($str,ENT_QUOTES,"utf-8");
}
//フレーム埋め込み無効
//オプションで設定変更可能
header('X-Frame-OPTIONS:DENY');

session_start();
session_regenerate_id(true);
?>