開発環境はmacOS MAMP phpMyAdmin を使っています。
掲示板作成での、エラーの原因がわからず、立ち往生しています。
エラーとしましては、
Notice: Undefined variable: dbh in /Applications/MAMP/htdocs/keijiban/keijiban.php on line 152
Fatal error: Uncaught Error: Call to a member function query() on null in /Applications/MAMP/htdocs/keijiban/keijiban.php:152 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/keijiban/keijiban.php on line 152
です。
最初の方で$dbhでオブジェクトで定義しているはずなのですが、なぜこのエラーが出るのかわかりません。
そして、コメント欄のphpは、idの最大値を取得したく、プレイスフォルダを使わなかったのでquery文で書きました。
なぜnullになり、$dbhが定義されていないのでしょうか。
機能的には正常にDB連携はできており、投稿もできています。
コード<?php error_reporting(E_ALL); ini_set('display_errors' , 'On'); if(!empty($_POST)){ $name = $_POST['name']; $comment = $_POST['comment']; $err_msg = array(); define('MSG01' , '入力必須です。'); if(empty($name)){ $err_msg['name'] = MSG01; } if(empty($comment)){ $err_msg['comment'] = MSG01; } if(empty($err_msg)){ $dsn = 'mysql:dbname=php_sample01;host=localhost;charset=utf8'; $user = 'michi'; $password = 'michitaro'; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); $dbh = new PDO($dsn,$user,$password,$options); $stmt = $dbh -> prepare('INSERT INTO keijiban2(name,comment) VALUES(:name,:comment)'); $stmt -> execute(array(':name' => $name, ':comment' => $comment)); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <style media="screen"> cssは省略しています </style> <body> <h1>掲示板</h1> <form class="site-width" action="" method="post"> <span class="err_msg"><?php if(!empty($err_msg['name'])) echo $err_msg['name']; ?></span> <input type="text" name="name" placeholder="タイトル" value=""> <span class="err_msg"><?php if(!empty($err_msg['comment'])) echo $err_msg['comment']; ?></span> <textarea name="comment" rows="5" cols="50" placeholder="内容" value=""></textarea> <input type="submit" name="" value="送信"> </form> <section class="site-width"> <h1 id="comment-title">コメント欄</h1> <?php $stmt_id = $dbh -> query('SELECT max(id) FROM keijiban2'); $result = $stmt_id -> fetch(PDO::FETCH_ASSOC); $max_id = $result['max(id)']; ?> <?php for($i = $max_id; $i > 0; $i--){ ?> <div class="comment"> <?php $stmt_comment_i = $dbh -> prepare('SELECT name,comment FROM keijiban2 WHERE id = :id'); $stmt_comment_i -> execute(array('id' => $i)); $result_i = $stmt_comment_i -> fetch(FETCH_ASSOC); echo '名前:'.$result_i['name'].'<br>コメント:'.$result_i['comment']; ?> </div> <?php } ?> </section> </body> </html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/03 14:32
2019/02/03 14:43 編集
退会済みユーザー
2019/02/04 00:49
2019/02/04 12:13
2019/02/04 12:44
2019/02/04 21:39 編集
2019/02/05 05:55
2019/02/05 06:03
2019/02/05 06:09
2019/02/05 06:12
2019/02/05 06:15