【问题标题】:Cannot access empty property in codeigniter无法访问 codeigniter 中的空属性
【发布时间】:2014-11-17 14:20:22
【问题描述】:

我无法从它在数据库中插入空值的表单中获取帖子值

用户控制器

public function edit($id = NULL) {
    if ($id) {
        $this->data ['user'] = $this->user_login_model->get($id);
        count ( $this->data ['user'] ) or $this->data ['errors'] [] = "user could not be found";
    } else {
        $this->data ['user'] = $this->user_login_model->new_user ();
    }

    $rules = $this->user_login_model->rules_admin;
    $id || $rules ['password'] .= '|required';
    $this->form_validation->set_rules ( $rules );
    if ($this->form_validation->run () == TRUE) {

          $data=$this->user_login_model->array_from_post(array('name','email','password'));
        $this->data['password']=$this->user_login_model->$data['password'];
        $this->user_login_model->save($data,$id);
        redirect('admin/users');

        // do stuff

    }

如果是新用户,则会发布新数据

public function new_user() {
    $user=new stdClass();
    $user->name ='';
    $user->email ='';
    $user->password ='';
    return $user;

    var_dump($user);

将遍历数组并返回它的模型方法

public function array_from_post($fields) {
    $data = array ();
    foreach ( $fields as $field ) {
        $data['feild']=$this->input->post($field);
        return $data;
    echo var_dump($data);
    }
}

这是 var_dump

object(stdClass)[22]
public 'id' => string '18' (length=2)
public 'email' => string '' (length=0)
public 'password' => string '' (length=0)
public 'name' => string '12' (length=2)

这是空的,你能告诉我是什么问题吗?

【问题讨论】:

  • 我猜你这行写错了$data['feild']=$this->input->post($field); 这应该是 $data[$feild]=$this->input->post($field);
  • 我都试过了都不行
  • 除了$data[$feild]=$this->input->post($field);之外,您是否尝试过$data[$field]=$this->input->post($field);
  • 当您说 var_dump 为空时,您指的是哪一个?一个是 new_user() 或者一个是 array_from_post()

标签: php mysql codeigniter


【解决方案1】:

试试这个
你的控制器编辑功能

  public function edit($id = NULL) {
    if ($id)
    {
        $this->data ['user'] = $this->user_login_model->get($id);
        count ( $this->data ['user'] ) or $this->data ['errors'] [] = "user could not be found";
    }
    else
    {
        $this->data ['user'] = $this->user_login_model->new_user ();
    }

    $rules = $this->user_login_model->rules_admin;
    $id || $rules ['password'] .= '|required';
    $this->form_validation->set_rules ( $rules );
    if ($this->form_validation->run () == TRUE)
    {

        $this->data=$this->user_login_model->array_from_post(array('name','email','password'));
        $this->data=$this->array_from_post(array('name','email','password'));

        // I removed this line not sure what you did here
        $this->user_login_model->save($this->data,$id);
        // do stuff
        redirect('admin/users');

    }
}

你的模型 array_from_post 函数

public function array_from_post($fields)
{
    $data = array ();
    foreach ( $fields as $field )
    {
        $data[$field]=$this->input->post($field);

    }
    return $data;

}

您的新用户功能

 public function new_user() {
    $user=new stdClass();
    $user->name ='';
    $user->email ='';
    $user->password ='';
    return $user;
}

希望对你有帮助

【讨论】:

  • ITS SAYIING 无法访问空属性和未定义的索引密码?
  • 遇到 PHP 错误严重性:通知消息:未定义索引:密码文件名:admin/users.php 行号:25
  • 致命错误:无法访问 E:\wamp\www\CodeIgniter_2.2.0\system\core\Model.php 中的空属性,第 51 行调用堆栈 # 时间记忆函数位置 1 0.0010 389920 {main} ( ) ..\index.php:0 2 0.0031 462992 require_once('E:\wamp\www\CodeIgniter_2.2.0\system\core\CodeIgniter.php') ..\index.php:202 3 0.1686 3912800 call_user_func_array () ..\CodeIgniter.php:359 4 0.1686 3912848 用户->edit( ) ..\CodeIgniter.php:0 5 0.1791 3953936 CI_Model->__get() ..\Model.php:0
【解决方案2】:

你的 array_from_post 函数基本上没用。你有一个return INSIDE 循环,这意味着你在第一次尝试迭代循环时中止循环/从函数返回。因此,您只会返回 ONE 的参数值。

例如

array_from_post(array('foo', 'bar'));

foreach(array('foo', 'bar') as $field) {
   return $field;
}

您开始循环,foo 被分配给 $field,然后您返回。循环永远不会到达bar

你可能想要

public function array_from_post($fields) {
    $data = array ();
    foreach ( $fields as $field ) {
        $data[$field]=$this->input->post($field);
    }
    return $data;
}

注意$data[$field]。使用$data['feild'] 只会给你一个数组,其中包含一个值,最后一个被循环处理。并注意返回调用是如何在循环之外的。

【讨论】:

  • 我已经尝试使用 $data[$field] 但问题仍然存在
  • 完成了任何基本的调试,比如查看生成的 html 页面的源代码,看看字段名称是否符合您的预期? var_dump($_POST) 看看 php 收到了什么,等等等等?
  • object(stdClass)[22] public 'id' => string '18' (length=2) public 'email' => string '' (length=0) public 'password' => string '' (length=0) public 'name' => string '12' (length=2)
  • 我的邮箱和密码都是空的
猜你喜欢
  • 2013-12-24
  • 1970-01-01
  • 2013-08-04
  • 2014-03-06
  • 2022-07-07
  • 2015-06-04
  • 2020-01-05
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多