前提・実現したいこと
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環境