如何在数组中存储索引的值?

时间:2017-03-08 11:26:36

标签: php arrays codeigniter

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

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

我使用Codeigniter内置函数

从我的数据库中获取了这个值

每当我尝试将此值重新插入我的数据库时,它会插入索引而不是本身

我得到的错误是 enter image description here

正如您所看到的,不是将test1,test4,test2存储在username下的字段中,而是存储索引0,1,2。

如何解决这个问题?

参考文献: @MichaelK

enter image description here

TABLE:

项目表 enter image description here

用户表 enter image description here

项目用户表 enter image description here

查看

<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>

CONTROLLER

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');
            }
        }
    }

RENDERED VIEW enter image description here

3 个答案:

答案 0 :(得分:0)

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

// CONTROLLER

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

// VIEW

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

答案 1 :(得分:0)

男孩这些对于一个小问题的评论太多了。

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

User table

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

Projects Table

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

Project User table

这是您创建联接的表格,虽然您可以在项目表中使用user_id或posting_by字段来解决您的问题

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

简单地创建一个可以看到项目和用户的视图

Assign User

由Controller函数

呈现
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)字段,会使您的数据库迭代生活更简单

答案 2 :(得分:0)

好的,每个人都好,谢谢你们所有人的帮助。它真的对我很有意义。就像2天的争斗一样,我最终解决了我的问题。 ^ _ ^

特别感谢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函数以进行多选