【问题标题】:Validate select dropdown. Only one option is correct to submit the form验证选择下拉菜单。只有一个选项是正确的提交表格
【发布时间】:2020-06-30 18:53:54
【问题描述】:

所以我有一个带有文本框的简单表单,带有 2 个选项和一个提交按钮的下拉菜单。我有一个包含两个值的下拉列表 - Google 和 Bing。如果您选择 Bing,我希望它引发错误。我为只接受字母的文本框做了类似的事情。如果您在输入框中添加数字,则会显示正则表达式错误。如何为我的下拉菜单获取此信息?

我的刀片文件:

    <form action="{{route('redirectURL')}}" method="GET">

    <input {!!$errors->has('searchText') ? 'style="background-color: #faa"' : '' !!} type="text" 
    value=" 
   {{old('searchText')}}" name="searchText" pattern="[a-zA-Z0-9]{5,30}" title="Vain [a-zA-Z0-9]{5,30}         
    hyväksytään"> <input type="submit" name="submit"><br>

    @error('searchText')
    <div style="background-color: lightgrey; width:230px;">
    {{$message}}
    </div>
    @enderror
    <select name="searchEngine">
    <option name="Google" value="http://www.google.com/search?q=" @if(old('searchEngine') ==         
    "http://www.google.com/search?q=") {{'selected'}} @endif >Google</option>
    <option name="Bing" value="http://www.bing.com/search?q=" @if(old('searchEngine') ==                 
    "http://www.bing.com/search?q=") {{'selected'}} @endif>Bing</option>
    </select>
    @error('Google')
    <div style="background-color: lightgrey; width:230px">
    {{$message}}
    </div>
    @enderror

还有我的控制器:

public function searchURL(){
$validator = request()->validate([
    'searchText'=> ['required','regex:/^[a-zA-Z]{5,30}$/'],
    'Google' => 'required'
],
    ['searchText.regex' => 'I accept only letters!',
    'Google.required' => 'Dont use Bing... use Google!'
    ]
);

文本框正则表达式错误显示正常,但我不知道如何为 Bing 选项生成相同类型的错误。

【问题讨论】:

  • Opps,我发现一个错误 option name="Google" 选项不能包含 name 属性。它只可以取值w3schools.com/tags/tag_select.aspselect元素是option的父元素,它可以取name属性
  • 我尝试将您的代码更改为if ($request-&gt;searchEngine == "http://www.bing.com/search?q=") { return Redirect::back()-&gt;withErrors(['engine', 'Dont use Bing... use Google!']); } 但它也不起作用。也许我需要使用其他技术?

标签: php laravel validation


【解决方案1】:

在 html 表单中选择的工作方式不同

<select name="engine">
   <option value="bing">bing</option>
</select>

在上面的代码中提交时 请求中的数据将是

engine = bing

所以你必须对'engine' key 进行验证。 在您的代码中,您必须对searchEngine进行验证

// 选项一:'in' 采用逗号分隔的可接受值列表 $rules = [ 'engine' =&gt; 'in:google', ];

添加此规则并检查它是否可以根据您的要求更改键值

https://laravel.com/docs/5.5/validation#rule-in

【讨论】:

  • 这解释了为什么我在这两个选项上都有错误。但是我怎么写出来呢? 'searchEngine'=&gt; 'required'我怎样才能把谷歌专门放在那里?
  • @DidzisZvaigzne 我已经更新并检查是否有帮助
  • 感谢您的更新。所以不可能将它添加到我的 $validator 变量中?我必须添加规则?
  • @DidzisZvaigzne $validator = request()-&gt;validate([ 'searchText'=&gt; ['required','regex:/^[a-zA-Z]{5,30}$/'], 'searchEngine' =&gt; 'in:Google' ], 如果可行,试试这个
  • 错误出现在正确的时机!耶!现在错误显示为:所选搜索引擎无效。即使我将错误消息设置为:['searchEngine.required' =&gt; 'Bing doesnt work.']); 任何想法如何修复该消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多