質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2790閲覧

php mysql post insertができない

tmtmmm

総合スコア24

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/17 05:21

編集2019/03/17 05:32

先日、質問させていただいたことで同じ問題が起きました。

リンク内容

本日、再開したところまたinsertされない問題が起きたので投稿させていただきます。先日はphpmyadminにてreply_member_idのnullにチェックを入れて再開したら治ったと思っていましたがその後nullのチェックを外しても関係ありませんでした。

プログラムの15行目にecho LINE;は反応あり、17行目は反応なしと!empty($_POST)で引っかかっていないようです。ですが、61〜74行目のfromタグから来ています。何かchomeのセッションあたりの設定など問題でしょうか?ご協力お願いします。

php

1<?php 2session_start(); 3require "join/dbconnect.php"; 4 5if(isset($_SESSION['id']) && $_SESSION['time'] + 3600 >time()){ 6 $_SESSION['time']=time(); 7 $members=$db->prepare('SELECT * FROM members WHERE id=?'); 8 $members->execute(array($_SESSION['id'])); 9 $member=$members->fetch(); 10}else{ 11header('Location:login.php'); 12exit(); 13} 14 15echo __LINE__; 16if(!empty($_POST)){ 17echo __LINE__; 18 if($_POST['message'] !== ''){ 19 $message=$db->prepare('INSERT INTO posts SET member_id=?,message=?,reply_message_id=?,created=NOW()'); 20 $message->execute(array( 21 $member['id'], 22 $_POST['message'], 23 $_POST['reply_post_id'] 24 )); 25 header('Location:index.php'); 26 exit(); 27 } 28} 29 30echo __LINE__; 31$posts=$db->query('SELECT m.name, m.picture, p.* FROM members m,posts p WHERE m.id=p.member_id ORDER BY p.created DESC'); 32 33 34if(isset($_REQUEST['res'])){ 35 //返信 36 $response=$db->prepare('SELECT m.name, m.picture,p.* FROM members m, posts p WHERE m.id=p.member_id AND p.id=?'); 37 $response->execute(array($_REQUEST['res'])); 38 39 $table=$response->fetch(); 40 $message='@'.$table['name'].''.$table['message']; 41} 42?> 43 44<!DOCTYPE html> 45<html lang="ja"> 46<head> 47 <meta charset="UTF-8"> 48 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 49 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 50 <title>ひとこと掲示板</title> 51 52 <link rel="stylesheet" href="style.css" /> 53</head> 54 55<body> 56<div id="wrap"> 57 <div id="head"> 58 <h1>ひとこと掲示板</h1> 59 </div> 60 <div id="content"> 61 <div style="text-align: right"><a href="logout.php">ログアウト</a></div> 62 <form action="" method="post"> 63 <dl> 64 <dt><?php print(htmlspecialchars($member['name'],ENT_QUOTES)); ?>さん、メッセージをどうぞ</dt> 65 <dd> 66 <textarea name="message" cols="50" rows="5"><?php print(htmlspecialchars($message,ENT_QUOTES)); ?></textarea> 67 <input type="hidden" name="reply_post_id" value="<?php print(htmlspecialchars($_REQUEST['res'],ENT_QUOTES)); ?>" /> 68 </dd> 69 </dl> 70 <div> 71 <p> 72 <input type="submit" value="投稿する" /> 73 </p> 74 </div> 75 </form> 76<?php foreach($posts as $post): ?> 77 <div class="msg"> 78 <img src="member_picture/<?php print(htmlspecialchars($post['picture'],ENT_QUOTES)); ?>" width="48" height="48" alt="<?php print(htmlspecialchars($post['name'],ENT_QUOTES)); ?>" /> 79 <p><?php print(htmlspecialchars($post['message'],ENT_QUOTES)); ?><span class="name"><?php print(htmlspecialchars($post['name'],ENT_QUOTES)); ?></span>[<a href="index.php?res=<?php print(htmlspecialchars($post['id'],ENT_QUOTES)); ?>">Re</a>]</p> 80 <p class="day"><a href="view.php?id=<?php print(htmlspecialchars($post['id'],ENT_QUOTES)); ?>"><?php print(htmlspecialchars($post['created'],ENT_QUOTES)); ?></a> 81 82 <?php if($post['reply_message_id']>0):?> 83 84<a href="view.php?id=<?php print(htmlspecialchars($post['reply_message_id'],ENT_QUOTES)); ?>"> 85返信元のメッセージ</a> 86<?php endif; ?> 87 <?php if($_SESSION['id']==$post['member_id']): ?> 88 [<a href="delete.php?id=<?php print(htmlspecialchars($post['id']));?>" 89 style="color: #F33;">削除</a>] 90<?php endif; ?> 91 </p> 92 </div> 93<?php endforeach; ?> 94<ul class="paging"> 95<li><a href="index.php?page=">前のページへ</a></li> 96<li><a href="index.php?page=">次のページへ</a></li> 97</ul> 98 </div> 99</div> 100</body> 101</html>
<?php try{ $db=new PDO('mysql:dbname=mini_bbs;host=localhost:8889;charset=utf8','root','root'); }catch(PDOException $e){ print('DBエラー'.$e->getMessage()); } ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/17 05:24

処理はどの行まで実行されていますか?
tmtmmm

2019/03/17 05:25

画面が真っ白になるなどなくERRORなく29行目のLINEも出ています。
退会済みユーザー

退会済みユーザー

2019/03/17 05:28

ご自身で解決できるようにデバッグの方法をお教えしますので、「join/dbconnect.php」を提示してください。
tmtmmm

2019/03/17 05:29

95行目にも入れましたがlineが出ています
tmtmmm

2019/03/17 05:33

dbconnectを記載しました
guest

回答1

0

ベストアンサー

デバッグ時に何をすればいいかは、コメントで全て書きました。

php

1/** 2 * join/dbconnect.php 3 * 質問サイトではコードとファイル名の関連をわかりやすくするために、コメントを入れてくれ。 4 */ 5<?php 6// 接続部分だけをキャッチしても仕方ないので、不要。 7// もう一つのファイルでキャッチする 8// try{ 9 $db=new PDO('mysql:dbname=mini_bbs;host=localhost:8889;charset=utf8','root','root'); 10 // エラーがあったときに例外を投げる設定。こればないと、try ~ catch しても無意味。 11 // どんなシステムでも書かなきゃいけないものと認識すべき。 12 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 13// }catch(PDOException $e){ 14// print('DBエラー'.$e->getMessage()); 15// } 16?>

php

1<?php 2/** 3 * ファイル名を書くこと 4 */ 5// エラーメッセージをいつでも表示する設定 6ini_set('display_errors', true); 7 8// 全てのエラーを表示する。 9error_reporting(E_ALL); 10 11 12try { 13 14 15 session_start(); 16 require "join/dbconnect.php"; 17 18 if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 19 $_SESSION['time'] = time(); 20 $members = $db->prepare('SELECT * FROM members WHERE id=?'); 21 $members->execute(array($_SESSION['id'])); 22 $member = $members->fetch(); 23 } else { 24 // デバッグ時にはエラーを表示したいので、header関数は一旦コメントアウトする 25 // header('Location:login.php'); 26 exit(); 27 } 28 29 if (!empty($_POST)) { 30 31 if ($_POST['message'] !== '') { 32 $message = $db->prepare('INSERT INTO posts SET member_id=?,message=?,reply_message_id=?,created=NOW()'); 33 $message->execute(array( 34 $member['id'], 35 $_POST['message'], 36 $_POST['reply_post_id'] 37 )); 38 39 // デバッグ時にはエラーを表示したいので、header関数は一旦コメントアウトする 40 // header('Location:index.php'); 41 exit(); 42 } 43 } 44 45 $posts = $db->query('SELECT m.name, m.picture, p.* FROM members m,posts p WHERE m.id=p.member_id ORDER BY p.created DESC'); 46 47 if (isset($_REQUEST['res'])) { 48 //返信 49 $response = $db->prepare('SELECT m.name, m.picture,p.* FROM members m, posts p WHERE m.id=p.member_id AND p.id=?'); 50 $response->execute(array($_REQUEST['res'])); 51 52 $table = $response->fetch(); 53 $message = '@' . $table['name'] . '' . $table['message']; 54 } 55} catch (Exception $ex) { 56 var_dump($ex); 57} 58?> 59 60<!DOCTYPE html> 61<html lang="ja"> 62 <head> 63 <meta charset="UTF-8"> 64 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 65 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 66 <title>ひとこと掲示板</title> 67 68 <link rel="stylesheet" href="style.css" /> 69 </head> 70 71 <body> 72 <div id="wrap"> 73 <div id="head"> 74 <h1>ひとこと掲示板</h1> 75 </div> 76 <div id="content"> 77 <div style="text-align: right"><a href="logout.php">ログアウト</a></div> 78 <form action="" method="post"> 79 <dl> 80 <dt><?php print(htmlspecialchars($member['name'], ENT_QUOTES)); ?>さん、メッセージをどうぞ</dt> 81 <dd> 82 <textarea name="message" cols="50" rows="5"><?php print(htmlspecialchars($message, ENT_QUOTES)); ?></textarea> 83 <input type="hidden" name="reply_post_id" value="<?php print(htmlspecialchars($_REQUEST['res'], ENT_QUOTES)); ?>" /> 84 </dd> 85 </dl> 86 <div> 87 <p> 88 <input type="submit" value="投稿する" /> 89 </p> 90 </div> 91 </form> 92 <?php foreach ($posts as $post): ?> 93 <div class="msg"> 94 <img src="member_picture/<?php print(htmlspecialchars($post['picture'], ENT_QUOTES)); ?>" width="48" height="48" alt="<?php print(htmlspecialchars($post['name'], ENT_QUOTES)); ?>" /> 95 <p> 96 <?php print(htmlspecialchars($post['message'], ENT_QUOTES)); ?> 97 <span class="name"> 98<?php print(htmlspecialchars($post['name'], ENT_QUOTES)); ?>99 </span> 100 [<a href="index.php?res=<?php print(htmlspecialchars($post['id'], ENT_QUOTES)); ?>">Re</a>] 101 </p> 102 <p class="day"> 103 <a href="view.php?id=<?php print(htmlspecialchars($post['id'], ENT_QUOTES)); ?>"> 104 <?php print(htmlspecialchars($post['created'], ENT_QUOTES)); ?> 105 </a> 106 107 <?php if ($post['reply_message_id'] > 0): ?> 108 <a href="view.php?id=<?php print(htmlspecialchars($post['reply_message_id'], ENT_QUOTES)); ?>"> 109 返信元のメッセージ</a> 110 <?php endif; ?> 111 112 <?php if ($_SESSION['id'] == $post['member_id']): ?> 113 [<a href="delete.php?id=<?php print(htmlspecialchars($post['id'])); ?>" style="color: #F33;">削除</a>] 114 <?php endif; ?> 115 </p> 116 </div> 117 <?php endforeach; ?> 118 <ul class="paging"> 119 <li><a href="index.php?page=">前のページへ</a></li>F 120 <li><a href="index.php?page=">次のページへ</a></li> 121 </ul> 122 </div> 123 </div> 124 </body> 125</html>

投稿2019/03/17 05:45

編集2019/03/17 05:48
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmtmmm

2019/03/17 05:56

ありがとうございます。実行したところ82行目のtextareaで<br /> <b>Notice</b>: Undefined variable: message in <b>/Applications/MAMP/htdocs/mini_bbs/index.php</b> on line <b>82</b><br />と出ましたtextarea内の<?php 〜?> を削除したところエラー文は消えました。また、投稿ボタンを押したところ真っ白な画面になりました
退会済みユーザー

退会済みユーザー

2019/03/17 05:58

> 真っ白な画面になりました 回答どうりのことをしていないようです。 これ書いてないよね // エラーメッセージをいつでも表示する設定 ini_set('display_errors', true); // 全てのエラーを表示する。 error_reporting(E_ALL);
tmtmmm

2019/03/17 06:01

書いてあります。
退会済みユーザー

退会済みユーザー

2019/03/17 06:05

全てのファイルに書きましたか? 仮に、headerでセ遷移したページだったり他のページならエラーは表示されなくて当然なわけですが。 あと、忘れていたけど、exit で処理止めているところも全て // exit; にすべきですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問