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

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

ただいまの
回答率

89.99%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 100

前提・実現したいこと

掲示板のようなものを作成し、投稿を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/ツールのバージョンなど)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Takumiboo

    2019/12/02 23:08

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

    キャンセル

  • kei344

    2019/12/03 13:24

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

    キャンセル

  • engineer_yagiko

    2019/12/03 19:41

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

    キャンセル

回答 2

+2

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/03 09:14

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

    キャンセル

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/03 09:56

    > 全角のPOST

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

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる