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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

3379閲覧

簡単な掲示板の作成

uverworld101nm

総合スコア172

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/09/06 06:21

編集2016/09/06 07:22

簡単な掲示板を作ろうと思いました。
まず、メッセージ一覧ページを表すページは作成できて、接続もできました。しかし、投稿ページは作成してもメッセージ一覧ページから呼び出すことができません。
エラーメッセージによると、「データベースを選択することができませんでした」というメッセージになります。
今、原因が何なのか調べていますがもし原因がわかったら教えてください。

PHP

1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4<title>一言</title> 5</head> 6<body> 7<form action="regist.php" method="post"> 8 名前:<br /> 9 <input type="text" name="name" size="30" value="" /><br /> 10 メッセージ:<br /> 11 <textarea name="message" cols="30" rows="5"></textarea><br /> 12 <br /> 13 <input type="submit" value="投稿する" /> 14</form> 15<?php 16 17// MySQL に接続し、データベースを選択します。 18$link = mysqli_connect('localhost', 'ユーザー名', 'パスワード','データベース名'); 19 20// 接続状況をチェックします 21if (mysqli_connect_errno()) { 22 die('接続失敗です。'.mysqli_connect_error()); 23} 24 print('<p>接続に成功しました。</p>'); 25 26 // SQL クエリを実行します。 27if ($result = mysqli_query($link, 'SELECT * from テーブル名')) { 28 29 // 結果を出力します。 30 while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) { 31 echo "<p>\n"; 32 echo '<strong>[No.' . $data['no'] . '] ' . htmlspecialchars($data['name'], ENT_QUOTES) . ' ' . $data['date'] . "</strong><br />\n"; 33 echo "<br />\n"; 34 echo nl2br(htmlspecialchars($data['message'], ENT_QUOTES)); 35 echo "</p>\n"; 36 37 } 38 39 // 結果セットを開放します 40 mysqli_free_result($result); 41} 42 43mysqli_close($link); 44?> 45</body> 46</html>

問題のphpコード

PHP

1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4<title>一言</title> 5</head> 6<body> 7<?php 8 9if ($_REQUEST['name'] == '' or $_POST['message'] == '') { 10 exit('error'); 11} 12 13$con = mysqli_connect('localhost', 'ユーザー名', 'パスワード','データベース名'); 14if (!$con) { 15 exit('データベースに接続できませんでした。'); 16} 17 18$result = mysqli_select_db('データベース名', $con); 19if (!$result) { 20 exit('データベースを選択できませんでした。'); 21} 22 23$result = mysqli_query('SET NAMES utf8', $con); 24if (!$result) { 25 exit('文字コードを指定できませんでした。'); 26} 27 28$name = $_REQUEST['name']; 29$message = $_REQUEST['message']; 30$date = date('Y-m-d H:i:s'); 31 32$result = mysqli_query("INSERT INTO messages(name, message, date) VALUES('$name', '$message', '$date')", $con); 33if (!$result) { 34 exit('データを登録できませんでした。'); 35} 36 37$con = mysqli_close($con); 38if (!$con) { 39 exit('データベースとの接続を閉じられませんでした。'); 40} 41 42?> 43<p>メッセージを投稿しました。</p> 44<ul> 45 <li><a href="test2.php">一覧へ戻る</a></li> 46</ul> 47</body> 48</html>

PHP

1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4<title>一言</title> 5</head> 6<body> 7<?php 8 9if ($_REQUEST['name'] == '' or $_POST['message'] == '') { 10 exit('error'); 11} 12 13 14$con = mysqli_connect('localhost', 'ユーザー名', 'パスワード','データベース名'); 15if (!$con) { 16 exit('データベースに接続できませんでした。'); 17} 18 19 20$result = mysqli_query($con,'SET NAMES utf8'); 21if (!$result) { 22 exit('文字コードを指定できませんでした。'); 23} 24 25$name = $_REQUEST['name']; 26$message = $_REQUEST['message']; 27$date = date('Y-m-d H:i:s'); 28 29$query_str = "INSERT INTO messages(name, message, date) VALUES('$name', '$message', '$date')"; 30 31$con = mysqli_close($con); 32if (!$con) { 33 exit('データベースとの接続を閉じられませんでした。'); 34} 35 36?> 37<p>メッセージを投稿しました。</p> 38<ul> 39 <li><a href="test2.php">一覧へ戻る</a></li> 40</ul> 41</body> 42</html>

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

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

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

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

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

guest

回答2

0

php

1$result = mysqli_select_db('データベース名', $con);

でなく

php

1$result = mysqli_select_db($con, 'データベース名');

です。

PHP: mysqli::select_db - Manual
http://php.net/manual/ja/mysqli.select-db.php

なお、mysqli_select_db()を使わなくてもいいように、
mysqli_connect()一発で目的のデータベースに接続するといいんじゃないかと思います。

【加筆】

php

1$con = mysqli_connect('localhost', 'ユーザー名', 'パスワード','データベース名1'); 2if (!$con) { 3 exit('データベースに接続できませんでした。'); 4} 5 6$result = mysqli_select_db($con, 'データベース名2'); 7if (!$result) { 8 exit('データベースを選択できませんでした。'); 9}

の用にデータベース名が異なる場合はmysqli_select_db()を使う意味がありますが、
そもそもどちらにも同じデータベース名を記述するのであれば
mysqli_select_db()の下りを省いて

php

1$con = mysqli_connect('localhost', 'ユーザー名', 'パスワード','データベース名'); 2if (!$con) { 3 exit('データベースに接続できませんでした。'); 4}

だけで十分です。

【加筆2】

php

1$result = mysqli_query("INSERT INTO messages(name, message, date) VALUES('$name', '$message', '$date')", $con); 2if (!$result) { 3 exit('データを登録できませんでした。'); 4}

でなく

php

1$result = mysqli_query($con, "INSERT INTO messages(name, message, date) VALUES('$name', '$message', '$date')"); 2if (!$result) { 3 exit('データを登録できませんでした。'); 4}

です、$conの位置が間違い。

【加筆3】
試しに

php

1$query_str = "INSERT INTO messages(name, message, date) VALUES('$name', '$message', '$date')"; 2var_dump($query_str);

などとしてみてはいかがでしょうか。
変数が展開されているかどうか、日付フォーマットが想定した形になっているか、
など確認してみてください。
ついでに言うと私なら、変数名をくくって明示します。

php

1$query_str = <<<EOT 2INSERT INTO messages(name, message, date) VALUES('${name}', '${message}', '${date}') 3EOT

投稿2016/09/06 06:30

編集2016/09/06 06:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uverworld101nm

2016/09/06 06:35

それは、どういう風に書けばいいのですか?
uverworld101nm

2016/09/06 06:37

今度は、データを登録する事が出来ませんでした。と表示されるようになりました。
uverworld101nm

2016/09/06 06:41

データを登録する事が出来ませんでした。と表示されるようになった原因は何でしょうか?
退会済みユーザー

退会済みユーザー

2016/09/06 06:42

加筆2を見てください。$conの位置がおかしいためです。
uverworld101nm

2016/09/06 06:48

それが、そこも変えたのですが相からずデータを登録する事が出来ませんでした。と表示されます。
uverworld101nm

2016/09/06 06:56

string(106) "INSERT INTO messages(name, message, date) VALUES('ユーザー名', '嬉しかった', '2016-09-06 08:55:01')" メッセージを投稿しました。 一覧へ戻る と表示されます。
uverworld101nm

2016/09/06 06:57

名前: メッセージ: データベースを選択できませんでした。 となります。
退会済みユーザー

退会済みユーザー

2016/09/06 07:00

「データベースを選択できませんでした」は$conの位置ではないですか?
退会済みユーザー

退会済みユーザー

2016/09/06 07:01

焦らず、mysqli_*系のphpマニュアルページを首っ引きで見ながら、机上デバッグしてください。逐一追加質問されると、こちらも負担が大きくなって困ります。
uverworld101nm

2016/09/06 07:21

質問文に変更後のコードを掲載します。
退会済みユーザー

退会済みユーザー

2016/09/06 07:40

そもそもの質問内容から、回答などリアクションを多数もらってまた変わってきていると思うので、当初の質問はクリアしたものとしてBA設定して、現状を整理してもう一度質問を起こし直したほうが健全だと思います。 もう疲れたのでしばらく放置しますが、皆様よろしくお願いします。
uverworld101nm

2016/09/06 07:42

わかりました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/09/06 09:49

今一度、PHP: mysqli - Manual <http://php.net/manual/ja/class.mysqli.php>以下の各関数のページで、「手続き型」と書いている方のパラメータの与え方をご確認の上、動作しない箇所付近でmysqli_db_select()やmysqli_query()などの一連のデータベース関数の呼び方がおかしくないか点検してください。
guest

0

typo(簡単な打ち間違い)ではありませんか?
mysqli_connectで接続するDB名まで指定されているので、db_selectしなくてもとおるように思いますが、DB変更の必要があるのでしょうか。
とりあえず

PHP

1# $result = mysqli_select_db('データベース名', $con);

のようにコメントアウトして動作するか見てみてください。

投稿2016/09/06 06:29

kunai

総合スコア5405

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

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

uverworld101nm

2016/09/06 06:37

ご回答ありがとうございます。 今度は、データを登録する事が出来ませんでした。と表示されるようになりました。
kunai

2016/09/06 06:42

それは別途質問を立ててくださいと言いたいところですが。。。 VALUES('$name', '$message', '$date') ↑のところで、変数はシングルクォートでは展開されませんので、 '$name' 等ではなく $name 等と、シングルクォートなしで記述してください。 もしくは変数展開がされるダブルクォート"で囲ってください。
uverworld101nm

2016/09/06 06:49

それが、そこも変えたのですが相からずデータを登録する事が出来ませんでした。と表示されます。
uverworld101nm

2016/09/06 07:02

INSERT INTO messages(name, message, date) VALUES('${name}', '${message}', '${date}') ですか?
kunai

2016/09/06 07:19

いや、なのでシングルクオートで囲わないでください
uverworld101nm

2016/09/06 07:24

$query_str = "INSERT INTO messages(name, message, date) VALUES($name, $message, $date)"; に変更しても変わりません。
uverworld101nm

2016/09/06 07:25

メッセージは投稿できるようになりました。 しかし、 名前: メッセージ: データベースを選択できませんでした。 となります。
jm1156

2016/09/06 07:28

なんども言われていると思うのですが、また言いますよ。 >ですか? って質問する前に、自分でやってみてください。
uverworld101nm

2016/09/06 07:31

jim1156さん、やってから質問をしているんですが
jm1156

2016/09/06 07:34

>INSERT INTO messages(name, message, date) VALUES('${name}', '${message}', '${date}') >ですか? って、先にきいてるじゃないですか。 やったんなら、質問しなくていいでしょ。 っていうか、私が書き込んでる間にやっただけでしょう・・・。 ただのタイムラグですよ。
KaedeKazane

2016/09/06 07:38

横から失礼します。 >kunaiさん SQL文自体はダブルクォートで囲われているので、指摘されているシングルクォートは「PHP上で文字列を表すもの」ではなく、「SQL上で文字列を表すもの」かと思います。 なのでこの場合はシングルクォートのままで問題ないと思います(むしろシングルクォートが無いとSQL的に文字列として扱われずエラーになるのでは・・・?)
uverworld101nm

2016/09/06 07:39

では、なぜ投稿した内容が表示されないのですか?
jm1156

2016/09/07 23:28

こっちの質問にも書きましたけど、 https://teratail.com/questions/47005 if ($result = mysqli_query($link, 'SELECT * from テーブル名')) { ここの部分、 if文の中で代入? このあたりをトレースして、変数の中身をみてください。 あと、このSELECT文のSQLのテーブル名が「テーブル名」になっていますが、 INSERTしているのはmessagesテーブルですよね? そこは理解していますか? このSQLを直接DBに実行してみましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問