PHPの教本を見ながら勉強をしているのですが
ボタン押下時のDB登録と画面遷移がうまくいきません。
↓以下のエラーが発生する
このページは動作していませんlocalhost では現在このリクエストを処理できません。
HTTP ERROR 500
何が原因でエラーになっているのでしょうか?
【問題のボタン】
check.phpの登録ボタン
【画面遷移の本来の動き】
index.php→check.php(dbconnect.php)→thanks.php
index.php
<?php session_start(); /*フォームが空じゃないか?*/ if(!empty($_POST)){ //エラー項目の確認 if($_POST['name'] == ''){ $error['name'] = 'blank'; } if($_POST['email'] == ''){ $error['email'] = 'blank'; } if(strlen($_POST['password']) < 4){ $error['password'] = 'length'; } if($_POST['password'] == ''){ $error['password'] = 'blank'; } if(empty($error)){ $_SESSION['join'] = $_POST; header('Location: check.php'); exit; } } if($_REQUEST['action'] == 'rewrite') { $_POST = $_SESSION['join']; $error['rewrite'] = true; } ?> <p>次のフォームに必要事項を記入してください</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dr>ニックネーム<span class="required">必須</span></dr> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'],ENT_QUOTES); ?>"/> <?php if($error['name'] == 'blank'): ?> <p class="error">ニックネームを入力してください</p> <?php endif ; ?> </dd> <dr>メールアドレス<span class="required">必須</span></dr> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'],ENT_QUOTES); ?>"/> <?php if($error['email'] == 'blank'): ?> <p class="error">メールアドレスを入力してください</p> <?php endif ; ?> </dd> <dr>パスワード<span class="required">必須</span></dr> <dd> <input type="password" name="password" size="10" maxlength="20" /> <?php if($error['password'] == 'blank'): ?> <p class="error">パスワードを入力してください</p> <?php endif ; ?> <?php if(empty($_POST) != true and strlen($_POST['password']) < 4): ?> <p class="error">パスワードは4文字以上を入力してください</p> <?php endif ; ?> </dd> <dt>写真など</dt> <dd> <input type="file" name="image" size="35" /> <?php if($error['image'] == 'type'): ?> <p class="error">写真などは[.gif]または[.jpg]の画像を指定してください</p> <?php endif; ?> <?php if(!empty($error)): ?> <p class="error">恐れ入りますが、画像を改めて指定してください</p> <?php endif; ?> </dd> </dl> <div><input type="submit" value="入力内容を確認する" /></div> </form>
check.php
<?php session_start(); require('dbconnect.php'); if(!isset($_SESSION['join'])){ header('Location: index.php'); exit(); } echo $_SESSION['join']['image']; // 教本のdb実行部分をもう一度見直す // $_POSTのようなスーパーグローバル変数は上書きしない // headerはpostではなくgetで飛ぶ if(!empty($_POST)){ var_dump($_POST); echo "<br>"; var_dump($_SESSION); echo "<br>"; var_dump($db); //登録処理をする try{ $statement = $db->prepare('INSERT INTO members (name,email,password,image) VALUES (:name, :email, :password, :image)'); $statement->bindValue(':name',$_SESSION['join']['name']); $statement->bindValue(':email',$_SESSION['join']['email']); $statement->bindValue(':password',$_SESSION['join']['password']); $statement->bindValue(':picture',$_SESSION['join']['image']); $kekka = $statement->execute(); var_dump($kekka); }catch(PDOException $e){ echo "エラー" . $e->getMessage(); }finally{ unset($_SESSION['join']); // header('Location: thanks.php'); exit(); } } ?> <?php var_dump($_POST); echo "<br>"; var_dump($_SESSION); echo "<br>"; ?> <p>次のフォームに必要事項を記入してください</p> <form action="" method="post"> <input type="hidden" name="action" value="submit" /> <dl> <dr>ニックネーム</dr> <dd><?php echo htmlspecialchars($_SESSION['join']['name'],ENT_QUOTES); ?></dd> <dr>メールアドレス</dr> <dd><?php echo htmlspecialchars($_SESSION['join']['email'],ENT_QUOTES); ?></dd> <dr>パスワード</dr> <dd>【パスワードは表示されません】</dd> <dt>写真など</dt> <dd> <img src="../member_picture/<?php echo htmlspecialchars($_SESSION['join']['image'],ENT_QUOTES); ?>" width="100" height="100" alt=""> </dd> </dl> <div> <a href="index.php?action=rewrite">«: :書き直す</a> <input type="submit" value="登録する" /> </div> </form>
dbconnect.php
<?php try { $db = new PDO('mysql:dbname=mini_bbs;host=localhost:8889;charset=utf8','root','root'); } catch (PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } ?>
thanks.php
<p>ユーザー登録が完了しました</p> <p><a href="../">ログインする</a></p>