MAMPでPHPとSQLを使い簡単な掲示板を作って学習中なんですが、データベースにメッセージが保存できなくて悩んでいます。
下のコードが送信用ページです。
PHP
1<?php 2session_start(); 3require('dbconnect.php'); 4 5if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 6 $_SESSION['time'] = time(); 7 8 $members = $db->prepare('SELECT * FROM members WHERE id=?'); 9 $members->execute(array($_SESSION['id'])); 10 $member = $members->fetch(); 11} else { 12 header('Location: login.php'); 13 exit(); 14} 15if (!empty($_POST)) { 16 if ($_POST['message'] !== '') { 17 $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=0, created=NOW()'); 18 $message->execute(array( 19 $member['id'], 20 $_POST['message'] 21 )); 22 } 23} 24 25 26?> 27<!DOCTYPE html> 28<html lang="ja"> 29<head> 30 <meta charset="UTF-8"> 31 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 32 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 33 <title>ひとこと掲示板</title> 34 35 <link rel="stylesheet" href="style.css" /> 36</head> 37 38<body> 39<div id="wrap"> 40 <div id="head"> 41 <h1>ひとこと掲示板</h1> 42 </div> 43 <div id="content"> 44 <div style="text-align: right"><a href="logout.php">ログアウト</a></div> 45 <form action="" method="post"> 46 <dl> 47 <dt><?php print(htmlspecialchars($member['name'], ENT_QUOTES)); ?>さん、メッセージをどうぞ</dt> 48 <dd> 49 <textarea name="message" cols="50" rows="5"></textarea> 50 <input type="hidden" name="reply_post_id" value="" /> 51 </dd> 52 </dl> 53 <div> 54 <p> 55 <input type="submit" value="投稿する" /> 56 </p> 57 </div> 58 </form> 59 60 <div class="msg"> 61 <img src="member_picture" width="48" height="48" alt="" /> 62 <p><span class="name">()</span>[<a href="index.php?res=">Re</a>]</p> 63 <p class="day"><a href="view.php?id="></a> 64<a href="view.php?id="> 65返信元のメッセージ</a> 66[<a href="delete.php?id=" 67style="color: #F33;">削除</a>] 68 </p> 69 </div> 70 71<ul class="paging"> 72<li><a href="index.php?page=">前のページへ</a></li> 73<li><a href="index.php?page=">次のページへ</a></li> 74</ul> 75 </div> 76</div> 77</body> 78</html>
mysql接続ファイルはこちらです。
PHP
1<?php 2try { 3 $db = new PDO('mysql:dbname=mini_bbs;host=localhost;port=8889;charset=utf8', 'root', 'root'); 4} catch(PDOException $e) { 5 print('DB接続エラー:' . $e->getMessage()); 6} 7
何かアドバイスをいただけませんでしょうか?
よろしくお願いいたします。
追記
membersという別テーブルにログイン情報を保存するテーブルを作っています。
デバックした画像です。
なにもエラー起きてませんか?
接続時じゃなく、実行時にtry-catchうつしても。
あと、insert-setはMySQLの方言なのでそれで覚えてしまうと苦労するかと。
ご返信ありがとうございます。
送信してもエラーは出て無いですね。
>実行時にtry-catchうつしても。
というのはtry-catch外すということですか?
外すのではなくうつす。
今接続時にしかtry-catchしてませんが、接続は一度確立してしまえばまサーバーの切断でもない限りエラーとなることはないので、むしろ実行時に必要です。
もしこれでなにも出力されないなら分岐の条件満たしてないんでしょう
if (!empty($_POST)) {
if ($_POST['message'] !== '') {
try {
$message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=0, created=NOW()');
} catch(PDOException $e) {
print('DB接続エラー:' . $e->getMessage());
}
$message->execute(array(
$member['id'],
$_POST['message']
));
}
}
このようにうつして、送信してみましたが、エラーは出ませんでした。
送信はされているということですかね?
デバッグしてください。
コードがどこを通っているか、
想定の場所で想定の値が変数におさめられているか。
if (!empty($_POST)) {
if ($_POST['message'] !== '') {
try {
$message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=0, created=NOW()');
} catch(PDOException $e) {
print('DB接続エラー:' . $e->getMessage());
}
$message->execute(array(
$member['id'],
$_POST['message']
));
var_dump($_POST['message']);
exit();
}
}
「こんにちは」とメッセージをいれて、var_dump()をいれて、表示をみると、
string(15) "こんにちは" と表示されました。
何が考えられますか?
よろしくお願いします。
そして、if (!empty($_POST)) { の下にも
var_dump($_POST['message']);
exit();
を入れても
string(15) "こんにちは"
と表示されました。
なにがかんがえられますか?
現状を質問本文に追記してください。
頑張って書いてくれているのに申し訳ないですが、質問本文に書いてないことは基本伝わらないと思って良いです。
あくまでこちらは「質問への追記修正依頼」のコメント欄です。
あと、最初にも書いてますが、insert-setはMySQLの方言なのでそれで覚えてしまうと苦労するかと。
if (!empty($_POST)) {
if ($_POST['message'] !== '') {
try {
$message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=0, created=NOW()');
} catch(PDOException $e) {
print('DB接続エラー:' . $e->getMessage());
}
$message->execute(array(
$member['id'],
$_POST['message']
));
var_dump(array(
$member['id']));
exit();
}
}
このように記載したところ、
array(1) { [0]=> string(2) "20" }
このように表示されました。
どうかんがえられますか?
申し訳ございません。
membersというテーブルにログイン情報を保存していて、そのIDが20となります。
よろしくお願いいたします。
最初にも書いてますが、insert-setはMySQLの方言なのでそれで覚えてしまうと苦労するかと。
書籍変更した方がいいレベル。