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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

927閲覧

PHPを使ってmySQLのデータを追加、表示したい。

engineer_yagiko

総合スコア5

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2019/12/02 12:58

編集2019/12/02 15:01

前提・実現したいこと

掲示板のようなものを作成し、投稿をDBで管理し追加と表示をしたいです。

下記の条件を満たしたいです。
・利用者が名前とコメントを入力し、発言できる。
・利用者の過去発言内容をデータベースで管理する。
・全ての利用者の過去発言を一覧で見ることができ、「名前、コメント、発言日時」の最低限3つを1行ずつ表示する。
・利用者の名前は最大20文字以内とし、それ以上の場合はエラーメッセージを表示し、発言できないようにする。
・利用者のコメントは最大100文字以内とし、それ以上の場合はエラーメッセージを表示し、発言できないようにする。
・利用者の名前、コメントのどちらか又は両方が未入力だった場合、エラーメッセージを表示し、発言できないようにする。

発生している問題・エラーメッセージ

POSTでデータの取得もできていないように感じます。 エラーも表示されないので原因がわかりません。

該当のソースコード

<?php $name = ""; $comment = ""; $data = array(); $error = array(); $log = date('Y-m-d H:i:s'); $host = "IPアドレス"; $username = "ユーザー名"; $passwd = "パスワード"; $dbname ="DB名"; //sqlに接続。変数に代入 $link = mysqli_connect($host, $username, $passwd, $dbname); if ($link) { //文字化けの防止 mysqli_set_charset($link, 'utf8'); //送信データがPOSTの時に実行 if ($_SERVER['REQUEST_METHOD'] === 'post') { //nameの送信データを代入 if (isset($_POST['name']) === TRUE) { $name = $_POST['name']; } //送信データnameに不備があれば配列errorに代入 if (mb_strlen($name) > 20) { $error[] = '名前は20文字以内で入力をお願いします。'; } else if (mb_strlen($name) === 0) { $error[] = '名前を入力してください'; } if (isset($_POST['comment']) === TRUE) { $comment = $_POST['comment']; } //送信データcommentに不備があれば配列errorに代入 if (mb_strlen($comment) > 100) { $error[] = 'コメントは100文字以内で入力してください。'; } else if (mb_strlen($comment) === 0) { $error[] = 'コメントを入力してください。'; } var_dump($name); var_dump($comment); //配列$errorの個数を取得。 if (count($error) === 0) { $query = "INSERT INTO bulletion_bord(user_name, user_comment, data) VALUES('$name','$comment','$log')"; $result = mysqli_query($link, $query); if ($result === FALSE) { $error[] = '登録に失敗しました。'; } } } $query = "SELECT * FROM bulletion_bord"; $result = mysqli_query($link, $query); while ($row = mysqli_fetch_array($result)) { $data[] = $row; } mysqli_free_result($result); mysqli_close($link); } else { $error[] = '接続失敗'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta chaarset="utf-8"> <title>課題(中級)</title> </head> <body> <h1>一言掲示板</h1> <!-- エラーを表示 --> <?php foreach ($error as $value) { ?> <p><?php print $value; ?></p> <?php } ?> <form method="post"> 名前:<input type="text" name="name" size="15" value=""> コメント:<input type="text" name="comment" size="40" value=""> <input type="submit" value="投稿"> </form> <ul> <?php foreach ($data as $value) { ?> <li> <?php print $value['user_name']; ?> <?php print $value['user_comment']; ?> <?php print $value['data']; ?> </li> <?php } ?> </ul> </body> </html>

試したこと

var_dump()を使用してデータが入っているか確認。
IF($link)の中の処理からされていないように思いました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

Takumiboo

2019/12/02 12:59

<code>ボタンを使って、ソースコードはマークアップしてください。 「IF($link)の中の処理からされていないように思」われるのであれば、echoを所々に挟むなどして、どこで詰まっているのか確認してみてください。
Orlofsky

2019/12/02 13:13

[MySQL]タグを追加してください。
engineer_yagiko

2019/12/02 14:00

質問の修正方法がわからないのですが・・。これから投稿する際は気を付けます。 var_dump関数にて確認はしているのですが何も代入されていないと表示されます
Takumiboo

2019/12/02 14:08

いやいや、質問文の下にデカデカと「編集」って書いてあるでしょう…。その後の手順はOrlofskyさんが貼ってくださったリンク先をお読みください。
kei344

2019/12/03 04:24

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
engineer_yagiko

2019/12/03 10:41

そうさせていただきました、ご指摘ありがとうございます。
guest

回答2

0

IF($link)の中の処理からされていないように思いました。

であれば、$link の値を確認してください。
条件の確認には var_export() を使うとわかりやすいです。

デバッグ環境を整え、ステップ実行すると良いですよ。学習効率が上がります

投稿2019/12/03 00:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

engineer_yagiko

2019/12/03 00:14

$linkにはDBのデータが入っていました・・・。調べて使ってみます、ありがとうございます!
guest

0

自己解決

$_SERVER['REQUEST_METHOD'] === 'post' と記述していましたが全角のPOSTにすると直りました。お騒がせしてすみませんでした。

投稿2019/12/03 00:30

engineer_yagiko

総合スコア5

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

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

yambejp

2019/12/03 00:56

> 全角のPOST 大文字のPOSTですね。 全角は多バイト文字の「POST(もしkはpost)」になります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問