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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

解決済

PHP、laravelで画像投稿機能の実装をしたい

ishidakouiki
iiii

総合スコア23

Laravel

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

1回答

0評価

0クリップ

466閲覧

投稿2021/12/24 12:35

前提・実現したいこと

バイク販売の掲示板サイトを作成していて、複数枚(1枚以上5枚以下)の画像の投稿機能の実装をしたいです。

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

問題
①画像の投稿の実装をしているつもりなのですが、
ファイルを選択→投稿したら、文字が投稿されます。
(フォームリクエストを使用して実装)

質問
①投稿画面(create.blade.php)では、5つのファイル選択ボタンを設定しているのですが(最大5枚の画像を投稿したいため)、その際のマイグレーションの設定は、imageデーブルを5つ作る必要があるのでしょうか?

②また1枚は絶対投稿しないといけないが最大5枚までの投稿とバリデーションをかけたいのですが、その際もPostRequest.phpにimageを5つ記述してその都度バリデーションの指定をしないといけないのでしょうか?

③投稿画面index.blade.phpに1枚以上5枚以下の画像を投稿するには、
foreachで{{ $post->explanation }}←画像を呼び出してくる記述を回したら良いのでしょうか?

該当のソースコード

create.blade.php(投稿画面)

@extends('layouts.app') @section('content') <div class="panel-body"> <div class="d-flex flex-column align-items-center mt-5"> <div class="col-xl-7 col-lg-8 col-md-10 col-sm-11 post-card"> @include('commons.error_messages') <div class="card"> <div class="card-header"> 出品作成 </div> <div class="card-body"> <form class="upload" id="new_post" enctype="multipart/form-data" action="{{ route('post.store') }}" accept-charset="UTF-8" method="POST"> @method('POST') {{csrf_field()}} <div class="md-form"> <input class="form-control" placeholder="車両名" name="name" value=""/> </div> <div class="md-form"> <input class="form-control" placeholder="年式" name="year" value=""/> </div> <div class="md-form"> <input class="form-control" placeholder="価格" name="price" value=""/> </div> <div class="md-form"> <input class="form-control" type="file" placeholder="" name="image" accept="image/*" multiple value="" > <input type="file" multiple="multiple" class="form-control" placeholder="" name="attachment[]" multiple value="" > <input type="file" multiple="multiple" class="form-control" placeholder="" name="attachment[]" multiple value="" > <input type="file" multiple="multiple" class="form-control" placeholder="" name="attachment[]" multiple value="" > <input type="file" multiple="multiple" class="form-control" placeholder="" name="attachment[]" multiple value="" > </div> <div class="form-group"> <textarea name="explanation" class="form-control" rows="10" placeholder="説明"></textarea> </div> <div class="text-center"> <input type="submit" name="commit" value="出品する" class="btn btn-primary w-25" data-disable-with="投稿する"/> </div> </form> </div> </div> </div> </div> @endsection ``` index.blade.php(投稿した内容が表示される画面) ```ここに言語を入力 @extends('layouts.app') @section('content') <div class="col-md-8 col-md-2 mx-auto"> エラー表示 </div> @foreach ($posts as $post) <div class="col-md-8 col-md-2 mx-auto"> <div class="card-wrap"> <div class="card mt-3"> <div class="card-header align-items-center d-flex"> <a class="no-text-decoration" href=""> <i class="fas fa-user-circle fa-2x mr-1"></i> </a> <a class="black-color" title="" href=""> <strong> 出品者 </strong> </a> </div> <div class="card-body"> <div class="post_edit text-right"> <a class="btn btn-primary btn-sm" href=""><i class="far fa-edit"></i>編集 </a> <a class="btn btn-danger btn-sm" rel="nofollow" href=""><i class="far fa-trash-alt"></i>削除 </a> </div> <h3 class="h5 title"> {{ $post->name }} </h3> <div class="mb-5"> {{ $post->year }} </div> <div class="mb-5"> {{ $post->price }} </div> <div class="mb-5"> {{ $post->image }} </div> <div class="mb-5"> {{ $post->explanation }} </div> <section> @endforeach @endsection ``` web.php ```ここに言語を入力 Route::get('/', 'PostsController@index')->middleware('auth')->name('index'); Route::get('bike/new','PostsController@index')->name('post.index');//バイク販売ページ表示// Route::get('post/new','PostsController@create')->name('post.create');//バイク投稿ページ表示// Route::post('/','PostsController@store')->name('post.store');//バイク投稿機能// ``` PostsController.php ```ここに言語を入力 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\PostRequest; use App\Post; class PostsController extends Controller { public function index() { $posts = Post::orderBy('created_at', 'desc')->get(); return view('posts.index', ['posts' => $posts]); } public function create() { return view('posts.create'); } public function store(PostRequest $request) { $post = new Post; $post->name = $request->name; $post->year = $request->year; $post->price = $request->price; $post->image = $request->image; $post->explanation = $request->explanation; $post->user_id = \Auth::id(); $post->save(); return redirect()->route('index'); } } ``` PostRequest.php ```ここに言語を入力 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class PostRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' =>'string|required|max:30', 'year' =>'string|required|max:30', 'price' =>'string|required|max:10', 'image' =>'required|image|mimes:jpeg,png,jpg,gif|file', 'explanation' => 'string|required|max:500', ]; } } ``` create_posts_table.php ```ここに言語を入力 <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('user_id'); $table->string('name', 30); $table->string('year', 30); $table->string('price',10); $table->string('image',5)->nullable()->change(); $table->string('explanation',500); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } } ``` ### 補足情報(FW/ツールのバージョンなど) php=7.3 laravel=5.8 MAMP

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト