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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

Q&A

1回答

906閲覧

phpでjsonファイルがあるときのエラーを回避したい

otyatya_no_tya

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

0グッド

0クリップ

投稿2020/10/14 01:23

編集2020/10/14 03:15

前提・実現したいこと

jsonファイルがあるときには値を表示したい。ないときにはエラーメッセージを表示したい。
ファイルがないときedit.phpからsample.jsonへ値の受け渡しはできてedit.phpでdata is nothigがちゃんと表示されます。
しかしjsonファイルがあるときに下記エラーが出力されます。
どのような制御構文を追加すれば解消できるでしょうか。。。

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

edit.phpでのエラー↓ Notice: Trying to get property 'profile' of non-object in C:\xampp\htdocs\edit.php on line 21 Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\edit.php on line 21

該当のソースコード

php

1 2// edit.php 3 4<?php 5 $url = "sample.json"; 6 if(file_exists($url)) { 7 $json = file_get_contents($url); 8 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 9 $arr = json_decode($json); 10 ?> 11 12 13 <?php 14 foreach($arr->profile as $profile) { 15 echo '<form action="result.php" method="post">'; 16 echo '<textarea name="name1" rows="5" cols="60">' . $profile->name1 . '</textarea>'; 17 echo '<br><textarea name="name2" rows="5" cols="60">' . $profile->name2 . '</textarea>'; 18 echo '<br><input type="submit" value="送信する">'; 19 echo '</form>'; 20 } 21 } else { 22 echo "data is nothig..."; 23 echo '<form action="result.php" method="post">'; 24 echo '<textarea name="name1" rows="5" cols="60"></textarea>'; 25 echo '<br><textarea name="name2" rows="5" cols="60"></textarea>'; 26 echo '<br><input type="submit" value="送信する">'; 27 echo '</form>'; 28 } 29 ?> 30 31</body>

php

1// result.php 2 3<?php 4 $arr = array( 5 "data" => array([ 6 "profile" => array([ 7 "name1" => $_POST['name1'], 8 "name2" => $_POST['name2'] 9 ]) 10 ]) 11 12 ); 13 $arr = json_encode($arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); 14 $json = fopen('sample.json', 'w+b'); 15 fwrite($json, $arr); 16 fclose($json); 17 18 header('Location: show.php'); 19?> 20

json

1 2<!-- sample.json --> 3{ 4 "data": [{ 5 "profile": [{ 6 "name1": "aaaa", 7 "name2": "aaaa" 8 }] 9 }] 10}

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

php 7.4.5
xampp環境

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

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

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

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

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

Takumiboo

2020/10/14 02:30

タイトル「phpでjsonファイルがないときのエラーを回避したい」 本文「jsonファイルがあるときに下記エラーが出力されます」 どちらですか?
otyatya_no_tya

2020/10/14 03:14

m.ts10806様 確認してますが対処がわからないので質問させていただいてます Takumiboo様 jsonファイルがあるときにエラーが出力されるので1文目はまちがっているため修正します
thyda.eiqau

2020/10/14 05:20

mm.ts10806さんが提示しているリンク先には対処方法も例示されていますが、対処がわからないというのはリンク先は読んでいない(自分で理解しようというつもりはない)という意味でしょうか? エラーメッセージの1つ目には Trying to get property 'profile' ... とありますが、'profile' というプロパティを取得しようとしている箇所は foreach($arr->profile as $profile) { の行しか(ご提示の範囲では)ありません。「エラーの原因となっていそうな変数」がありますが、次に何をすべきなのか、本当に「確認してますが対処がわからない」のでしょうか?
m.ts10806

2020/10/14 05:20

>確認してますが対処がわからないので 質問本文からエラーを確認したことがどこにも書いてなかったので問うています。 赤の他人には書いてないことを汲み取るのは無理ですよ。本当になにも試さず調べず丸投げする人との区別は困難です。
guest

回答1

0

JSONファイルが存在するときのエラーを回避する方法

  1. JSONファイルにアクセスせずそのまま放っておく→触れなければエラーは起きない
  2. JSONファイルに適切にアクセスする→取り扱い方、もしくはファイルの構造が想定と違う?

1番はおそらく求めている答えと違うでしょうから、2番の解決を目指すべきだと思いますが、
では何が問題か、というのはエラーメッセージに書かれています。

JSONファイルの中身と、プログラムを見比べてみてください。
(というかJSONファイルの中身を提示してもらえないと的確な回答はできません。)

投稿2020/10/14 03:28

Takumiboo

総合スコア2534

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

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

otyatya_no_tya

2020/10/14 05:05

jsonファイルは3つめのソースコードに載せてあります。これがファイルだけです。
Takumiboo

2020/10/14 05:08

「これがファイルだけです。」とはどういう意味ですか?(誤字?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問