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

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

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

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

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

解決済

1回答

1616閲覧

PHP:画像アップロード

hanitan17

総合スコア5

Laravel

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

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

0クリップ

投稿2019/11/26 08:26

前提・実現したいこと

PHPを利用して画像のアップロード→DBへ保存をしたい。
PHP(Laravel)でプロフィール機能を作っています。
名前等のテキストの保存と表示はできましたが、画像を選択し、アップロードすると下記のエラーが発生します。

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

Method Illuminate\Validation\Validator::validateText does not exist

該当のソースコード

php

1<div class = "create_baby under_box"> 2 <form action="/baby" method="post"> 3 <div class="form-group"> 4 <label for="name">おなまえ</label> 5 <input type="text" class="form-control" name="name"> 6 </div> 7 <div class="form-group"> 8 <label for="price">お誕生日</label> 9 <input type="text" class="form-control" name="birthday"> 10 </div> 11 <div class="form-group"> 12 <label for="price">写真</label> 13 <form method="post" action="{{ action('BabiesController@store') }}" enctype="multipart/form-data"> 14 {{ csrf_field() }} 15 <fieldset> 16 <div> 17 <input id="file" type="file" name="image"> 18 @if ($errors->has('image')) 19 {{ $errors->first('image') }} 20 @endif 21 </div> 22 </fieldset> 23 </div> 24 <button type="submit" class="btn btn-default">登録</button> 25 <a href="/baby">戻る</a> 26 </form> 27</div> 28

試したこと

画像アップロードに関する記事を複数読んだところ、事前に準備することは全く記述がありませんでした。
代わりに共通して下記のような記述がありました。

<?php if (is_uploaded_file($_FILES['file']['tmp_name'])) { if (!file_exists('upload')) { <省略> 真似して記述をしてみると、 Undefined index: image 対象箇所 if (is_uploaded_file($_FILES['image']['tmp_name'])) { そもそもview表示段階で新たなエラー出てしまい、先に進めません。 また、上記$_FILES['image']はDB上カラム名を'image'としていますが、弾かれます。 ### 補足情報 ```PHP 2019_11_20_084204_create_babies_table.php <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBabiesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('babies', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name', 50); $table->integer('birthday'); $table->string('image')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('babies', function (Blueprint $table) { $table->dropColumn('image'); }); } } ``` ```PHP BabiesController.php <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Http\Requests\BabyRequest; use App\Baby; class BabiesController extends Controller { public function index() { $babies = Baby::all(); return view('baby/index', compact('babies')); } public function store(BabyRequest $request) { $baby = new Baby(); $baby->name = $request->name; $baby->birthday = $request->birthday; $baby->image = $request->image; $baby->save(); return redirect("/baby"); } public function create() { $baby = new Baby(); return view('baby/create', compact('baby')); } public function edit($id) { $baby = Baby::findOrFail($id); return view('baby/edit', compact('baby')); } public function update(BabyRequest $request, $id) { $baby = Baby::findOrFail($id); $baby->name = $request->name; $baby->birthday = $request->birthday; $baby->save(); return redirect("/baby"); } public function destroy($id) { $baby = Baby::findOrFail($id); $baby->delete(); return redirect("/baby"); } } ``` よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

form が 入れ子になってしまってますね。(しかも不完全に)

<div class = "create_baby under_box"> <form action="/baby" method="post"> <div class="form-group"> <label for="name">おなまえ</label> <input type="text" class="form-control" name="name"> </div> <div class="form-group"> <label for="price">お誕生日</label> <input type="text" class="form-control" name="birthday"> </div> <div class="form-group"> <label for="price">写真</label> <form method="post" action="{{ action('BabiesController@store') }}" enctype="multipart/form-data"> {{ csrf_field() }} <fieldset> <div> <input id="file" type="file" name="image"> @if ($errors->has('image')) {{ $errors->first('image') }} @endif </div> </fieldset> </div> <button type="submit" class="btn btn-default">登録</button> <a href="/baby">戻る</a> </form> </div>

<div class = "create_baby under_box"> <form method="post" action="{{ action('BabiesController@store') }}" enctype="multipart/form-data"> <div class="form-group"> <label for="name">おなまえ</label> <input type="text" class="form-control" name="name"> </div> <div class="form-group"> <label for="price">お誕生日</label> <input type="text" class="form-control" name="birthday"> </div> <div class="form-group"> <label for="price">写真</label> {{ csrf_field() }} <fieldset> <div> <input id="file" type="file" name="image"> @if ($errors->has('image')) {{ $errors->first('image') }} @endif </div> </fieldset> </div> <button type="submit" class="btn btn-default">登録</button> <a href="/baby">戻る</a> </form> </div>

投稿2019/11/26 08:29

編集2019/11/26 08:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hanitan17

2019/11/26 09:23

ありがとうございます。 修正しました。 しかし、エラー内容は変わらずの状態です…
退会済みユーザー

退会済みユーザー

2019/11/26 09:43

エラーは1箇所とは限りませんからね。 さらっと見て気付いたのはそこ、ってだけのことですから。 他にもまずいところがあるのでしょう。
退会済みユーザー

退会済みユーザー

2019/11/26 09:45 編集

Method Illuminate\Validation\Validator::validateText does not exist とでているんですから、バリデーションを記述しているところを提示して欲しいですね。 提示されたコードにはバリデーション部分が存在していません。
hanitan17

2019/11/26 10:13

バリデーションは組んでいません 何件か参考にした記事ではバリデーションの話はなかったため、記述はしていません もしかしてそれが原因とか…?
退会済みユーザー

退会済みユーザー

2019/11/26 10:16

public function store(BabyRequest $request) { $baby = new Baby(); $baby->name = $request->name; $baby->birthday = $request->birthday; $baby->image = $request->image; $baby->save(); return redirect("/baby"); } この記述があるので、普通なら、App\Http\Requests\BabyRequest; にバリデーションに記述があるはずです。
hanitan17

2019/11/26 10:38

public function rules() { return [ 'name' => 'required|string|max:50', 'birthday' => 'required|integer', 'image' => 'nullable|text', ]; } ありがとうございます、見つけました。 ここのtextが悪さしているということですね。
hanitan17

2019/11/26 10:56

ご丁寧にありがとうございました。 助かりました。 上記リンク先も確認させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問