PHP初学者です。
Macを使用し、エディタはAtom、ローカル開発環境はMAMPを使用しています。
現在、たにぐちまことさん著「よくわかるPHPの教科書 PHP7対応版」で学習を進めております。
Chapter6-5で「Twitter風ひとこと掲示板を作る」の中で、ユーザー登録の際に、上手くユーザーのデータがデータベースにINSERTできません。
check.phpでの内容確認後、本来はthanks.phpで登録完了となるはずが、check.phpのページで真っ白になります。
以下、記述コードです。
データベース名:mini_bbs
テーブル名:members
テーブル構造: | 定義 | AI |
---|---|---|
id | INT(11) | ○ |
name | VARCHER(255) | |
VARCHER(255) | ||
password | VARCHER(100) | |
picture | VARCHER(255) | |
created | DATETIME | |
modified | TIMESTAMP | |
【dbconnect.php】
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 6 7<!-- Bootstrap CSS --> 8<link rel="stylesheet" href="css/style.css"> 9 10<title>よくわかるPHPの教科書</title> 11</head> 12<body> 13 <header> 14 <h1 class="font-weight-normal">よくわかるPHPの教科書</h1> 15 </header> 16 17 <main> 18<?php 19try { 20 $db = new PDO('mysql:dbname=mini_bbs;host=localhost;charset=utf8', 'root', 'root'); 21} catch (PDOException $e) { 22 echo 'DB接続エラー: ' . $e->getMessage(); 23} 24 ?> 25</main> 26</body> 27</html>
【index.php】
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 6 7<!-- Bootstrap CSS --> 8<link rel="stylesheet" href="css/style.css"> 9 10<title>よくわかるPHPの教科書</title> 11</head> 12<body> 13 <main> 14 <?php 15 16 require('../dbconnect.php'); 17 18 session_start(); 19 20 if(!empty($_POST)) { 21 //エラー項目の確認 22 if($_POST['name'] == '') { 23 $error['name'] = 'blank'; 24 } 25 if($_POST['email'] == '') { 26 $error['email'] = 'blank'; 27 } 28 if(strlen($_POST['password']) < 4) { 29 $error['password'] = 'length'; 30 } 31 if($_POST['password'] == '') { 32 $error['password'] = 'blank'; 33 } 34 $fileName = $_FILES['image'] ['name']; 35 if(!empty($fileName)) { 36 $ext = substr($fileName, -3); 37 if($ext != 'jpg' && $ext != 'gif') { 38 $error['image'] = 'type'; 39 } 40 } 41 42 //重複アカウントのチェック 43 if(empty($error)) { 44 $member = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?'); 45 $member->execute(array($_POST['email'])); 46 $record = $member->fetch(); 47 if($record['cnt'] > 0) { 48 $error['email'] = 'duplicate'; 49 } 50 } 51 52 if(empty($error)) { 53 //画像をアップロードする 54 $image = date('YmdHis') . $_FILES['image']['name']; 55 move_uploaded_file($_FILES['image']['tmp_name'], '../member_picture/' . $image); 56 57 $_SESSION['join'] = $_POST; 58 $_SESSION['join']['image'] = $image; 59 header('Location: check.php'); 60 exit(); 61 } 62 } 63 64 //書き直し 65 if($_REQUEST['action'] == 'rewrite') { 66 $_POST = $_SESSION['join']; 67 $error['rewrite'] = true; 68 } 69 ?> 70 <p>次のフォームに必要事項をご記入ください。</p> 71 <form action="" method="post" enctype="multipart/form-data"> 72 <dl> 73 <dt>ニックネーム<span class="required">必須</span></dt> 74 <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES); ?>" /> 75 <?php if($error['name'] == 'blank'): ?> 76 <p class="error">* ニックネームを入力してください</p> 77 <?php endif; ?> 78 </dd> 79 <dt>メールアドレス<span class="required">必須</span></dt> 80 <dd><input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>" /> 81 <?php if($error['email'] == 'blank'): ?> 82 <p class="error">* メールアドレスを入力してください</p> 83 <?php endif; ?> 84 <?php if($error['email'] == 'duplicate'): ?> 85 <p class="error">* 指定されたメールアドレスはすでに登録されています</p> 86 <?php endif; ?> 87 </dd> 88 <dt>パスワード<span class="required">必須</span></dt> 89 <dd><input type="password" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>" /> 90 <?php if($error['password'] == 'blank'): ?> 91 <p class="error">* パスワードを入力してください</p> 92 <?php endif; ?> 93 <?php if($error['password'] == 'length'): ?> 94 <p class="error">* パスワードは4文字以上で入力してください</p> 95 <?php endif; ?> 96 </dd> 97 <dt>写真など</dt> 98 <dd><input type="file" name="image" size="35" /> 99 <?php if($error['image'] == 'type'): ?> 100 <p class="error">* 写真などは「.gif」または「.jpg」の画像を指定してください</p> 101 <?php endif; ?> 102 <?php if(!empty($error)): ?> 103 <p class="error">* 恐れ入りますが、画像を改めて指定してください</p> 104 <?php endif; ?> 105 106 </dd> 107 </dl> 108 <div><input type="submit" value="入力内容を確認する" /></div> 109 </form> 110 </main> 111</body> 112</html>
【check.php】
php
1<?php 2session_start(); 3require('../dbconnect.php'); 4 5if(!isset($_SESSION['join'])) { 6 header('Location: index.php'); 7 exit(); 8} 9 10if(!empty($_POST)) { 11 //登録処理をする 12 $statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, picture=?, created=NOW()'); 13 $ret = $statement->execute(array( 14 $_SESSION['join']['name'], 15 $_SESSION['join']['email'], 16 shal($_SESSION['join']['password']), 17 $_SESSION['join']['image'] 18 )); 19 unset($_SESSION['join']); 20 21 header('Location: thanks.php'); 22 exit(); 23} 24 ?> 25 26<!DOCTYPE html> 27<html lang="ja"> 28<head> 29<meta charset="UTF-8"> 30<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 31 32<!-- Bootstrap CSS --> 33<link rel="stylesheet" href="css/style.css"> 34 35<title>よくわかるPHPの教科書</title> 36</head> 37<body> 38 <main> 39 40 41 <form action="" method="post"> 42 <input type="hidden" name="action" value="submit" /> 43 <dl> 44 <dt>ニックネーム</dt> 45 <dd> 46 <?php echo htmlspecialchars($_SESSION['join']['name'], ENT_QUOTES); ?> 47 </dd> 48 <dt>メールアドレス</dt> 49 <dd> 50 <?php echo htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES); ?> 51 </dd> 52 <dt>パスワード</dt> 53 <dd> 54 【表示されません】 55 </dd> 56 <dt>写真など</dt> 57 <dd> 58 <img src="../member_picture/<?php echo htmlspecialchars($_SESSION['join']['image'], ENT_QUOTES); ?>" width="100" height="100" alt="" /> 59 </dd> 60 </dl> 61 <div><a href="index.php?action=rewrite">« 書き直す</a> | <input type="submit" value="登録する" /></div> 62 </form> 63 </main> 64</body> 65</html>
【thanks.php】
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 6 7<!-- Bootstrap CSS --> 8<link rel="stylesheet" href="css/style.css"> 9 10<title>よくわかるPHPの教科書</title> 11</head> 12<body> 13 <main> 14 <p>ユーザー登録が完了しました</p> 15 <p><a href="../"> ログインする</a></p> 16 17 </main> 18</body> 19</html>
全てのコードの記述も確認しましたが、データベースへの接続もできており、ミスしている箇所が見つけられません。
先人のお力をお借りしたく、質問させていただきます。
何卒宜しくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー