Php CodeIgniter中的可选表单字段和更新
我有一个编辑用户信息表单,用户可以在其中更改其电子邮件地址, 电话号码或密码。问题是,其中一些变化应该 可以选择。假设用户只想更改他/她的电子邮件,并将新密码字段留空。提交后,它只会影响和更新他/她的电子邮件,但现在它也会影响密码字段,并将其更新为空字段 这是我到目前为止所做的 查看:Php CodeIgniter中的可选表单字段和更新,php,mysql,forms,codeigniter,Php,Mysql,Forms,Codeigniter,我有一个编辑用户信息表单,用户可以在其中更改其电子邮件地址, 电话号码或密码。问题是,其中一些变化应该 可以选择。假设用户只想更改他/她的电子邮件,并将新密码字段留空。提交后,它只会影响和更新他/她的电子邮件,但现在它也会影响密码字段,并将其更新为空字段 这是我到目前为止所做的 查看: <?php $this->load->helper('form'); ?> <?php $attributes = array( 'id' => 'update
<?php $this->load->helper('form'); ?>
<?php $attributes = array(
'id' => 'update_user_form'
);
?>
<?php echo form_open('users/edit_profile', $attributes); ?>
<div class="loading_spinner" id="loading_spinner_add_user" style="display:none;"></div>
<div class="login_error" id="new_user_error" style="display:none">
<span class="close_error">×</span>
</div>
<div class="front_success" id="new_user_success" style="display:none"></div>
<div class="rowi">
<div class="rowi1">
<label for="email">Sähköpostiosoite</label>
<input type="email" name="email" value="<?=$userinfo['email']?>" />
</div>
<div class="rowi2">
<label for="phone_number">Puhelinnumero</label>
<input type="text" name="phone_number" value="<?=$userinfo['phone_number']?>"/>
</div>
</div>
<div class="rowi">
<div class="rowi1">
<label for="password">Uusi salasana</label>
<input type="password" name="new_password" />
</div>
<div class="rowi2">
<label for="new_password_again">Uusi salasana uudelleen</label>
<input type="password" name="new_password_again" />
</div>
</div>
<div class="rowi">
<p>Vahvista mahdolliset muutokset kirjoittamalla salasanasi allolevaan tekstikenttään.</p>
<div class="rowi1">
<input type="password" name="password_to_confirm" placeholder="Salasana" />
</div>
<div class="rowi2">
<input type="submit" name="update_info" value="Muokkaa tietojani" class="login_submit">
</div>
</div>
<?php echo form_close(); ?>
public function edit_user($data, $user_id)
{
$data = array(
'email' => $data['email'],
'phone_number' => $data['phone_number'],
'password' => $data['new_password']
);
$this->db->where('id', $user_id);
$this->db->update('users', $data);
}
public function edit_profile()
{
if(!$_POST)
{
return false;
}
$password_to_confirm = $this->input->post('password_to_confirm');
$db_password = $this->user_model->password_db_check($this->session>userdata('user_id'));
if(!$this->phpass->check($password_to_confirm, $db_password['password']))
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Antamasi salasana ei täsmännyt käyttäjätunnuksesi salasanaan')));
return false;
}
$this->form_validation->set_rules('email', 'Sähköpostiosoite', 'valid_email|required');
$this->form_validation->set_rules('phone_number', 'Puhelinnumero', 'min_length[7]|max_length[10]');
$this->form_validation->set_rules('new_password', 'Salasana', 'matches[new_password_again]|min_length[8]');
$this->form_validation->set_rules('new_password_again', 'Salasana', 'min_length[8]');
$this->form_validation->set_message('min_length', '%s - kentässä on liian vähän merkkejä');
$this->form_validation->set_message('matches', 'Uudet salasanat eivät täsmää');
$this->form_validation->set_message('required', '%s - kenttä on pakollinen');
$this->form_validation->set_message('is_unique', '%s on jo rekisteröity');
if($this->form_validation->run() == FALSE)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => $this->form_validation->error_array())));
return false;
}
$edit_data = array();
if($this->input->post('email'))
$edit_data['email'] = $this->input->post('email');
if($this->input->post('phone_number'))
$edit_data['phone_number'] = $this->input->post('phone_number');
if($this->input->post('new_password'))
$edit_data['new_password'] = $this->phpass->hash($this->input->post('new_password'));
$edit_info = $this->user_model->edit_user($edit_data, $this->session->userdata('user_id'));
if($edit_info)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>1, 'success' => 'Uusi käyttäjä lisätty')));
} else {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Tietojen päivittäminen epäonnistui')));
}
}
控制器:
<?php $this->load->helper('form'); ?>
<?php $attributes = array(
'id' => 'update_user_form'
);
?>
<?php echo form_open('users/edit_profile', $attributes); ?>
<div class="loading_spinner" id="loading_spinner_add_user" style="display:none;"></div>
<div class="login_error" id="new_user_error" style="display:none">
<span class="close_error">×</span>
</div>
<div class="front_success" id="new_user_success" style="display:none"></div>
<div class="rowi">
<div class="rowi1">
<label for="email">Sähköpostiosoite</label>
<input type="email" name="email" value="<?=$userinfo['email']?>" />
</div>
<div class="rowi2">
<label for="phone_number">Puhelinnumero</label>
<input type="text" name="phone_number" value="<?=$userinfo['phone_number']?>"/>
</div>
</div>
<div class="rowi">
<div class="rowi1">
<label for="password">Uusi salasana</label>
<input type="password" name="new_password" />
</div>
<div class="rowi2">
<label for="new_password_again">Uusi salasana uudelleen</label>
<input type="password" name="new_password_again" />
</div>
</div>
<div class="rowi">
<p>Vahvista mahdolliset muutokset kirjoittamalla salasanasi allolevaan tekstikenttään.</p>
<div class="rowi1">
<input type="password" name="password_to_confirm" placeholder="Salasana" />
</div>
<div class="rowi2">
<input type="submit" name="update_info" value="Muokkaa tietojani" class="login_submit">
</div>
</div>
<?php echo form_close(); ?>
public function edit_user($data, $user_id)
{
$data = array(
'email' => $data['email'],
'phone_number' => $data['phone_number'],
'password' => $data['new_password']
);
$this->db->where('id', $user_id);
$this->db->update('users', $data);
}
public function edit_profile()
{
if(!$_POST)
{
return false;
}
$password_to_confirm = $this->input->post('password_to_confirm');
$db_password = $this->user_model->password_db_check($this->session>userdata('user_id'));
if(!$this->phpass->check($password_to_confirm, $db_password['password']))
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Antamasi salasana ei täsmännyt käyttäjätunnuksesi salasanaan')));
return false;
}
$this->form_validation->set_rules('email', 'Sähköpostiosoite', 'valid_email|required');
$this->form_validation->set_rules('phone_number', 'Puhelinnumero', 'min_length[7]|max_length[10]');
$this->form_validation->set_rules('new_password', 'Salasana', 'matches[new_password_again]|min_length[8]');
$this->form_validation->set_rules('new_password_again', 'Salasana', 'min_length[8]');
$this->form_validation->set_message('min_length', '%s - kentässä on liian vähän merkkejä');
$this->form_validation->set_message('matches', 'Uudet salasanat eivät täsmää');
$this->form_validation->set_message('required', '%s - kenttä on pakollinen');
$this->form_validation->set_message('is_unique', '%s on jo rekisteröity');
if($this->form_validation->run() == FALSE)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => $this->form_validation->error_array())));
return false;
}
$edit_data = array();
if($this->input->post('email'))
$edit_data['email'] = $this->input->post('email');
if($this->input->post('phone_number'))
$edit_data['phone_number'] = $this->input->post('phone_number');
if($this->input->post('new_password'))
$edit_data['new_password'] = $this->phpass->hash($this->input->post('new_password'));
$edit_info = $this->user_model->edit_user($edit_data, $this->session->userdata('user_id'));
if($edit_info)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>1, 'success' => 'Uusi käyttäjä lisätty')));
} else {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Tietojen päivittäminen epäonnistui')));
}
}
是否有可能使用三元运算符或某种东西来检查字段是否为空,如果是的话,更新部分应该忽略空白字段。 编辑
在写上下文中实际无法获得该返回的唯一方法是:if($this->input->post('email') != "")
{
$update_data['email'] = $this->input->post('email');
}
if($this->input->post('phone_number') != "")
{
$update_data['phone_number'] = $this->input->post('phone_number');
}
if($this->input->post('new_password') != "")
{
$update_data['password'] = $this->input->post('new_password');
}
但它仍然会更新所有字段,包括那些空字段。答案是否。您不能在本例中使用三元运算符。如果使用三元运算符,请签出以下代码:
$edit_data['email'] = ($this->input->post('email') && !empty($this->input->post('email'))) ? $this->input->post('email') : NULL;
$edit_data['phone_number'] = ($this->input->post('phone_number') && !empty($this->input->post('phone_number'))) ? $this->input->post('phone_number') : NULL;
$edit_data['new_password'] = ($this->input->post('new_password') && !empty($this->input->post('new_password'))) ? $this->input->post('new_password') : NULL;
说明:
<?php $this->load->helper('form'); ?>
<?php $attributes = array(
'id' => 'update_user_form'
);
?>
<?php echo form_open('users/edit_profile', $attributes); ?>
<div class="loading_spinner" id="loading_spinner_add_user" style="display:none;"></div>
<div class="login_error" id="new_user_error" style="display:none">
<span class="close_error">×</span>
</div>
<div class="front_success" id="new_user_success" style="display:none"></div>
<div class="rowi">
<div class="rowi1">
<label for="email">Sähköpostiosoite</label>
<input type="email" name="email" value="<?=$userinfo['email']?>" />
</div>
<div class="rowi2">
<label for="phone_number">Puhelinnumero</label>
<input type="text" name="phone_number" value="<?=$userinfo['phone_number']?>"/>
</div>
</div>
<div class="rowi">
<div class="rowi1">
<label for="password">Uusi salasana</label>
<input type="password" name="new_password" />
</div>
<div class="rowi2">
<label for="new_password_again">Uusi salasana uudelleen</label>
<input type="password" name="new_password_again" />
</div>
</div>
<div class="rowi">
<p>Vahvista mahdolliset muutokset kirjoittamalla salasanasi allolevaan tekstikenttään.</p>
<div class="rowi1">
<input type="password" name="password_to_confirm" placeholder="Salasana" />
</div>
<div class="rowi2">
<input type="submit" name="update_info" value="Muokkaa tietojani" class="login_submit">
</div>
</div>
<?php echo form_close(); ?>
public function edit_user($data, $user_id)
{
$data = array(
'email' => $data['email'],
'phone_number' => $data['phone_number'],
'password' => $data['new_password']
);
$this->db->where('id', $user_id);
$this->db->update('users', $data);
}
public function edit_profile()
{
if(!$_POST)
{
return false;
}
$password_to_confirm = $this->input->post('password_to_confirm');
$db_password = $this->user_model->password_db_check($this->session>userdata('user_id'));
if(!$this->phpass->check($password_to_confirm, $db_password['password']))
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Antamasi salasana ei täsmännyt käyttäjätunnuksesi salasanaan')));
return false;
}
$this->form_validation->set_rules('email', 'Sähköpostiosoite', 'valid_email|required');
$this->form_validation->set_rules('phone_number', 'Puhelinnumero', 'min_length[7]|max_length[10]');
$this->form_validation->set_rules('new_password', 'Salasana', 'matches[new_password_again]|min_length[8]');
$this->form_validation->set_rules('new_password_again', 'Salasana', 'min_length[8]');
$this->form_validation->set_message('min_length', '%s - kentässä on liian vähän merkkejä');
$this->form_validation->set_message('matches', 'Uudet salasanat eivät täsmää');
$this->form_validation->set_message('required', '%s - kenttä on pakollinen');
$this->form_validation->set_message('is_unique', '%s on jo rekisteröity');
if($this->form_validation->run() == FALSE)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => $this->form_validation->error_array())));
return false;
}
$edit_data = array();
if($this->input->post('email'))
$edit_data['email'] = $this->input->post('email');
if($this->input->post('phone_number'))
$edit_data['phone_number'] = $this->input->post('phone_number');
if($this->input->post('new_password'))
$edit_data['new_password'] = $this->phpass->hash($this->input->post('new_password'));
$edit_info = $this->user_model->edit_user($edit_data, $this->session->userdata('user_id'));
if($edit_info)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>1, 'success' => 'Uusi käyttäjä lisätty')));
} else {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Tietojen päivittäminen epäonnistui')));
}
}
如果我们使用三元运算符,我们将强制创建$edit_data['password']
数据,即使密码为空,我们也不希望这样做。如果用户输入密码,那么它将把密码存储在$edit_data['password']
中,但是如果用户将密码保留为空,null
将被存储在$edit_data['password']
中,这反过来会留下一个空白字段更新
解决方案:
<?php $this->load->helper('form'); ?>
<?php $attributes = array(
'id' => 'update_user_form'
);
?>
<?php echo form_open('users/edit_profile', $attributes); ?>
<div class="loading_spinner" id="loading_spinner_add_user" style="display:none;"></div>
<div class="login_error" id="new_user_error" style="display:none">
<span class="close_error">×</span>
</div>
<div class="front_success" id="new_user_success" style="display:none"></div>
<div class="rowi">
<div class="rowi1">
<label for="email">Sähköpostiosoite</label>
<input type="email" name="email" value="<?=$userinfo['email']?>" />
</div>
<div class="rowi2">
<label for="phone_number">Puhelinnumero</label>
<input type="text" name="phone_number" value="<?=$userinfo['phone_number']?>"/>
</div>
</div>
<div class="rowi">
<div class="rowi1">
<label for="password">Uusi salasana</label>
<input type="password" name="new_password" />
</div>
<div class="rowi2">
<label for="new_password_again">Uusi salasana uudelleen</label>
<input type="password" name="new_password_again" />
</div>
</div>
<div class="rowi">
<p>Vahvista mahdolliset muutokset kirjoittamalla salasanasi allolevaan tekstikenttään.</p>
<div class="rowi1">
<input type="password" name="password_to_confirm" placeholder="Salasana" />
</div>
<div class="rowi2">
<input type="submit" name="update_info" value="Muokkaa tietojani" class="login_submit">
</div>
</div>
<?php echo form_close(); ?>
public function edit_user($data, $user_id)
{
$data = array(
'email' => $data['email'],
'phone_number' => $data['phone_number'],
'password' => $data['new_password']
);
$this->db->where('id', $user_id);
$this->db->update('users', $data);
}
public function edit_profile()
{
if(!$_POST)
{
return false;
}
$password_to_confirm = $this->input->post('password_to_confirm');
$db_password = $this->user_model->password_db_check($this->session>userdata('user_id'));
if(!$this->phpass->check($password_to_confirm, $db_password['password']))
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Antamasi salasana ei täsmännyt käyttäjätunnuksesi salasanaan')));
return false;
}
$this->form_validation->set_rules('email', 'Sähköpostiosoite', 'valid_email|required');
$this->form_validation->set_rules('phone_number', 'Puhelinnumero', 'min_length[7]|max_length[10]');
$this->form_validation->set_rules('new_password', 'Salasana', 'matches[new_password_again]|min_length[8]');
$this->form_validation->set_rules('new_password_again', 'Salasana', 'min_length[8]');
$this->form_validation->set_message('min_length', '%s - kentässä on liian vähän merkkejä');
$this->form_validation->set_message('matches', 'Uudet salasanat eivät täsmää');
$this->form_validation->set_message('required', '%s - kenttä on pakollinen');
$this->form_validation->set_message('is_unique', '%s on jo rekisteröity');
if($this->form_validation->run() == FALSE)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => $this->form_validation->error_array())));
return false;
}
$edit_data = array();
if($this->input->post('email'))
$edit_data['email'] = $this->input->post('email');
if($this->input->post('phone_number'))
$edit_data['phone_number'] = $this->input->post('phone_number');
if($this->input->post('new_password'))
$edit_data['new_password'] = $this->phpass->hash($this->input->post('new_password'));
$edit_info = $this->user_model->edit_user($edit_data, $this->session->userdata('user_id'));
if($edit_info)
{
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>1, 'success' => 'Uusi käyttäjä lisätty')));
} else {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('result'=>0, 'error' => 'Tietojen päivittäminen epäonnistui')));
}
}
使用isset()
和empty()
函数作为if语句中的条件
if(!empty($this->input->post('new_password')))
{
$edit_data['new_password'] = $this->input->post('new_password');
}
更新
从控制器发送更新时使用的数组,并在查询中直接使用它。如果用户输入的是电子邮件
和电话号码
,而不是新密码
在控制器中
if($this->input->post('email') != "")
{
$update_data['email'] = $this->input->post('email');
}
if($this->input->post('phone_number') != "")
{
$update_data['phone_number'] = $this->input->post('phone_number');
}
if($this->input->post('new_password') != "")
{
$update_data['password'] = $this->input->post('new_password');
}
$edit_info = $this->user_model->edit_user($edit_data, $this->session->userdata('user_id'));
// Since email, phone_number, password are the column names of the table
// you can directly use $update_data array in your query
// which prevent from inserting blank values in unfilled fields
您的阵列
Array(
[email] => abc@gmail.com
[phone_number] => 9999999999
)
在型号中
public function edit_user($data, $user_id)
{
$this->db->where('id', $user_id);
$this->db->update('users', $data);
}
在我做了上面u所说的之后,我得到了这个错误:致命错误:无法在第370行的application/controllers/users.php的write上下文中使用方法返回值。问题是,由于未知的原因,无法将isset()和empty()函数与$this->input->post()一起使用me@B_CooperA检查更新。