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 关注
- 100 浏览
添加回答
举报