PHP初学者です。
Macを使用し、エディタはAtom、ローカル開発環境はMAMPを使用しています。
現在、たにぐちまことさん著「よくわかるPHPの教科書 PHP7対応版」で学習を進めております。
Chapter6-7で「Twitter風ひとこと掲示板を作る」の中で、ログイン機能で、登録したユーザーでログインした後、投稿としてデータをINSERTしようとしますが上手くいきません。
(具体的には、元の投稿画面の何も入力されていない白紙の状態に戻り、データベースへは何も反映されていません。また、エラーログにも特にエラーは表示されていません。)
以下、記述コードです。
データベース名:mini_bbs
テーブル名:posts
|#|Name|Type|Extra|
|:--:|:--:|--:|
1|id|int(11)|AI
2|message|text|
3|member_id|int(11)|
4|reply_post_id|int(11)|
5|created|datetime|
6|modified|timestamp|
【dbconnect.php】
php
1<?php 2try { 3 $db = new PDO('mysql:dbname=mini_bbs;host=localhost;charset=utf8', 'root', 'root'); 4} catch (PDOException $e) { 5 echo 'DB接続エラー: ' . $e->getMessage(); 6} 7 ?>
【login.php】
php
1<?php 2require('dbconnect.php'); 3 4session_start(); 5 6if ($_COOKIE['email'] != '') { 7 $_POST['email'] = $_COOKIE['email']; 8 $_POST['password'] = $_COOKIE['password']; 9 $_POST['save'] = 'on'; 10} 11 12if(!empty($_POST)) { 13 // ログインの処理 14 if($_POST['email'] != '' && $_POST['password'] != '') { 15 $login = $db->prepare('SELECT * FROM members WHERE email=? AND password=?'); 16 $login->execute(array( 17 $_POST['email'], 18 sha1($_POST['password']) 19 )); 20 $member = $login->fetch(); 21 22 if($member) { 23 //ログイン成功 24 $_SESSION['id'] = $member['id']; 25 $_SESSION['time'] = time(); 26 27 //ログイン情報を記録する 28 if($_POST['save'] == 'on') { 29 setcookie('email', $_POST['email'], time()+60*60*24*14); 30 setcookie('password', $_POST['password'], time()+60*60*24*14); 31 } 32 33 header('Location: index.php'); exit(); 34 } else { 35 $error['login'] = 'failed'; 36 } 37 } else { 38 $error['login'] = 'blank'; 39 } 40} 41 ?> 42 43<!DOCTYPE html> 44<html lang="ja"> 45<head> 46<meta charset="UTF-8"> 47<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 48 49<!-- Bootstrap CSS --> 50<link rel="stylesheet" href="css/style.css"> 51 52<title>よくわかるPHPの教科書</title> 53</head> 54<body> 55 <main> 56 <div id="lead"> 57 <p>メールアドレスとパスワードを記入してログインしてください。</p> 58 <p>入会手続きがまだの方はこちらからどうぞ。</p> 59 <p>»<a href="join/">入会手続きをする</a></p> 60 </div> 61 <form action="" method="post"> 62 <dl> 63 <dt>メールアドレス</dt> 64 <dd> 65 <input type="text" name="email" size="35" maxlength="255" 66 value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>" /> 67 <?php if($error['login'] == 'blank'): ?> 68 <p class="error">* メールアドレスとパスワードをご記入ください</p> 69 <?php endif; ?> 70 <?php if($error['login'] == 'failed'): ?> 71 <p class="error">* ログインに失敗しました。正しくご記入ください。</p> 72 <?php endif; ?> 73 </dd> 74 <dt>パスワード</dt> 75 <dd><input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>" /> 76 </dd> 77 <dt>ログイン情報の記録</dt> 78 <dd> 79 <input id="save" type="checkbox" name="save" value="on" /><label for="save">次回からは自動的にログインする</label> 80 </dd> 81 </dl> 82 <div><input type="submit" value="ログインする" /></div> 83 </form> 84 </main> 85</body> 86</html> 87
【index.php】
php
1<?php 2session_start(); 3require('dbconnect.php'); 4 5if(isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 6 //ログインしている 7 $_SESSION['time'] = time(); 8 9 $members = $db->prepare('SELECT * FROM members WHERE id=?'); 10 $members->execute(array($_SESSION['id'])); 11 $member = $members->fetch(); 12} else { 13 //ログインしていない 14 header('Location: login.php'); exit(); 15} 16 17//投稿内容を記録する 18if(!empty($_POST)) { 19 if($_POST['message'] != '') { 20 $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, created=NOW()'); 21 $message->execute(array( 22 $member['id'], 23 $_POST['message'] 24 )); 25 26 header('Location: index.php'); exit(); 27 } 28} 29?> 30 31 32<!DOCTYPE html> 33<html lang="ja"> 34<head> 35<meta charset="UTF-8"> 36<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 37 38<!-- Bootstrap CSS --> 39<link rel="stylesheet" href="css/style.css"> 40 41<title>よくわかるPHPの教科書</title> 42</head> 43<body> 44 <main> 45 <div id="content"> 46 <form action="" method="post"> 47 <dl> 48 <dt><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、メッセージをどうぞ</dt> 49 <dd> 50 <textarea name="message" cols="50" rows="5"></textarea> 51 </dd> 52 </dl> 53 <div> 54 <input type="submit" value="投稿する" /> 55 </div> 56 </form> 57 </div> 58 </main> 59</body> 60</html>
尚、上記phpファイルは全て同じフォルダ内にあります。
先人の皆様、お力をお貸し頂けましたら幸いです。
何卒よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー