2017-03-01 140 views
1

這是我的單選按鈕的代碼如何驗證laravel 5.4單選按鈕?

<div class="radio"> 
    <label><input type="radio" name="gander" value="male">male </label> 
    <label><input type="radio" name="gander" value="female">female</label> 
</div> 

和我的控制器代碼是

//validate this form 
    $this->validate(request(),[ 

     'title' => 'required', 
     'body' => 'required', 
     'gander'=> 'in:male,female' 

     ]); 


    $post = new Post; 

    $post->title = $request['title']; 
    $post->body = $request['body']; 
    $post->status= $request['status']; 
    $post->male = $request['male']; 
    $post->female= $request['female']; 

    $post->save(); 

    //And then redirect to the home 
    return redirect('blog'); 
} 

當我提交這份表格顯示此錯誤 SQLSTATE [23000]:完整性約束違規:1048列「男「不能爲空(SQL:插入poststitlebodystatusmalefemaleupdated_atcreated_at)值(SDF,sdfsfsd,0,,,2017年3月1日13時09分54秒, 2017-03-01 13:09:54))

這意味着兩個單選按鈕數據都需要數據庫字段。然後進入我的表有這些領域的「標題」,「體」,「地位」,「男」,'女「created_at」 &「的updated_at」

我的問題是如何驗證單選按鈕&如何插入數據用單選按鈕值?謝謝。

+1

爲什麼你有'男性'和'女性'兩個差異字段?你能詳細說明嗎?你可以簡單地選擇一個字段「性別」。並填寫它是男性還是女性的價值。你的方式是錯誤的!爲了表明我的錯誤,tnx prakash大號 –

+0

。現在我通過tinyinteger數據類型創建我的模式字段。現在它的作品。 – Masum

+0

太棒了!祝你好運 –

回答

1

如果性別爲必填字段,那麼你也應該通過要求驗證,甘德財產像下面

'gander'=> 'required|in:male,female' 

,如果它不是一個需要現場然後讓你的數據庫表中的列男nullables。

並且您的表設計中也存在問題,而不是將女性價值對男性和女性價值的男性價值放在名稱性別和類型bollean列上,然後爲男性設置0,女性爲1。

如果你不想使用布爾值,那麼使用gender.enum的enum數據類型是你最好的選擇。

+0

tnx for ans,但它不工作 – Masum

+0

您的表格設計中存在一個問題,使一個名爲gender的枚舉列的值爲「male」和「female」,而不是爲男性和女性設置單獨的列 –

0

該錯誤消息與驗證無關。驗證通過,你做得很好。但是你的模型看起來很奇怪,因爲不是同一個「性別」列,你有男性和女性。

+0

所以我的解決方案是什麼? – Masum

+0

解決方案是更改您的模型和表格架構,並使用一個名爲「性別」的列來替換「男性」和「女性」兩列。枚舉將是完美的。 –

+0

是的,我做到了。 tnx jakub – Masum

0

嘗試在HTML文件設置正確的名稱:

<div class="radio"> 
    <label><input type="radio" name="male" value="male">male </label> 
    <label><input type="radio" name="female" value="female">female</label> 
</div> 

現在看起來一個gander列。

當然,你將不得不編輯你的驗證後。

+0

如果我寫這個代碼,它顯示兩個按鈕,都可以選擇。但我想選擇只有一個男性或女性,而不是兩個按鈕。 – Masum

+0

@Masum:我明白了,但現在你試圖訪問'$ request ['male'];',這個值在$ request中不存在。 – piscator