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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

1回答

630閲覧

PHPのif文を完成させたい。

tkm0604

総合スコア555

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

0クリップ

投稿2021/10/22 14:40

RegisterController.php内の以下のコードでUndefined index: img_name というエラーが出ます。(未定義の配列の要素を使用した時に出るエラー)

php

1 //$data['img_name']にデータが無い時 2 if($data['img_name'] == NULL){ 3 // no_img.pngを$imageFile代入 4 $imageFile = 'no_img.png'; 5 //$data['img_name']にデータがあれば$imageFileに代入 6 }else{ 7 $imageFile = $data['img_name']; 8 }

私の考えではimg_nameがNULL(空)の時は $data['img_name']に'no_img.png'を渡しているので未定義の配列の要素というエラーになってしまう事に理解ができません。。。。

上記if文で取得した$imageFileを最終的には以下のコードのように画像をリザイズして保存できるようにしたいです。

php

1 2 if($data['img_name'] == NULL){ 3 //$data['img_name']にデータが無い時 no_img.pngを$imageFile代入 4 $imageFile = 'no_img.png'; 5 //$data['img_name']にデータがあれば$imageFileに代入 6 }else{ 7 $imageFile = $data['img_name']; 8 } 9 10 //$imageFileからファイル名を取得(拡張子あり) 11 $filenameWithExt = $imageFile->getClientOriginalName(); 12 13 //拡張子を除いたファイル名を取得 14 $fileName = pathinfo($filenameWithExt, PATHINFO_FILENAME); 15 16 //拡張子を取得 17 $extension = $imageFile->getClientOriginalExtension(); 18 19 // ファイル名_時間_拡張子 として設定 20 $fileNameToStore = $fileName.'_'.time().'.'.$extension; 21 22 //画像ファイル取得 23 $fileData = file_get_contents($imageFile->getRealPath()); 24 25 //拡張子ごとに base64エンコード実施 26 if ($extension = 'jpg'){ 27 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 28 } 29 30 if ($extension = 'jpeg'){ 31 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 32 } 33 34 if ($extension = 'png'){ 35 $data_url = 'data:image/png;base64,'. base64_encode($fileData); 36 } 37 38 if ($extension = 'gif'){ 39 $data_url = 'data:image/gif;base64,'. base64_encode($fileData); 40 } 41 42 //画像アップロード(Imageクラス makeメソッドを使用) 43 $image = Image::make($data_url); 44 45 //画像を横400px, 縦400pxにリサイズし保存 46 $image->resize(400,400)->save(storage_path() . '/app/public/images/' . $fileNameToStore ); 47 48 //createメソッドでユーザー情報を作成 49 return User::create([ 50 'name' => $data['name'], 51 'email' => $data['email'], 52 'password' => Hash::make($data['password']), 53 'self_introduction' => $data['self_introduction'], 54 'sex' => $data['sex'], 55 'img_name' => $fileNameToStore, 56 ]);

どすればいいか、アドバイスお願いします。

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

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

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

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

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

kai0310

2021/10/23 15:39

Requestクラスを使いませんか?読みづらいです。
tkm0604

2021/10/25 00:21

コメントありがとうございます。 すみません。Requestクラスを使う方法が自分にはまだ分かりません。。。 コードが長くなったので、サービスファイルとして切り分けていたのですが、質問に際して処理の流れがわかりやすいように質問の際はそのままのコードを書いていました。
guest

回答1

0

私の考えではimg_nameがNULL(空)の時は $data['img_name']に'no_img.png'を渡しているので未定義の配列の要素というエラーになってしまう事に理解ができません。。。。

if($data['img_name'] == NULL){

のことを書かれていると思うのですが、プログラムはそうはなってないですね。[
$data['img_name']null(空)の時は」というプログラムになっていますよ。

エラーが出るのはif文の()の中を評価する前に$data['img_name']自体を評価して、$dataという連想配列にある要素の中でキーが'img_name'のものが存在していないのでUndefined index: img_nameが出ています。

対応の仕方は色々ありますが、一番オーソドックスなのはarray_key_exists()を使う方法です。

参考)
https://www.php.net/manual/ja/function.array-key-exists.php
https://blog.code4u.org/archives/428

if(array_key_exists('img_name', $data) && $data['img_name'] == NULL){ //$data['img_name']にデータが無い時 no_img.pngを$imageFile代入 $imageFile = 'no_img.png'; //$data['img_name']にデータがあれば$imageFileに代入 }else{ $imageFile = $data['img_name']; }

他にも色々な書き方や、array_key_exists()以外を使う方法もありますが、それは自身で探してみてください。場合によってはisset()を使うべき場合もあります。今回の場合はarray_key_exists()じゃないとだめですが(どうしてかは自身で考えてみてください)。

参考)
https://hacknote.jp/archives/47307/

投稿2021/10/22 16:03

編集2021/10/22 16:09
AbeTakashi

総合スコア4853

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

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

tkm0604

2021/10/23 10:32

分かりやすい説明ありがとうございます。 なぜ if($data['img_name'] == NULL)がUndefined index: img_name となっていたのか理解できました。 教えていただいたように下記コードに書き換えると、 if(array_key_exists('img_name', $data) && $data['img_name'] == NULL){ //$data['img_name']にデータが無い時 no_img.pngを$imageFile代入 $imageFile = 'no_img.png'; //$data['img_name']にデータがあれば$imageFileに代入 }else{ $imageFile = $data['img_name']; } 今度は else{ $imageFile = $data['img_name']; } でUndefined index: img_name エラーが出ます。。。。 elseの前に$imageFileがNULLであればno_img.pngを$imageFileにセットしているのでelse以降の処理は行われないと思っているのですがそうはなっていないようです。。。。 アドバイスお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問