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

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

ただいまの
回答率

87.77%

Undefined variable:DBからSELECTで値が取得できません。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,469

score 9

PHP初学者です。

MVCモデルを利用して「ひとこと掲示板」を開発してます。PhpMyAdminに保存した情報をSELECTで呼び出す処理が機能せず、 Undefined variableエラー表示が出てしまいました。。。

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

Notice: Undefined variable: link in /home/htdocs/bbs_controller.php on line 31
*該当コードは下記bbs_controller.phpの($data = update($link);)

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/include/model/bbs_model.php on line 18 
*該当コードは下記bbs_model.phpのfunction get_as_arrayのif($result = mysqli_query($link, $sql)){

Notice: Undefined variable: link in /home/codecamp_13439/htdocs/bbs_controller.php on line 32 Warning: mysqli_close() expects parameter 1 to be mysqli, null given in /home/codecamp_13439/include/model/bbs_model.php on line 12
*該当コードは下記bbs_controller.phpのclose_db_connect($link);

該当のソースコード(bbs_controller.php)

<?php

include_once '../include/conf/const.php';
require_once '../include/model/bbs_model.php';

$name = '';
$comment = '';
$message = '';

$err_msg = array();
$data = array();

//REQUEST METHODの取得
$request_method = get_request_method();
//ユーザーからのhttpリクエストがあれば
if($request_method === "POST"){
//POSTで名前チェック
$name =  get_post_data('name');
err_check_empty($name);
//POSTでコメントチェック
$name =  get_post_data('comment');
err_check_comment($comment);

if(count($err_msg) === 0){
$link = get_db_connect();
var_dump($link);
insert($link, $name, $comment);

}
$data = update($link);
close_db_connect($link);
$data = array_reverse($data);  

include_once '../include/view/bbs_view.php';

該当のソースコード2:(bbs_controller.php)

<?php 

function get_db_connect(){
if(!$link = mysqli_connect(HOST, USER, PASS, DBNAME)){
die('error: ' . mysqli_connect_error());
}
mysqli_set_charset($link, 'utf8');
return $link;
}

function close_db_connect($link){
mysqli_close($link); 
}

function get_as_array($link, $sql){
global $data;

if($result = mysqli_query($link, $sql)){
while($row = mysqli_fetch_assoc($result)){
$data[] = $row;
}
mysqli_free_result($result);
}
return $data;
}

function get_goods_table_list($link){
$sql = 'SELECT goods_name, price FROM ta9_goods_table';
return get_as_array($link, $sql);
}

function insert_db($link, $sql) {
// クエリを実行する成功
if (mysqli_query($link, $sql) === TRUE) {
return die('err :' . mysqli_query($link, $sql));
}else{
return $message = 'コメントに成功しました!';
}
}

function insert($link, $name, $comment) {
// SQL生成
$sql = 'INSERT INTO BBS(name, comment) VALUES(\'' . $name . '\', ' . $comment . ')';
// クエリ実行
return insert_db($link, $sql);
}

//DBからすべての名前、コメント、時間をSELECTで取得
function update($link){
$sql = 'SELECT name, comment, time FROM BBS';
return get_as_array($link, $sql);
}

//リクエストメソッドを取得
function get_request_method() {
return $_SERVER['REQUEST_METHOD'];
}

//POSTデータを取得
function get_post_data($key) {
$str = '';
if (isset($_POST[$key]) === TRUE) {
$str = $_POST[$key];
}
return $str;
}

//POSTで飛んできた値のエラーチェック
function err_check_empty($a){
global $err_msg;
if($a === ''){
$err_msg[] = '名前を入力してください';
}else if(mb_strlen($a) > 20){
$err_msg[] = '名前は20文字以内';
}
}
function err_check_comment($b){
global $err_msg;
if($b === ''){
$err_msg[] = 'コメントを入力してください';
}else if(mb_strlen($b) > 100){
$err_msg[] = 'コメントは100文字以内';
}
}

試したこと

Var_dump($link)でリンクIDが取得できているか、DBのテーブル名が正確か等。。

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

よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • m.ts10806

    2019/11/05 18:27

    コードはマークダウンのcode機能を利用してご提示ください。
    あと、エラーが出たのでしたらエラーをきちんと読みましょう。
    https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/11/05 19:39

    bbs_controller.php と書かれていますが、どちらかが、bbs_model.php では?

    キャンセル

  • m.ts10806

    2019/11/06 05:48

    >PhpMyAdminに保存した情報
    phpMyAdminはMySQL(またはMariaDB)を操作するためのツールの1つにすぎないので、保存先にはなりません。そこを間違えると話が通じなくなります。

    キャンセル

回答 1

check解決した方法

-1

アドバイス頂きありがとうございます!そもそもcontroller.php上で処理が上から順に行われる原則?の中でREQUEST_METHOD==='POST'が成立した時のみしかデーターベースに接続しないコードを書いていた為、SELECT処理が働かずviewに初期状態でDBの内容が反映されていないことが原因でした。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/11/06 04:23 編集

    コードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。

    キャンセル

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

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

同じタグがついた質問を見る