Php 未定义的偏移量:1,即使使用空()

Php 未定义的偏移量:1,即使使用空(),php,Php,所以我在复选框中放了两个值,第一个是金额,第二个是id。我已经使用了empty(),但仍然无法解决这个“未定义的偏移量”问题。有什么建议吗 <input type="checkbox" name="checkbox[]" value="1::<?php echo $players->player_id?>"> <input type="checkbox" name="checkbox2[]" value=".5::<?php echo $play

所以我在复选框中放了两个值,第一个是金额,第二个是id。我已经使用了empty(),但仍然无法解决这个“未定义的偏移量”问题。有什么建议吗

 <input type="checkbox"  name="checkbox[]" value="1::<?php echo $players->player_id?>">
 <input type="checkbox"  name="checkbox2[]" value=".5::<?php echo $players->player_id?>">
 <input type="checkbox"  name="checkbox3[]" value=".5::<?php echo $players->player_id?>">
 <input type="checkbox"  name="checkbox4[]" value="-.5::<?php echo $players->player_id?>">           

仅将复选框发送到服务器。因此,每个复选框数组将具有不同的元素数量,具体取决于选中的复选框数量。不能使用
count($this->input->post('checkbox'))
作为所有复选框的限制

您需要为每个复选框使用单独的循环。您还可以使用一个关联数组,通过键入播放器ID来收集每个复选框中的数据

public function update() {
    $players = array();

    foreach ($this->input->post('checkbox') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att1', $value);
    }
    foreach ($this->input->post('checkbox2') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att2', $value);
    }
    foreach ($this->input->post('checkbox3') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att3', $value);
    }
    foreach ($this->input->post('checkbox4') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att4', $value);
    }
    $this->load->model('Evaluation_model');
    foreach ($players as $player_id => $data) {
        $this->Evaluation_model->editview($player_id, $data);
    }
    redirect(base_url('Evaluations'));
}

static function update_player(&$players, $id, $property, $value) {
    if (!isset($players[$id])) {
        $players[$id] = array(
            'player_id' => $id,
            'player_att1' => 0,
            'player_att2' => 0,
            'player_att3' => 0,
            'player_att4' => 0,
            'player_atotal' => 0
        );
    }
    $players[$id][$property] = $value;
    $players[$id]['player_atotal'] += $value;
}

您应该为所有复选框使用相同的名称,以便可以循环遍历它们并获取值。您所做的是将不同的复选框作为数组。。长话短说,将所有复选框命名为name='checkbox[]'@Akintunde我怀疑这是多行表单中的一行,每行有4个复选框。所以数组可以跨行运行。哎呀!看来你是对的@Barmar。OP也没有详细解释上面的代码应该做什么。这看起来像是代码点火器语法。行$this->input->post('checkbox')似乎只是查找属性复选框,而不是复选框2(例如),但是从这一行中,如何确定与表的每一行关联的复选框集?你不能。您需要将复选框命名为
checkbox[0]
以获得一致的数组。我认为不需要行,玩家ID在值中。公平点,尽管这似乎是一种提交表单数据的奇怪方式:D我想理想情况下,它应该与
name=“players[#ID][#KEY]“value=“#value”类似
…要理解
&
@Barmar,我真的无法将它们结合起来,请帮我一个忙,并告诉我答案,我将如何研究。
public function update() {
    $players = array();

    foreach ($this->input->post('checkbox') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att1', $value);
    }
    foreach ($this->input->post('checkbox2') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att2', $value);
    }
    foreach ($this->input->post('checkbox3') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att3', $value);
    }
    foreach ($this->input->post('checkbox4') as $checkbox) {
        list($value, $player_id) = explode('::', $checkbox);
        self::update_player($players, $player_id, 'player_att4', $value);
    }
    $this->load->model('Evaluation_model');
    foreach ($players as $player_id => $data) {
        $this->Evaluation_model->editview($player_id, $data);
    }
    redirect(base_url('Evaluations'));
}

static function update_player(&$players, $id, $property, $value) {
    if (!isset($players[$id])) {
        $players[$id] = array(
            'player_id' => $id,
            'player_att1' => 0,
            'player_att2' => 0,
            'player_att3' => 0,
            'player_att4' => 0,
            'player_atotal' => 0
        );
    }
    $players[$id][$property] = $value;
    $players[$id]['player_atotal'] += $value;
}