PHP・フォームの作成
PHPを使ってフォームを作成した。セキュリティは完全じゃないのだがそこそこ見栄えのするものだ。「フォーム入力」、「確認」、「送信しました」の3枚構成です。
- 出来上がりイメージ
<?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> <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); ?>