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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Q&A

解決済

1回答

185閲覧

ブラウザを更新するたびに空のデータがデータベースに蓄積されます。

rude_rockers

総合スコア32

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

0グッド

0クリップ

投稿2018/12/16 05:15

編集2018/12/16 14:52

ブラウザを更新するたびに空のデータがデータベースに蓄積されます。

色々調べても理由がわかりませんでしたので投稿しました。
どこかコードがおかしいところがあるでしょうか?

環境
Vagrant
CentOS7
Apache 2.4
php7
Mysql 5.7

index.php

1<?php 2require_once('config.php'); 3ini_set('display_errors', TRUE); 4error_reporting(E_ALL); 5?> 6 7<!DOCTYPE html> 8<html> 9<head> 10<meta http-equiv="X-UA-Compatible" content="IE=edge"> 11<title>PHP掲示板</title> 12<meta charset="utf-8"> 13<meta name="author" content=""> 14<meta name="viewport" content="width=device-width, initial-scale=1"> 15<link rel="stylesheet" href="style.css"> 16<link rel="shortcut icon" href=""> 17</head> 18<body> 19 <h1>PHP掲示板</h1> 20<!-- コンテンツを記述 --> 21<form action="" method="POST"> 22<label for="nameForm">名前:</label> 23<p><input id="nameForm" type="text" name="name" value="" style="width:280px"/></p> 24<label for="commentForm">コメント:</label> 25<p><textarea id="commentForm" name="comment" rows="8" cols="50"></textarea></p> 26<p><input id="submitForm" type="submit" name="submit" value="投稿"></p> 27</form> 28<!-- 投稿一覧 --> 29<h2>投稿一覧</h2> 30<?php if (empty($_POST['name']) || $_POST['name'] === ''): ?> 31 名前がありません。 32<?php elseif (empty($_POST['comment']) || $_POST['comment'] === ''): ?> 33 コメントがありません。 34<?php endif; ?> 35 36 <?php foreach( $posts as $post ): ?> 37 <ul> 38 <div class="list"> 39 <div class="name"><li><?php echo '名前:'. $post['name']; ?></li></div><br> 40 <div class="comment"><li><?php echo $post['comment']; ?></li></div> 41 <li>&emsp;</li> 42 </div> 43 </ul> 44 <?php endforeach; ?> 45 46</body> 47</html>

config.php

1<?php 2/* 設定 */ 3// DSN(Data Source Name) 4define('DB_DSN', 'mysql:dbname=paisen1_bbs;host=localhost;charset=utf8'); 5define('DB_USER', 'root'); // ユーザー名 6define('DB_PASS', 'rude19=J%79kunshi'); // パスワード 7 8header('Content-Type: text/html; charset=utf-8'); 9 10try { 11 12 // データベースに接続 13 $pdo = new PDO( 14 DB_DSN, 15 DB_USER, 16 DB_PASS, 17 [ 18 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 19 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 20 ] 21 ); 22 23 /* データベースから値を取ってきたり, データを挿入したりする処理 */ 24 $stmt = $pdo->prepare("insert into board (name, comment) values (:name, :comment)"); 25 $stmt->execute([':name'=>$_POST['name'],':comment'=>$_POST['comment']]); 26 echo "inserted: " . $pdo->lastInsertId(); 27 28 $query = $pdo->query("select * from board ORDER BY id DESC"); 29 $posts = $query->fetchAll(PDO::FETCH_ASSOC); 30 31 $delete = $pdo->prepare("DELETE FROM board WHERE id=(:id)"); 32 $delete->execute([':id'=>$_POST['id']]); 33 34 35} catch (PDOException $e) { 36 37 // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する 38 // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい 39 header('Content-Type: text/plain; charset=UTF-8', true, 500); 40 exit($e->getMessage()); 41 42} 43

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

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

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

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

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

sakura_hana

2018/12/16 05:43

このコードを見る限りデータベースへデータが入ることはありません。何をもって「データベースに蓄積されている」としていますか?(「データベースに蓄積されている」というのがそもそも誤解である可能性もあります。phpMyAdmin的なもので確認するとレコードが増えている、index.phpを開くと〜〜が羅列されている等、目で見て分かる内容を記載してください)
seastar3

2018/12/16 11:32

config.phpは何を行っていますか。log記録用のinsertコマンドの実行コード等含まれていませんか。
rude_rockers

2018/12/16 14:49

そうですね、config.phpの方が問題かもしれません。追記します。
退会済みユーザー

退会済みユーザー

2018/12/16 15:23

config.php の config って意味わかってる?
rude_rockers

2018/12/16 15:34

すいません。本来はデータベースに繋げる設定のみ書くものですよね。横着して一緒に描いてしまいました。それが原因でしょうか?
rude_rockers

2018/12/17 02:20

す、すいません!! その横着が原因でした。 構造を理解しておりませんでした。 勉強します。
guest

回答1

0

ベストアンサー

requireしているconfig.phpのtryブロックでinset, select, deleteをしているから。

パラメータをみてifで切り分けるなどして必要なsqlのみが実行されるようにすべき。

別途、何もかも空のデータは入らないような制約をDBに課したほうがいいと思います。

投稿2018/12/17 00:39

papinianus

総合スコア12705

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

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

rude_rockers

2018/12/17 01:42

なるほど過ぎてビックリしました。 そうですね。 やはり横着はダメだし、なぜそうなるのか順を追って考えられていませんでした。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問