3 回答

TA貢獻1811條經驗 獲得超5個贊
如前所述,絕對沒有理由在這里使用 eval。您需要做的是構建一個要傳入的值數組,然后決定是否需要成為新用戶或更新。
public function alterUser()
{
$name = $_POST['name']; //required field
$contact = $_POST['contact']; //required field
$password = $_POST['password']; //required field
$values = [
'name' => $name,
'password' => Hash::make($password),
'contacto' => $contact
];
if (isset($_POST['email'])) {
$values['email'] = $_POST['email'];
}
if (isset($_POST['nif'])) {
$values['nif'] = $_POST['nif'];
}
if(!empty($_POST['id'])) {
DB::table('users')->insert($values);
} else {
DB::table('users')->where('id', $_POST['id'])->update($values);
}
return redirect('/user');
}

TA貢獻1859條經驗 獲得超6個贊
看來您可以大大簡化代碼,并消除eval()除非萬不得已而不應使用的需求。
代碼中不需要所有 IF 塊,因為如果未設置該值,它也不會添加到數組中$values。
只需將您的$_POST變量分配給一個$values變量,Laravel 就會為您完成大部分繁重的工作。
public function alterUser()
{
$values = $_POST;
//remove _token variable created by Laravel in all POST requests
unset($values['_token']);
//perform any actions needed on values before being send to database
$values['password'] = Hash::make($values['password']);
if(!empty($values['id'])) {
DB::table('users')->insert($values);
} else {
DB::table('users')->where('id', $values['id'])->update($values);
}
return redirect('/user');
}
我在您的代碼中看到您將變量重命名contact為contacto. 我建議更改您的表單以匹配此變量名稱,但如果不可能,您仍然可以在設置后重命名它,$values = $_POST如下所示:
$values['contacto'] = $values['contact'];
unset($values['contact']);
另外,如果您的表單發送了任何您不想發送到數據庫的變量,例如“密碼驗證”字段或類似的字段,那么您可以在設置后取消設置它們,如下所示$values = $_POST:
unset($values['VALUE_TO_REMOVE']);

TA貢獻2019條經驗 獲得超9個贊
我會將邏輯分解成更小的部分,以使其更易于閱讀。
public function alterUser()
{
$values = $this->readPostValues();
$this->performUpsert($values);
return redirect('/user');
}
private function performUpsert(array $values): void
{
if (!empty($_POST['id'])) {
DB::table('users')->insert($values);
return;
}
DB::table('users')->where('id', $_POST['id'])->update($values);
}
private function readPostValues(): array
{
$values = [
'name' => $_POST['name'],
'password' => $_POST['password'],
'contacto' => $_POST['contact'],
];
if (isset($_POST['email'])) {
$values['email'] = $_POST['email'];
}
if (isset($_POST['nif'])) {
$values['nif'] = $_POST['nif'];
}
return $values;
}
- 3 回答
- 0 關注
- 155 瀏覽
添加回答
舉報