teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

説明に追記を入れました。

2021/10/18 00:14

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  PHP Laravel 6.20.35にてマッチングサイトを制作しています。
2
2
 
3
- 新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいです。
3
+ 新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいですが、画像登録無しで新規登録を行うと「Undefined index: img_name」となります
4
4
 
5
5
  現状は以下のようになっています。
6
6
 
@@ -105,9 +105,9 @@
105
105
  としている箇所を
106
106
 
107
107
  ```PHP
108
- $table->string('img_name')->default('画像パス');
108
+ $table->string('img_name')->default('/storage/images/no_img.png');
109
109
  ```
110
- とすれば、画像登録なしで新規登録した場合でも 「default('画像パス');」 が登録できると思い
110
+ とすれば、画像登録なしで新規登録した場合でも 「default('/storage/images/no_img.png');」 が登録できると思い
111
111
 
112
112
  新規マイグレーションファイルを作成
113
113
  ```PHP
@@ -120,7 +120,7 @@
120
120
  ```PHP
121
121
  <label for="file_photo" class="rounded-circle userProfileImg">
122
122
  <div class="userProfileImg_description">画像をアップロード</div>
123
- <img src="/storage/images/no_img.png"alt="サムネイル">
123
+ <img src="/storage/images/no_img.png"alt="デフォト画像">
124
124
  <input type="file" id="file_photo" name="img_name">
125
125
  </label>
126
126
  ```

5

説明を修正。編集。

2021/10/18 00:14

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -2,43 +2,18 @@
2
2
 
3
3
  新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいです。
4
4
 
5
- 元々は「2021_10_10_135024_add_column_to_users_table.php」に
6
- ```PHP
7
- public function up()
5
+ 現状は以下のようになっています。
8
- {
9
- Schema::table('users', function (Blueprint $table) {
10
- $table->string('self_introduction', 500)->nullable(); //詳細情報
11
- $table->tinyInteger('sex')->default(0); //性別
12
- $table->string('img_name')->default(''); //画像ファイル
13
- });
14
- }
15
- ```
16
6
 
17
- としていた為に、画像を登録せずにアカウントを作成すると、
18
- RegisterController.phpで「Undefined index: img_name」というエラーが出る状況でした。
19
7
 
20
- そこで、新たにデフォルト画像を設定するためのカラムを追加する為に「2021_10_17_175707_change_img_name_default_to_set_default_img_on_users_table.php」というマイグレーションファイルを作成し、
8
+ RegisterController.php
21
-
22
9
  ```PHP
23
- public function up()
24
- {
25
- Schema::table('users', function (Blueprint $table) {
26
- //
27
- $table->string('img_names')->default('/storage/images/no_img.png'); //デフォルト画像セット
28
- });
29
- }
30
- ```
31
- としました。
32
- ここで、「php artisan migrate」を行いました。
33
-
34
- RegisterController.phpを下記にしています。
35
- ```PHP
36
10
  protected function create(array $data)
37
11
  {
12
+
13
+ // ---ここから追加---
14
+ //引数 $data から name='img_name'を取得(アップロードするファイル情報)
15
+ $imageFile = $data['img_name'];
38
16
 
39
- //引数 $data から name='img_names'を取得(アップロードするファイル情報)
40
- $imageFile = $data['img_names'];
41
-
42
17
  //$imageFileからファイル名を取得(拡張子あり)
43
18
  $filenameWithExt = $imageFile->getClientOriginalName();
44
19
 
@@ -84,36 +59,84 @@
84
59
  'password' => Hash::make($data['password']),
85
60
  'self_introduction' => $data['self_introduction'],
86
61
  'sex' => $data['sex'],
87
- 'img_names' => $fileNameToStore,
62
+ 'img_name' => $fileNameToStore,
88
63
  ]);
89
64
  }
90
65
  ```
91
66
 
92
- User.php、$fillableに'img_names'追加しました。
67
+ add_column_to_users_table.phpを
93
68
  ```PHP
94
- protected $fillable = [
69
+ public function up()
70
+ {
71
+ Schema::table('users', function (Blueprint $table) {
72
+ $table->string('self_introduction', 500)->nullable(); //詳細情報
73
+ $table->tinyInteger('sex')->default(0); //性別
95
- 'name', 'email', 'password', 'self_introduction', 'sex', 'img_names',
74
+ $table->string('img_name')->default(''); //画像ファイル
96
- ];
75
+ });
76
+ }
97
77
  ```
98
78
 
99
- register.blade.phpを下記のようにしています。
79
+ viewファイルregister.blade.phpを
100
80
  ```PHP
101
81
  <label for="file_photo" class="rounded-circle userProfileImg">
102
- <div class="userProfileImg_description userImgPreview_text xxx">画像をアップロード</div>
82
+ <div class="userProfileImg_description">画像をアップロード</div>
103
- <i class="fas fa-camera fa-3x xxx"></i>
83
+ <i class="fas fa-camera fa-3x"></i>
104
- <input type="file" id="file_photo" name="img_names" class="input-image js-droparea">
84
+ <input type="file" id="file_photo" name="img_name">
105
- <img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-image">
106
85
  </label>
107
86
  ```
108
87
 
88
+ User.php
89
+ ```PHP
90
+ protected $fillable = [
91
+ 'name', 'email', 'password', 'self_introduction', 'sex', 'img_name',
92
+ ];
93
+ ```
109
94
 
110
- 新規登録時に画像の登録がなければ
95
+ としていました。
111
- <img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-image">
112
96
 
113
- をユーザー画像として登録したいのですが、れでも画像登録しでユーザー登録を行うと、RegisterController.phpで「Undefined index: img_names というエラーになります。
97
+ の状況だと画像登録しで新規登録すると、「Undefined index: img_name というエラーになります。
114
98
 
115
99
 
100
+
101
+ マイグレーションファイルadd_column_to_users_table.php で
102
+ ```PHP
103
+ 'img_name' => $fileNameToStore,
104
+ ```
105
+ としている箇所を
106
+
107
+ ```PHP
108
+ $table->string('img_name')->default('画像パス');
109
+ ```
110
+ とすれば、画像登録なしで新規登録した場合でも 「default('画像パス');」 が登録できると思い
111
+
116
- どうすれば、新規登録時に画像の登録がなければ
112
+ 新規マイグレーションファイルを作成
113
+ ```PHP
114
+ $table->string('default_img')->default('/storage/images/no_img.png');
115
+ ```
116
+ と設定
117
+
118
+ viewファイルregister.blade.php
119
+
120
+ ```PHP
121
+ <label for="file_photo" class="rounded-circle userProfileImg">
122
+ <div class="userProfileImg_description">画像をアップロード</div>
117
- <img src="/storage/images/no_img.png" alt="プロフィー画像" class="show-db-imag
123
+ <img src="/storage/images/no_img.png"alt="サムネイル">
124
+ <input type="file" id="file_photo" name="img_name">
118
- e">
125
+ </label>
126
+ ```
127
+ RegisterController.phpを以下のように修正しました。
128
+ ```PHP
129
+ //createメソッドでユーザー情報を作成
130
+ return User::create([
131
+ 'name' => $data['name'],
132
+ 'email' => $data['email'],
133
+ 'password' => Hash::make($data['password']),
134
+ 'self_introduction' => $data['self_introduction'],
135
+ 'sex' => $data['sex'],
136
+ 'img_name' => $fileNameToStore,
137
+ 'default' => $data['/storage/images/no_img.png'],
138
+ ```
139
+
140
+ しかし、これでも画像登録なしで新規登録した場合「Undefined index: img_name」 というエラーが表示されます。
141
+
119
- をプロフィール画像として登録できるでしょうか?
142
+ どうすれば、新規登録時に画像登録がなければデフォルトの画像を設定できるようにきるでしょうか?

4

誤字修正

2021/10/18 00:11

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -36,8 +36,8 @@
36
36
  protected function create(array $data)
37
37
  {
38
38
 
39
- //引数 $data から name='img_name'を取得(アップロードするファイル情報)
39
+ //引数 $data から name='img_names'を取得(アップロードするファイル情報)
40
- $imageFile = $data['img_name'];
40
+ $imageFile = $data['img_names'];
41
41
 
42
42
  //$imageFileからファイル名を取得(拡張子あり)
43
43
  $filenameWithExt = $imageFile->getClientOriginalName();
@@ -84,7 +84,7 @@
84
84
  'password' => Hash::make($data['password']),
85
85
  'self_introduction' => $data['self_introduction'],
86
86
  'sex' => $data['sex'],
87
- 'img_name' => $fileNameToStore,
87
+ 'img_names' => $fileNameToStore,
88
88
  ]);
89
89
  }
90
90
  ```

3

テキスト修正

2021/10/17 14:07

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -35,28 +35,57 @@
35
35
  ```PHP
36
36
  protected function create(array $data)
37
37
  {
38
- //Intervention Imageでプロフィール画像をリサイズ
39
- $imageFile = $data['img_names'];
40
38
 
39
+ //引数 $data から name='img_name'を取得(アップロードするファイル情報)
41
- $list = FileUploadServices::fileUpload($imageFile);
40
+ $imageFile = $data['img_name'];
42
41
 
42
+ //$imageFileからファイル名を取得(拡張子あり)
43
+ $filenameWithExt = $imageFile->getClientOriginalName();
44
+
45
+ //拡張子を除いたファイル名を取得
46
+ $fileName = pathinfo($filenameWithExt, PATHINFO_FILENAME);
47
+
48
+ //拡張子を取得
43
- list($extension, $fileNameToStore, $fileData) = $list;
49
+ $extension = $imageFile->getClientOriginalExtension();
50
+
44
-
51
+ // ファイル名_時間_拡張子 として設定
52
+ $fileNameToStore = $fileName.'_'.time().'.'.$extension;
53
+
54
+ //画像ファイル取得
55
+ $fileData = file_get_contents($imageFile->getRealPath());
56
+
57
+ //拡張子ごとに base64エンコード実施
58
+ if ($extension = 'jpg'){
45
- $data_url = CheckExtensionServices::checkExtension($fileData, $extension);
59
+ $data_url = 'data:image/jpg;base64,'. base64_encode($fileData);
46
-
60
+ }
61
+
62
+ if ($extension = 'jpeg'){
63
+ $data_url = 'data:image/jpg;base64,'. base64_encode($fileData);
64
+ }
65
+
66
+ if ($extension = 'png'){
67
+ $data_url = 'data:image/png;base64,'. base64_encode($fileData);
68
+ }
69
+
70
+ if ($extension = 'gif'){
71
+ $data_url = 'data:image/gif;base64,'. base64_encode($fileData);
72
+ }
73
+
74
+ //画像アップロード(Imageクラス makeメソッドを使用)
47
75
  $image = Image::make($data_url);
76
+
48
-
77
+ //画像を横400px, 縦400pxにリサイズし保存
49
78
  $image->resize(400,400)->save(storage_path() . '/app/public/images/' . $fileNameToStore );
79
+
50
-
80
+ //createメソッドでユーザー情報を作成
51
81
  return User::create([
52
82
  'name' => $data['name'],
53
83
  'email' => $data['email'],
54
84
  'password' => Hash::make($data['password']),
55
85
  'self_introduction' => $data['self_introduction'],
56
86
  'sex' => $data['sex'],
57
- 'img_names' => $data['img_names'],
87
+ 'img_name' => $fileNameToStore,
58
88
  ]);
59
-
60
89
  }
61
90
  ```
62
91
 

2

テキスト修正

2021/10/17 14:05

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -29,8 +29,9 @@
29
29
  }
30
30
  ```
31
31
  としました。
32
+ ここで、「php artisan migrate」を行いました。
32
33
 
33
- RegisterController.php下記にしています。
34
+ RegisterController.php下記にしています。
34
35
  ```PHP
35
36
  protected function create(array $data)
36
37
  {
@@ -59,7 +60,7 @@
59
60
  }
60
61
  ```
61
62
 
62
- User.phpに'img_names'を追加しました。
63
+ User.php、$fillableに'img_names'を追加しました。
63
64
  ```PHP
64
65
  protected $fillable = [
65
66
  'name', 'email', 'password', 'self_introduction', 'sex', 'img_names',

1

テキスト修正

2021/10/17 10:21

投稿

Fukusuke0604
Fukusuke0604

スコア555

title CHANGED
File without changes
body CHANGED
@@ -84,5 +84,6 @@
84
84
 
85
85
 
86
86
  どうすれば、新規登録時に画像の登録がなければ
87
- <img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-image">
87
+ <img src="/storage/images/no_img.png" alt="プロフィール画像" class="show-db-imag
88
+ e">
88
89
  をプロフィール画像として登録できるでしょうか?