【问题标题】:How to store values of the index in an array?如何将索引的值存储在数组中?
【发布时间】:2017-03-08 11:26:35
【问题描述】:

我有一个看起来像这样的数组

Array ( [0] => test1 [1] => test4 [2] => test2 )

我使用 Codeigniter 内置函数从我的数据库中获取了这个值

每当我尝试将此值插入我的数据库中时,它都会插入 index 而不是 value 本身

我得到的错误是

如您所见,它不是在用户名下的字段中存储test1、test4、test2,而是存储索引0、1、2。

请问如何解决?

参考资料: @MichaelK

表格:

项目表

用户表

项目-用户表

查看

<div class="panel-body">
    <?php echo form_open('admin/add_recommended'); ?>
    <div class="form-group col-lg-12">
    <label>Recommended Employees:</label>
    <?php echo form_error('skillsRequired'); ?>
    <?php
        foreach ($users as $row) {
            $user[] = $row->username;  
        }
        print_r($user);
        echo form_multiselect('user[]', $user, $user, array('class' => 'chosen-select', 'multiple style' => 'width:100%;'));
     ?>
    </div>
</div>
<div class="panel-footer">
    <?php echo form_submit(array('id' => 'success-btn', 'value' => 'Submit', 'class' => 'btn')); ?>
    <?php echo form_close(); ?>
</div>

控制器

public function add_recommended() {
        $this->form_validation->set_rules('skillsRequired', 'Skills Required', 'min_length[1]|max_length[55]');

        $lid = $this->admin_model->getID();

        foreach ($lid as $id) {
            $last_id = $id['projectID'];
            $data['users'] = $this->admin_model->getUsers($last_id);
        }
        $this->load->view('admin/projects/rec-employee', $data);

        if ($this->form_validation->run() === FALSE) {
            //$this->load->view('admin/projects/rec-employee');
        } else {
            $users = $this->input->post('user');
            print_r($users);

            foreach ($users as $user) {
                $data = array(
                    'projectID' => $last_id,
                    'username' => $user
                );

                $id = $this->admin_model->insert('projectemp', $data);
            }

            if ($id) {
                $this->session->set_flashdata('msg', '<div class="alert alert-success" role="alert">Success! New Project has been added.</div>');
                redirect('admin/add_recommended');
            }
        }
    }

渲染视图

【问题讨论】:

  • 您正在使用来自 POST 请求的输入,例如 $this-&gt;input-&gt;post('user')。这个输入应该是一个数组吗?如果尝试print_r($users)var_dump($users) 会得到什么结果?
  • 你能在你的问题中显示 print_r $users 数组吗?
  • @MichaelK 是的,因为我希望将多个值保存在我的数据库中。给定该示例:projectID = 106,用户名 = test1 ||项目 ID = 106,用户名 = test4。类似的东西
  • @rahul_m print_r 是数组([0] => test1 [1] => test4 [2] => test2)
  • @MichaelK 数组 ([0] => test1 [1] => test4 [2] => test2)

标签: php arrays codeigniter


【解决方案1】:

为什么你在控制器中使用$data['users']。其中 $users 包含索引值。你试试这个

//控制器

$data = $this->admin_model->getUsers($last_id); //last id is the latest id.

//查看

foreach ($data as $row) {
   $user[] = $row->username;
}

【讨论】:

  • 没用,先生。它给了我一个 $data 未定义的错误
  • 在视图中使用之前从控制器压缩 $data
【解决方案2】:

男孩,对于一个小问题来说,这些 cmets 太多了。

首先@blakcat7,如果我建议对您的数据库架构进行一些更改,我希望您不会介意。使用索引和适当的规范化总是有帮助的。我已经在我的机器上模拟了你的情况。

这是您的用户表,我在此表中添加了一个 ID。

它是你的项目表,只是改变了一些字段名称,你可以使用你自己的

这是您创建联接的表,尽管您可以在项目表中使用 user_id 或 posted_by 字段,这也可以解决您的问题

现在我看到了,您的数据库表中有用户,您还添加了项目,但现在您想将该项目与用户分配或关联。

只需创建一个可以同时查看项目和用户的视图就可以了

由控制器函数渲染

public function assignProject()
{
    $data['projects']=$this->admin_model->getAll('projects');
    $data['users']=$this->admin_model->getAll('user');

    if($_POST)
    {
        $this->admin_model->assignUser($_POST);
        $data['success']='User Assigned';
        $this->load->view('assignProjects',$data);
    }
    else
    {
        $this->load->view('assignProjects',$data);
    }

}

跟随标记渲染的视图

<form action="" method="post">
        <div class="form-group">
            <label>Project</label>
            <select name="project" class="form-control">
                <?php for($i=0;$i<count($projects);$i++){?>
                    <option value="<?php echo $projects[$i]['id']?>"><?php echo $projects[$i]['title']?></option>
                <?php }?>
            </select>
        </div>
        <div class="form-group">
            <label>Users</label>
            <select name="user" class="form-control">
                <?php for($i=0;$i<count($users);$i++){?>
                    <option value="<?php echo $users[$i]['id']?>"><?php echo $users[$i]['username']?></option>
                <?php }?>
            </select>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-primary">Assing User</button>
        </div>
    </form>

只需点击分配用户,模型中的以下函数会将其保存在项目用户表中

public function assignUser($data)
{
    $record=array(
        'user_id'=>$data['user'],
        'project_id'=>$data['project'],
    );
    $this->db->insert('user_projects',$record);
}

请记住,始终在表中使用索引 (ID) 字段,这将使您的数据库迭代生活更简单

【讨论】:

  • 规范化数据库的好建议,但此解决方案不支持在一个 POST 请求中多选和更新多个用户。
【解决方案3】:

好的,谢谢大家的帮助。这对我来说真的很重要。经过两天的挣扎,我终于解决了我的问题。 ^_^

特别感谢 Michael K 帮助我指出了问题,感谢 Malik Mudassar 给了我如何做的想法。

控制器

 public function add_recommended() {

            $lid = $this->admin_model->getID();

            foreach ($lid as $id) {
                $last_id = $id['projectID'];
            }

            $data['users'] = $this->admin_model->getUsers($last_id);

            $this->load->view('admin/projects/rec-employee', $data);

            if ($_POST) {
                $users = $this->input->post('recommended');
                foreach ($users as $user):
                    $data = array(
                        'projectID' => $last_id,
                        'userID' => $user
                    );
                    $id = $this->admin_model->insertRecEmp($data);
                endforeach;

                $this->session->set_flashdata('msg', '<div class="alert alert-success" role="alert">Success! New Project has been added.</div>');
                redirect('admin/add_project');
            }
}

型号

public function getUsers($id) {
    $this->db->select('*');
    $this->db->from('users_skills e');
    $this->db->join('projects_skills p', 'e.skillsID = p.skillsID');
    $this->db->join('users u', 'u.userID = e.userID');
    $this->db->where('p.projectID', $id);
    $this->db->group_by('e.userID');
    $this->db->order_by('e.percentage', 'desc');
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        foreach ($query->result() as $row) {
            $result[] = $row;
        }
        return $result;
    }
    return false;
}

public function getID() {
    $this->db->select_max('projectID');
    $this->db->from('projects');
    $query = $this->db->get();
    $result = $query->result_array();

    return $result;
}

public function insertRecEmp() {
    $this->db->insert('projects_users', $data);
    }

查看

<form action="add_recommended" method="post">
<select name="recommended[]" class="chosen-select" multiple title='Select Skills' multiple style="width: 100%;">
      <?php for ($i = 0; $i < count($users); $i++) { ?>
      <option value="<?php echo $users[$i]->userID ?>"><?php echo $users[$i]->username ?></option>
      <?php } ?>
</select>
</form>

我完全改变了我的数据库和我的多选 PHP 函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2013-01-29
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多