[PHP] 画面にArrayと表示され目的の処理が行われません。。。
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 6,088
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;
}
在庫数を入力し、変更ボタンを押すと以下のように、「Array」と表示され在庫数が変更できません。。。
どなたか教えて下さる方いましたら、ご教授下さい...
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
view.php
ファイルを下記のようにしてみてはいかがでしょうか。
現状のコードでは、echo $success_msg
となっています。
<?php foreach ($success_msg as $value) { ?>
<p><?php echo $value; ?></p>
<?php } ?>
他のコードは読んでないので他に不具合があるかもしれませんがArray
とは表示されなくなると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
Arrayと表示されるのは配列変数をそのままechoしているからです。
該当部分の変数をvar_dump()した上で中身の取り出したい文字列が想定通り来ているか、どのように出力するかご検討ください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/09/14 10:56
Arrayの表示は無事消えて解決いたしました。