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

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

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

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Q&A

解決済

2回答

961閲覧

Laravel フォーム内のテキストボックスがdisabledか空か区別したい

iinuma-y

総合スコア2

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

0グッド

0クリップ

投稿2023/05/01 11:01

編集2023/05/01 11:07

実現したいこと

POSTされたinput[type="text"]がdisabled状態であるか、空であるかを区別し、処理を分岐したいと思っています。

editアクションで使用をしたく、以下の仕様を考えています。

  • DBに値がセットされていればtextをdisabled属性にする
  • ユーザーは値を上書きする時はdisabledを解除し、別の値の入力または入力値を空にする操作ができる
  • submitされupdateアクションが実行されたとき、disabledなら更新しない、空文字なら値をNULLに上書きする

環境

Laravel:6.x
PHP:7.x
サーバー:Apache 2.4.x / Amazon Linux 2

発生している問題

試したところ生PHPではdisabledの場合null、空の場合は空文字('')となり区別が可能でしたが、Laravelでは全てnullになってしまうようです。調べましたらConvertEmptyStringsToNullが働いているためらしいとわかり、Kernel.phpでコメントアウトしました。ところが今度は全て空文字になってしまい、やはり区別ができません。
生PHPではできるけれど、Laravelでは不可能なのでしょうか?それとも設定変更などで可能でしょうか?

該当のソースコード

edit.blade.php

PHP

1<form method="post"> 2 @foreach ( $user as $key => $column ) 3 {{ Form::text($key, $column, isset($column) ? ['disabled' => null] : null }} 4 @endforeach 5 <button type="submit">送信</button> 6</form>

UserController.php

PHP

1public function edit($id) 2{ 3 return view('edit', [$user => User::find($id)->toArray()]); 4 //以下の値が入っていると仮定します。 5 // $user['column1'] = '1234'; 6 // $user['column2'] = null; 7} 8public function update(Request $request, $id) 9{ 10 dump($request->all()); 11 // array:2 [ 12 // "column1" => "" 13 // "column2" => "" 14 // ] 15}

生PHPの場合

PHP

1<?php 2echo 'EMPTY:<br>'; 3var_dump($_POST['empty']); 4echo '<br>'; 5echo 'DISABLED:<br>'; 6var_dump($_POST['disabled']); 7echo '<br>'; 8// EMPTY: 9// string(0) "" 10// DISABLED: 11// NULL 12?> 13<form method="post"> 14<input type="text" name="empty"> 15<input type="text" name="disabled" value="1234567890" disabled> 16 <input type="submit"> 17</form>

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

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

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

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

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

guest

回答2

0

自己解決

初歩的な確認不足の質問で申し訳ありません。
よくよく確認した所disabledをsubmitした場合、空文字やnullを送信するのではなく、そもそもform内に存在しないものとして扱われるためall()で取得した中にはindexが存在しませんでした。
存在しないindexをget()してもnullが返るため勘違いをしていました。

よってall()で取得した配列に対してarray_key_exists()をかけることで判定ができました。
ありがとうございました。

投稿2023/05/03 02:44

iinuma-y

総合スコア2

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

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

0

そんな無駄な区別をする必要は全くないので
送信されてきたデータを保存すればいいだけ。
disabledも不要。
編集画面なのにdisabledにされてるとか意味不明すぎる。
初心者が考えた変なUIなんて迷惑なだけなので余計なことは何もしなくていい。

投稿2023/05/01 11:44

kawax

総合スコア10377

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

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

iinuma-y

2023/05/01 13:03

直接質問には関係ないと思ったので伏せていましたが、該当の箇所は画像の外部URLを指定するものです。その他の箇所は仰る通りdisabledにはしません。 URLから画像を読み込み、AWSのS3Bucketに複製するようになっており、複数の画像が保存できるようになっています。 編集画面でユーザーができるのは以下いずれかです。 ・既に保存された画像そのまま変更をしない ・既に保存された画像を削除する ・既に保存された画像を他の画像に置き換える ・画像の保存されていない箇所に新たな画像を保存する 無駄なトランザクションを発生させたくないので、既に画像が保存されている箇所はユーザーからの要求(画像の削除または置き換え)がなければ更新をしたくないのですが、どのようなUIおよび設計にすべきでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問