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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

548閲覧

Laravel 画像の値について

kuro2019

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/12/05 08:51

編集2019/12/05 09:25

前提・実現したいこと

編集フォームから更新をする際に、画像データを入力せずにpost出来るようにしたいです。
条件
※入力を必須にはしない。  'image' => 'required',は使用しない
※データベースの設定を替えたくない。 画像の設定は、NULL:いいえ、デフォルト値:なしになっています。

環境

PHP7.2.3
Laravel 5.4

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

エラー文:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'image' cannot be null (SQL: update articles set area = west, image = ,updated_at = 2019-12-05 17:22:44 where id = 17)

該当のソースコード

入力フォーム edit.blade.php

<div class="image @if(!empty($errors->first('image'))) has->error @endif">
<input type="file" name="image" enctype="multipart/form-data" value="{{$info['image']}}"> <span class="help-block">{{$errors->first('image')}}</span> </div>

確認画面(一覧になる仕様です。) edit_confirm.blade.php

<td>画像</td>
<td>{{$info['image']}}</td>

                中略

<input type="hidden" name="image" enctype="multipart/form-data" value="{{ $info['image'] }}">

試したこと

検索をしてinputタグに、
enctype="multipart/form-data"
を入力しましたがエラーが消えなかったです。
エラー回避できる方法あれば教えていただきたいです。

よろしくお願いいたします。

追記

laravel

1コントローラー 2 // 編集画面 遷移 3 public function sendData($id){ 4 $info = Article::find($id); 5 return view('article/edit',['info'=>$info]); 6 } 7 8 // 編集 確認画面 9 public function confirmEdit(ArticleRequest $request) 10 { 11 $info = $request->all(); 12 return view('article/edit_confirm',compact('info')); 13 } 14 15 // 更新画面 16 17 public function edit(ArticleRequest $request) 18 { 19 $id =$request->id; 20 $data = Article::find($id); 21 // 取得したデータに上書きする 22 $data->name = $request->name; 23 $data->email = $request->email; 24 $data->age = $request->age; 25 $data->area = $request->area; 26 $data->gender = $request->gender; 27 $data->media1 = $request->media1; 28 $data->media2 = $request->media2; 29 $data->note = $request->note; 30 $data->image = $request->image; 31 $data->save(); 32 33 return view('/article/edit_complete',compact('data')); 34 }

laravel

1view 入力フォーム  2@extends('layout/layout') 3 4@section('content') 5 6@if($errors->any()) 7 <div class="errors"> 8 <ul> 9 @foreach($errors->all() as $error) 10 <li>{{ $error }}</li> 11 @endforeach 12 </ul> 13 </div> 14@endif 15 16 17<div class="row"> 18 <form method="post" action="{{ url('/article/insert_confirm')}}"> 19 {{ csrf_field() }} 20 <br> 21 <br> 22 <h1>新規登録</h1> 23 <br> 24 <div class="form-group @if(!empty($errors->first('name'))) has-error @endif"> 25 <label>名前</label> 26 <input type="text" name="name" class="form-control"> 27 <span class="help-block">{{$errors->first('name')}}</span> 28 </div> 29 30 <div class="form-group @if(!empty($errors->first('email'))) has-error @endif"> 31 <label>E-Mail</label> 32 <input type="mail" name="email" class="form-control"> 33 <span class="help-block">{{$errors->first('email')}}</span> 34 </div> 35 36 <div class="form-group @if(!empty($errors->first('age'))) has-error @endif"> 37 <label>年齢</label> 38 <input type="number" name="age" class="form-control"> 39 <span class="help-block">{{$errors->first('age')}}</span> 40 </div> 41 42 <div class="form-group @if(!empty($errors->first('area'))) has-error @endif"> 43 <label>エリア</label> 44 <select name="area" class="form-control"> 45 <option value="east" selected>東日本</option> 46 <option value="west">西日本</option> 47 </select> 48 <span class="help-block">{{$errors->first('area')}}</span> 49 </div> 50 51 <p><b>性別</b></p> 52 <div class="radio-inline @if(!empty($errors->first('gender'))) has-error @endif"> 53 <label> 54 <input type="radio" name="gender" value="1" checked>男性 55 </label> 56 <span class="help-block">{{$errors->first('gender')}}</span> 57 </div> 58 59 <div class="radio-inline"> 60 <label> 61 <input type="radio" name="gender" value="2" @if(Request::old('gender')=="2") ckecked @endif>女性 62 </label> 63 <span class="help-block">{{$errors->first('gender')}}</span> 64 </div> 65 66 <p><b>告知メディア</b></p> 67 <div class="form-check @if(!empty($errors->first('media1'))) has->error @endif"> 68 <label> 69 <input type="hidden" name="media1" value=""> 70 <input type="checkbox" name="media1" value="web" @if(Request::old('media1')=="web") checked @endif>web 71 </label> 72 <span class="help-block">{{$errors->first('media1')}}</span> 73 </div> 74 <div class="form-check @if(!empty($errors->first('media2'))) has->error @endif"> 75 <label> 76 <input type="hidden" name="media2" value=""> 77 <input type="checkbox" name="media2" value="tv" @if(Request::old('media2')=="tv") checked @endif>tv 78 </label> 79 <span class="help-block">{{$errors->first('media2')}}</span> 80 </div> 81 82 <div class="textarea @if(!empty($errors->first('note'))) has->error @endif"> 83 <!-- <label for="textarea1">ご意見</label> --> 84 <textarea id="textarea1" class="form-control" name="note" placeholder="ご自由に入力ください。">{{Request::old('note')}}</textarea> 85 <span class="help-block">{{$errors->first('note')}}</span> 86 </div> 87 88 <div class="image @if(!empty($errors->first('image'))) has->error @endif"> 89 <input type="file" name="image"> 90 <span class="help-block">{{$errors->first('image')}}</span> 91 </div> 92 93 <br><br> 94 <input type="submit" value="確認画面へ" class="btn btn-success"> 95 </form> 96 97 <br> 98 <form method="post" action="{{ url('/article/list')}}"> 99 {{ csrf_field() }} 100 <input type="submit" value="リスト一覧に戻る" class="btn btn-primary"> 101 </form> 102@stop

laravel

1 2@extends('layout/layout') 3 4@section('content') 5 6@if (session('media')) 7 <div class="row"> 8 <div class="col-md-8 col-md-offset-2"> 9 <div class="alert alert-warning"> 10 {{ session('media') }} 11 </div> 12 </div> 13 </div> 14 @endif 15@yield('content') 16 17<h1>編集内容確認</h1> 18 19 <table class="table table-striped"> 20 <tr> 21 <td>名前</td> 22 <td>{{$info['name']}}</td> 23 </tr> 24 <tr> 25 <td>E-Mail</td> 26 <td>{{$info['email']}}</td> 27 </tr> 28 <tr> 29 <td>年齢</td> 30 <td>{{$info['age']}}</td> 31 </tr> 32 <tr> 33 <td>エリア</td> 34 <td>{{$info['area']}}</td> 35 </tr> 36 <tr> 37 <td>性別</td> 38 <td>{{$info['gender']}}</td> 39 </tr> 40 <tr> 41 <td>メディア1</td> 42 <td>{{$info['media1']}}</td> 43 </tr> 44 <tr> 45 <td>メディア2</td> 46 <td>{{$info['media2']}}</td> 47 </tr> 48 <tr> 49 <td>ご意見</td> 50 <td>{{$info['note']}}</td> 51 </tr> 52 <tr> 53 <td>画像</td> 54 <td>{{$info['image']}}</td> 55 </tr> 56 </td> 57 </tr> 58 </table> 59 60 <form action="/article/edit_complete" method="post"> 61 {{ csrf_field() }} 62 <!--hidden --> 63 <input type="hidden" name="id" value="{{ $info['id'] }}"> 64 <input type="hidden" name="name" value="{{ $info['name'] }}"> 65 <input type="hidden" name="email" value="{{ $info['email'] }}"> 66 <input type="hidden" name="age" value="{{ $info['age'] }}"> 67 <input type="hidden" name="area" value="{{ $info['area'] }}"> 68 <input type="hidden" name="gender" value="{{ $info['gender'] }}"> 69 <input type="hidden" name="media1" value="{{ $info['media1'] }}"> 70 <input type="hidden" name="media2" value="{{ $info['media2'] }}"> 71 <input type="hidden" name="note" value="{{ $info['note'] }}"> 72 <input type="hidden" name="image" enctype="multipart/form-data" value="{{ $info['image'] }}"> 73 74 <input type="submit" value="編集実行" class="btn btn-primary"> 75 <br><br> 76 <a href="/article/list" class="btn btn-success" style="maerin:20px">フォームに戻る</a> 77 </form> 78@stop

dd($data)の結果

よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/12/05 09:07

コントローラ側のコードとimageのPOST結果をdd()で出力してみて結果を追記してください
m.ts10806

2019/12/05 09:07

あとformタグ含めてビュー全体もですね
kuro2019

2019/12/05 09:28

追記しました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

enctype はformタグにつけるものです。
また、hiddenにもてるのは文字情報です。

つまり現状の実装では新規登録→内容確認 の時点で渡せていませんし、確認画面から完了画面へ画像は渡っていません。
確認画面をブラウザ「ソースを表示」で確認してみてください。

これを解消するには新規登録画面でformタグにenctypeを付帯するのが第一。
確認画面へPOSTした時点で一度仮でアップロード処理を行いセッションなどにパスを保持。
確認画面から完了画面にPOSTしたときに正規のフォルダに移動

のような作りにすると良いです。
確認画面にはenctypeは不要です。

投稿2019/12/05 12:58

m.ts10806

総合スコア80850

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

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

kuro2019

2019/12/05 14:13

ご回答ありがとうございました。 勉強不足でした。 また、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問