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

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

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

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

Q&A

解決済

1回答

1848閲覧

phpで簡易掲示板作成時のエラーについて

murama2

総合スコア113

PHP

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

0グッド

1クリップ

投稿2019/02/12 08:13

phpの勉強のために、とあるサイトの掲示板制作のコードを真似て作成しているのですが、
下記のエラーがでており解決方法がわからず困っています。
バージョンの違いの物なのかなと思いますが、どのように対処したらいいでしょうか。
PHPバージョン:7.2

■エラー内容
Notice: Undefined variable: errors in C:\xampp\htdocs\php\actions.php on line 43

【index.php】

<?php require_once('actions.php'); try{ //order by id descで、idの降順(大きい物から小さい順)に記事一覧を取得 $result = $pdo->query("select * from users order by id desc"); $count = $result->rowCount(); } catch(Exception $e) { echo $e->getMassage() . PHP_EOL; } $ptm = new PostTheMessage(); if($_SERVER['REQUEST_METHOD'] === 'POST') { $message = $_POST; $ptm->post($message); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>掲示板</title> <link rel="stylesheet" href="css/sanitize.css"> <link rel="stylesheet" href="css/styles.css"> </head> <body> <div id="header"> <h1>掲示板</h1> <p>現在の投稿<span><?= $count; ?></span>件</p> </div><!-- header --> <div id="main"> <div id="modal" class="hidden"> <form action="" method="post"> <label for="name">名前</label> <input type="text" name="name" value="" id="name"><br> <label for="password">削除用パスワード</label> <input type="password" name="password" value=""><br> <textarea name="body" rows="8" cols="40" placeholder="ここにコメントを記入してください"></textarea><br> <button type="submit" name="submit" id="submit">書き込む</button> </form> <p id="close_modal"> Close </p> </div><!-- modal --> <div id="mask" class="hidden"></div> <div id="open_modal"> <h2>投稿する</h2> </div> <div id="posts"> <?php if($count == 0): ?> <p> まだ投稿はありません。 </p> <?php endif; ?> <dl> <?php $i = 0; ?> <?php foreach ($result as $row): ?> <dt class="postrow <?php if($i > 4) { echo 'post_hidden'; } ?>"><!-- 5件以上は非表示 --> <span><?= $count - $i; ?></span><span>名前:<?= h($row["name"]) ?></span> <span><?= h($row["created"]) ?></span><br> </dt> <dd class="postrow <?php if($i > 4){ echo 'post_hidden'; } ?>"><!-- 5件以上は非表示 --> <?= nl2br(h($row["body"])) ?> <a href="delete.php?id=<?= h($row["id"]) ?>">削除</a> </dd> <?php $i++ ?> <?php endforeach; ?> </dl> <div id="load_result"></div> <button id="load_more">全件表示</button> </div><!-- posts --> </div><!-- main --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="actions.js"></script> </body> </html>

【actions.php】

<?php require_once('config.php'); function h($s){ return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); } try { $pdo = new PDO(DSN, DB_USER, DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { echo $e->getMessage() . PHP_EOL; } class PostTheMessage{ public function post($message){ try{ // error check $validated_message = $this->_validatePost($message); // imap_save $this->_save($validated_message); // redirect header('Locaton:http://'. $_SERVER['SERVER_NAME']); exit; } catch(\Exception $e){ echo $e->getMessage() . PHP_EOL; } } private function _validatePost($post){ if(mb_strlen($post["password"]) > 7){ $post["password"] = password_hash($post["password"], PASSWORD_DEFAULT); } else { $errors[] = '8文字以上のパスワードを設定してね。'; } if(mb_strlen($post["name"]) > 15){ $errors[] = '名前が長すぎるよ'; } if(empty(trim($post["body"])) || mb_strlen($post["body"]) > 255) { $errors[] = '文章長すぎるか入力してないよ。'; } if($errors){ die(implode("<br />\n", $errors)); } return $post; } private function _save($v_message){ try{ $pdo = new PDO(DSN, DB_USER, DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if(empty($v_message['name'])){ $stmt = $pdo->prepare("insert into users(body, password) values(?, ?)"); $stmt->execute([$v_message["body"], $v_message["password"]]); } else { $stmt = $pdo->prepare("insert into users(name, body, password) values(?, ?, ?)"); $stmt->execute([$v_message["name"], $v_message["body"], $v_message["password"]]); } } catch(Exception $e){ echo $e->getMessage() . PHP_EOL; exit; } } }

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

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

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

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

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

m.ts10806

2019/02/12 08:15

エラー内容については調べてみましたか?Google翻訳にかけるなり、「Notice: Undefined variable: 」部分を検索にかけるなりすると解決のために一歩進むとは思います。
yoorwm

2019/02/12 08:17

Noticeというのはエラーでは無いですよ。 参考ソースと質問レベルが離れている気がするので、もう少し簡単なサンプルから始めた方が良いかと思います。
n_takapyon

2019/02/12 08:24

バージョンの問題ではなく適切に変数の宣言がされていないのが原因だと思いますので。 エラーメッセージに書いてある通り43行目から探ってみてください。
guest

回答1

0

ベストアンサー

行数で

php

1 private function _validatePost($post){ 2 if(mb_strlen($post["password"]) > 7){ 3 $post["password"] = password_hash($post["password"], PASSWORD_DEFAULT); 4 } else { 5 $errors[] = '8文字以上のパスワードを設定してね。'; 6 } 7 if(mb_strlen($post["name"]) > 15){ 8 $errors[] = '名前が長すぎるよ'; 9 } 10 if(empty(trim($post["body"])) || mb_strlen($post["body"]) > 255) { 11 $errors[] = '文章長すぎるか入力してないよ。'; 12 } 13 if($errors){ 14 die(implode("<br />\n", $errors)); 15 } 16 return $post; 17 }

if($errors){とわかると思いますが、理由はエラー処理にならない限り$errorsの宣言がないからですのでこの関数の最初にでも$errors = [];でも入れておけばよいかと・・・または(かつ)if($errors){empty関数でチェックする

投稿2019/02/12 08:21

rururu3

総合スコア5545

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問