##PHPのデータベースを利用した掲示板で内容が表示できない
ログインした状態からチャットを入力し、
- 入力したユーザー
- 内容
の二点を、SQliteを利用して表示する掲示板を作成したいのですが、
エラーメッセージが表示され上手くいきません。
#発生している問題・エラーメッセージ
php
1Notice: Undefined variable: db in C:\xampp\htdocs\login-bbs2.php on line 91 2 3Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\login-bbs2.php:91 Stack trace: #0 C:\xampp\htdocs\login-bbs2.php(72): show_log() #1 C:\xampp\htdocs\login-bbs2.php(28): show_login_contents() #2 {main} thrown in C:\xampp\htdocs\login-bbs2.php on line 91
##該当のソースコード
php
1<?php session_start(); 2$users = array( 3 "takeshi" => "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",//test 4 "yutaka" => "ee3f7d52ca341c51c694af9288701f4ce43be0ad",//rabit 5 "akiko" => "f91a8ee646a277a2f1359709604b99c1b32d9f24",//panda 6 "mamoru" => "e08f57d03a1a78d2473c0520cbf0db9d3aadcc49" 7); 8 9$savepath = dirname(__FILE__).'/log.db'; 10$script=$_SERVER["SCRIPT_NAME"]; 11 12try { 13 $db = new PDO("sqlite:$savepath"); 14} catch (PDOException $e) { 15 echo "接続失敗:".$e->getMessage(); exit; 16} 17 18$create_query = <<< __SQL__ 19CREATE TABLE IF NOT EXISTS log ( 20 log_id INTEGER PRIMARY KEY, 21 user TEXT; 22 body TEXT, 23); 24__SQL__; 25$db->exec($create_query); 26 27if (isset($_SESSION["login"])) { 28 show_login_contents(); 29} 30 31if (isset($_POST["user"])) { 32 check_login(); 33} else { 34 show_login_form(); 35} 36 37function show_login_form() { 38 global $script; 39 echo <<< __FORM__ 40 <div id="loginform"> 41 <form action="$script" method="POST"><h3>ログインしてください</h3> 42 <label>ユーザー名</label><input type="text" name="user" /> 43 <label>パスワード</label><input type="password" name="pass" /> 44 <button type="submit">ログイン</button> 45 </form></div> 46__FORM__; 47} 48 49function check_login() { 50 global $users, $script; 51 if(empty($_POST["pass"])){ 52 echo "パスワードが入力されていません"; exit; 53 } 54 if(empty($users[$_POST["user"]])) { 55 echo "ユーザーが存在しないかパスワードが違います。"; exit; 56 } 57 58 $pass_correct = $users[$_POST["user"]]; 59 if(sha1($_POST["pass"]) != $pass_correct) { 60 echo "ユーザーが存在しないかパスワードが違います。"; exit; 61 } 62 63 $_SESSION["login"] = array("user" => $_POST["user"]); 64 echo "<a href='$script'>ログインしました!</a>"; 65} 66 67function show_login_contents() { 68 $m = isset($_GET["m"]) ? $_GET["m"]:""; 69 switch ($m) { 70 case "logout": show_logout(); break; 71 case "write": write_log(); break; 72 default: show_log(); break; 73 } 74} 75 76function show_log() { 77 global $script, $savefile; 78 $user = $_SESSION["login"]["user"]; 79 echo "<h1>こんにちは、{$user}さん!</h1>"; 80 echo "現在ログイン中"; 81 echo "→(<a href='$script?m=logout'>ログアウトする</a>)"; 82 echo "</ul>"; 83 echo "<form action='$script' method='get'>"; 84 echo "<input type='text' name='body' size='40' />"; 85 echo "<input type='hidden' name='m' value='write' />"; 86 echo "<input type='submit' value='書き込み' />"; 87 echo "</form>"; 88 echo "<h3>掲示板</h3>"; 89 90 $select_query = "SELECT * FROM log ORDER BY log_id DESC"; 91 $stmt = $db->query($select_query); //エラー箇所です 92 93 foreach ($stmt as $row) { 94 $name = htmlspecialchars($row["user"]); 95 $body = htmlspecialchars($row["body"]); 96 echo "<div class='log'>$name > $body</div>"; 97 } 98} 99 100// 次回ここから 101 102function write_log() { 103 if (isset($_GET["body"])) { 104 if ($_GET["body"] == "") { 105 echo "<p>内容を入力してください。</p>"; exit; 106 } 107 108 $template = "INSERT INTO chatlog (user,body)". 109 "VALUES(?,?);"; 110 $stmt = $db->prepare($template); 111 $stmt->execute(array($_GET["user"],$_GET["body"])); 112 header("location: $script"); exit; 113 } 114} 115 116function show_logout() { 117 global $scripit; 118 unset($_SESSION["login"]); 119 echo "<a href='script'>ログアウトしました</a>"; 120 exit; 121}
##補足情報(FW/ツールのバージョンなど)
・windows10
・XAMPP
PHPのバージョンは5.2.0です。

回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2019/06/04 02:15