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

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

ただいまの
回答率

91.45%

  • PHP

    14842questions

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

  • phpMyAdmin

    470questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

[PHP] 画面にArrayと表示され目的の処理が行われません。。。

解決済

回答 2

投稿 2017/09/14 00:09

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

newyee

score 46

PHPの勉強で、自動販売機システムの課題を作成中なのですが、画面にArrayと表示され「在庫数」を変更することができません。。。「在庫数」に関しましては、以下のコードをチェック頂けたらと思います。
現在MVCモデルを勉強中ですので、model,Controller,viewの3つのファイルに分けて作成しております。
以下がController.phpのコードになります。

<?php 
// 設定ファイル読み込み
require_once '../include/conf/const.php';
// 関数ファイル読み込み
require_once './model.php';

$drink_info_list = array();
$err_msg = array();
$success_msg = array();
$drink_name = '';
$price = 0;
$stock = 0;
$status = 0;
$file_name ='';
$drink_id = 0;
$ext = '';


$link = get_db_connect();
if($_SERVER['REQUEST_METHOD'] === 'POST'){

    $submit_type = $_POST['submit_type'];

    switch ($submit_type) {
        case 'add_item':

        $drink_name = $_POST['user_name'];
        $price = $_POST['price'];
        $stock = $_POST['stock'];
        $status = $_POST['public_status'];

        //登録値チェック
        $err_msg[] = entry_name_check($user_name);
        $err_msg[] = entry_check_price($price);
        $err_msg[] = entry_check_stock($stock);

        //アップロードファイル名を変数に代入
        $temp_file = $_FILES['new_img']['tmp_name'];
        $file_name = '../img' . $_FILES['new_img']['name'];

        //拡張子取得
        $ext = extention($file_name);
        //拡張子チェック
        $err_msg[] = extention_check($ext);

        //ファイルパス+ファイル名
        $upload_file = '../img' . $drink_id . $ext;

        if(count($err_msg) === 0){

            //トランザクション開始
            mysqli_autocommit($link, $false);

            $sql = 'INSERT INTO drink_info_table(drink_name,price,status)VALUES(\'' . $drink_name . '\',' . $price . ',' . $status . ')';

            if(mysqli_query($link,$sql) === TRUE ){

                $drink_id = mysqli_insert_id($link);

                //drink_stock_tableにinsert
                $err_msg[] = insert_drink_stock_table($drink_id,$stock);

            }else{
                $err_msg[] = 'drink_info_table:insertエラー' . $sql;
            }

            //アップロード処理
            $err_msg[] = upload_img($file_name,$temp_file,$upload_file);    

           //トランザクション成否判定
           if(count($err_msg) === 0){

               $success_msg[] = '商品追加成功';

               mysqli_commit($link);

           }else{
               mysqli_rollback($link);
            }
        }

        break;

        case'change_value':

            $update_stock = $_POST['update_stock'];

            $drink_id = $_POST['drink_id'];
            if(isset($update_stock)){

                //整数かどうかを判定
                $err_msg[] = change_stock_number($update_stock);


                if(count($err_msg) === 0){

                    $sql = 'UPDATE drink_stock_table SET stock_number = ' . $update_stock . ' WHERE drink_id = ' . $drink_id;

                    if(mysqli_query($link,$sql) === TRUE){
                        $success_msg[] = '在庫変更成功';
                    }else{
                        $err_msg[] ='drink_stock_table:UPDATEエラー' . $sql;
                    }
                }
            }

            break;

        case 'change_status':


            $status = (int)$_POST['status'];
            $drink_id = (int)$_POST['drink_id'];

            if(($status) === 1){

                $sql = 'UPDATE drink_info_table SET status = 0 WHERE drink_id = ' . $drink_id; 

                if(mysqli_query($link,$sql) === FALSE){

                    $err_msg[] = 'drink_info_table:UPDATEエラー' . $sql;    

                }else{

                    $success_msg[] = 'ステータス変更成功';
                }

            }else{
                $sql = 'UPDATE drink_info_table SET status = 1 WHERE drink_id = ' . $drink_id; 

                if(mysqli_query($link,$sql) === FALSE){

                    $err_msg[] = 'drink_info_table:UPDATEエラー' .$sql;    

                }else{

                    $success_msg[] = 'ステータス変更成功';
                }

            }

            break;    

    }

}

//drink_info_table取得
$drink_info_list = get_drink_table($link);


//特殊文字をHTMLエンティティに変換
$drink_info_list = entity_as_array($drink_info_list);
//var_dump($drink_info_list);exit();

include_once './view.php';


?>

以下はmodel.phpになります。

<?php

//在庫数が整数かどうか
function change_stock_number($update_stock){
    $err_msg = '';
    if(ctype_digit($update_stock) === FALSE){

        $err_msg = '在庫数は整数のみ入力してください';

    }

    return $err_msg;
}

//drink_stock_tableにinsertする
function insert_drink_stock_table($drink_id,$stock){

    $err_msg = '';
    $sql = 'INSERT INTO drink_stock_table(drink_id,stock_number)VALUES(' . $drink_id . ',' . $stock . ')';
    if(mysqli_query($link,$sql) === FALSE){
        $err_msg = '$drink_stock_table:insertエラー' . $sql;
    }

    return $err_msg;
}


//アップロード処理
function upload_img($tmp_file,$file_name,$upload_file){

    $err_msg = '';


    if (is_uploaded_file($temp_file)) {

        if (move_uploaded_file($temp_file,$upload_file) === FALSE) {
            $err_msg = 'ファイルをアップロードできません。';            
        } 

    } else {
        $err_msg = 'ファイルが選択されていません。';
    }

    return $err_msg;
}

//拡張子チェック
function extention_check($ext){

    $err_msg = '';

    if(!($ext === 'jpeg' || $ext === 'jpg' || $ext === 'png')){
        $err_msg = 'ファイル形式が異なります。画像ファイルはjpegまたはpngのみ利用可能です';
    }

    return $err_msg;
}


//拡張牛取得
function extention($file_name){
    return substr($file_name,strrpos($file_name,'.') +1);
}

//登録商品名チェック
function entry_name_check($drink_name){
    $err_msg = '';
    if($drink_name = ''){
        $err_msg = '名前を入力してください';
    }
    return $err_msg;
}

//登録値段チェック
function entry_check_price($price){
    $err_msg = '';
    if(ctype_digit($price) !== TRUE ){
        $err_msg = '値段は整数のみ入力してください';    
    }elseif($price = ''){
        $err_msg = '値段を入力してください';
    }
    return $err_msg;
}
//登録個数チェック
function entry_check_stock($stock){
    $err_msg = '';

    if(ctype_digit($stock) !== TRUE ){
        $err_msg = '個数は整数のみ入力してください';    
    }elseif($stock = ''){
        $err_msg = '個数を入力してください';
    }

    return $err_msg;
}






function get_db_connect() {

    // コネクション取得
    if (!$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD, DB_NAME)) {
        die('error: ' . mysqli_connect_error());
    }

    // 文字コードセット
    mysqli_set_charset($link, DB_CHARACTER_SET);

    return $link;
}
function get_as_array($link,$sql){
    $data = array();

    if($result = mysqli_query($link,$sql)){

        if(mysqli_num_rows($result) > 0) {

            while($row = mysqli_fetch_assoc($result)){
                $data[] = $row;

            }
        }

        mysqli_free_result($result);
    }

    return $data;
}

function get_drink_table($link){

    $sql = 'SELECT drink_info_table.drink_id,drink_name,price,status,stock_number
            FROM drink_info_table 
            JOIN drink_stock_table
            ON drink_info_table.drink_id = drink_stock_table.drink_id';

    return get_as_array($link,$sql);        

}



function entity_str($str) {
    return htmlspecialchars($str, ENT_QUOTES, HTML_CHARACTER_SET);
}

function entity_as_array($drink_info_list){

    foreach($drink_info_list as $key => $value){

        foreach($value as $keys => $values){
            $drink_info_list[$key][$keys] = entity_str($values);
        }
    }

    return $drink_info_list;

}


以下はview.phpとなります。
イメージ説明
イメージ説明
イメージ説明

在庫数を入力し、変更ボタンを押すと以下のように、「Array」と表示され在庫数が変更できません。。。
イメージ説明
どなたか教えて下さる方いましたら、ご教授下さい...

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

view.phpファイルを下記のようにしてみてはいかがでしょうか。
現状のコードでは、echo $success_msgとなっています。

<?php foreach ($success_msg as $value) { ?>
    <p><?php echo $value; ?></p>
<?php } ?>

他のコードは読んでないので他に不具合があるかもしれませんがArrayとは表示されなくなると思います。

投稿 2017/09/14 01:01

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/14 10:56

    ご回答いただきありがとうございました。
    Arrayの表示は無事消えて解決いたしました。

    キャンセル

+1

Arrayと表示されるのは配列変数をそのままechoしているからです。
該当部分の変数をvar_dump()した上で中身の取り出したい文字列が想定通り来ているか、どのように出力するかご検討ください。

投稿 2017/09/14 09:42

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/14 10:57

    ご回答いただきありがとうございます。
    そのまま配列を出力していたことに気づいていませんでした。。。
    無事に解決できてよかったです。。。

    キャンセル

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

ただいまの回答率

91.45%

関連した質問

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

  • PHP

    14842questions

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

  • phpMyAdmin

    470questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。