ドットインストールを見ながらPHPでお問い合せフォームを作っています。
8割方完成したのですが、どうしてもドハマりしてしまう部分があるので、質問させていただきます。
お問い合わせのフォームには「名前」「メールアドレス」「お問い合わせの内容」を書く欄があり、すべての欄に記入をして送信ボタンを押すと、一見送信が成功したように見えるのですが、データベースの中身を見ると**「メールアドレス」と「お問い合わせの内容」だけ何も格納されないまま**になります(「名前」だけ格納される)。
これは何故でしょうか。phpMyAdminでデータベースの設定をよく確認したり、PHPのコードを確認しましたが、解決する気配がありません。
以下にソースコードと開発環境を示しますので、ご回答よろしくお願いします。
以下、コード
contact.php(メインページ)
lang
1 require_once('config.php'); 2 require_once('functions.php'); 3 4 session_start(); 5 6 if($_SERVER['REQUEST_METHOD'] != "POST") { 7 //投稿前 8 //CSFR対策 9 setToken(); 10 } else { 11 //投稿後 12 checkToken(); 13 14 $name = $_POST['name']; 15 $email = $_POST['email']; 16 $memo = $_POST['memo']; 17 18 $error = array(); 19 20 //エラー処理 21 if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { 22 $error['email'] = 'メールアドレスの形式が正しくありません'; 23 } 24 25 if($email = '') { 26 $error['email'] = 'メールアドレスを入力してください'; 27 } 28 29 if($memo = '') { 30 $error['memo'] = 'お問い合せ内容を入力してください'; 31 } 32 33 if(empty($error)) { 34 // DBに格納 35 $dbh = connectDb(); 36 37 $sql = "insert into entries 38 (name, email, memo, created, modified) 39 values 40 (:name, :email, :memo, now(), now())"; 41 42 $stmt = $dbh -> prepare($sql); 43 $params = array( 44 ":name" => $name, 45 ":email" => $email, 46 ":memo" => $memo 47 ); 48 49 $stmt -> execute($params); 50 51 //送信完了ページヘ 52 header('Location: '.SITE_URL.'thanks.php'); 53 exit; 54 } 55 } 56?> 57 58<!DOCTYPE html> 59<html> 60 <head> 61 <meta charset="UTF-8"> 62 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"> 63 <title>お問い合わせ</title> 64 65 <link rel="stylesheet" href="css/metro-bootstrap.css"> 66 <link href="css/metro-bootstrap-responsive.css" rel="stylesheet"> 67 <link rel="stylesheet" href="css/main.css"> 68 <link href="css/iconFont.css" rel="stylesheet"> 69 <script src="js/jquery/jquery.min.js"></script> 70 <script src="js/jquery/jquery.widget.min.js"></script> 71 <script src="js/jquery/jquery.mousewheel.js"></script> 72 <script src="min/metro.min.js"></script> 73 <script src="js/aScroller.js"></script> 74 <script src="bootstrap/js/bootstrap.min.js"></script> 75 76 <link rel="shortcut icon" href="img/favicon.ico"> 77 </head> 78 79 <body class="metro"> 80 <div id="s_menu"> 81 <div class="maintext"> 82 <h1>お問い合わせ</h1> 83 <p>お問い合せは以下のフォームよりお願いします</p> 84 <p>※「*」部分は必須項目です</p> 85 86 <!-- 以下フォーム部分 --> 87 <form method="post" action=""> 88 <p>お名前* : <input type="text" name="name" value=""></p> 89 <p> 90 メールアドレス* : <input type="text" name="email" value="<?php echo h($email); ?>"> 91 <?php 92 if($error['email']) { 93 echo h($error['email']); 94 } 95 ?> 96 </p> 97 <p>お問い合わせ内容* : </p> 98 <p><textarea name="memo" cols="100" rows="15"><?php echo h($email); ?></textarea></p> 99 <?php 100 if($error['memo']) { 101 echo h($error['memo']); 102 } 103 ?> 104 <p><input type="submit" value="送信"></p> 105 <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> 106 </form> 107 </div> 108 </div> 109 </body> 110</html>
config.php
lang
1 define('DSN', 'mysql:host=(ホスト名);dbname=(データベースの名前)'); 2 define('DB_USER', '(ユーザーネーム)'); 3 define('DB_PASSWORD', '(パスワード)'); 4 5 define('SITE_URL', '(サイトのURL)'); 6 define('ADMIN_URL', SITE_URL.'admin/'); 7 8 error_reporting(E_ALL & ~E_NOTICE); 9 10 session_set_cookie_params(0, '/contact_php/'); 11?>
functions.php
lang
1 function connectDb() { 2 try { 3 return new PDO(DSN, DB_USER, DB_PASSWORD); 4 } catch (PDOException $e) { 5 echo $e -> getMessage(); 6 exit(); 7 } 8 } 9 10 function h($s) { 11 return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 12 } 13 14 function setToken() { 15 /* 処理 */ 16 } 17 18 function checkToken() { 19 /* 処理 */ 20 } 21?>
データベースはMySQLを使用し、定義は以下のとおりです。
lang
1| Field | Type | Null | Key | Default | Extra | 2+----------+--------------+------+-----+---------+----------------+ 3| id | int(11) | NO | PRI | NULL | auto_increment | 4| name | varchar(255) | YES | | NULL | | 5| email | varchar(255) | YES | | NULL | | 6| memo | text | YES | | NULL | | 7| created | datetime | YES | | NULL | | 8| modified | datetime | YES | | NULL | | 9+----------+--------------+------+-----+---------+----------------+ 10
以上です。
なお、config.phpのdefineには正しい情報が記入されているものとします。
また、setToken()とcheckToken()はfunctions.php内に正しく記入されているものとします。
もちろん、冒頭の「<?php」も正しく記入されているものとします。
解答よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/01 02:25