我正在尝试制作个人资料页面。在哪里我希望将空字段显示为文本字段,为此我在视图中使用以下代码。
$vNaam = $row->vNaam;
if(empty($vNaam) && $this->uri->segment(3) == $this->session->userdata('username')){
echo "<p>Voornaam: ";
echo form_input('vNaam', $this->input->post('vNaam'));
echo form_error('vNaam');
echo "</P>";
} else {
echo "<li>";
echo "<p>Voornaam: ";
echo $vNaam;
echo "</P>";
echo "</li>";
}
要处理数据,我在控制器中使用以下方法。
if($this->form_validation->run()){
$data = array(
'vNaam' => $this->input->post('vNaam')
);
$data=array_filter($data);
$this->model_users->update_info($data);
redirect('main/profile/'. $this->session->userdata('username'));
} else {
$data["results"] = $this->model_get->getProfile($this->session->userdata('username'));
$this->load->view('content_profile', $data);
}
最后我的模特。
function update_info($data){
$this->db->where('id', $this->session->userdata('user_id'));
$this->db->update('users',$data);
}
有了这个,我试图让它只更新尚未填写的记录。
现在,当我在我的网站上创建一个新帐户并填写表单并进行更新时,它只能运行一次。让我们说其中一个字段留空,当我再次尝试更新字段时,没有任何反应。它没有显示文本字段,只是一个空的
标记。但问题是,我希望人们能够随意添加数据。 任何帮助将不胜感激!
答案 0 :(得分:0)
我将借助一个例子向您解释这一点。但为此,您必须保持input name
和数据库field name
- 相同。
1)示例表users
id | name | email | mobile | address
2)您的观点
<form action="/users/update" method="POST">
<input type = "text" name = "name" />
<input type = "email" name = "email" />
<input type = "text" name = "mobile" />
<input type = "text" name = "address" />
</form>
3)您的控制器
class Users extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function update()
{
$data = array_filter($this->input->post(), 'strlen');
// Remove all empty values from array
$this->user_model->update_details($data);
}
}
4)您的模型
class User_model extends CI_Model
{
public $db;
public function __construct()
{
parent::__construct();
$this->db = $this->load->database('default',TRUE);
}
public function update_details($data)
{
/*
Now $data is a ready array to be update directly in your table
which has all non-null values and also ready with columns name with it
*/
$this->db->where('id', $this->session->userdata('user_id'));
$this->db->update('users', $data);
}
}
<强>
说明:强>
当您使用address
中的空白值提交上面的表单时,带有array_filter
标记的strlen
将从POST
数组中删除空白值。此外,由于input names
与表field names
的{{1}}相同,因此您已准备好在update query
中使用的数组。将array
传递给模型就可以了。希望它能帮到你。
答案 1 :(得分:0)
我解决了这个具体问题,删除了我愚蠢的“必需”&#39;我的一个字段上的验证规则,这样当我尝试更新并且更新没有包含所需的字段时,它就失败了。而且因为我也愚蠢到没有在我的视图上设置任何验证错误输出我没有注意到。道歉。