Я программирую с помощью Codeigniter. У меня ошибка
A Php Error was encountered Severity: Warning Message in_array() expect parameter 2 to be array
Я сравнил код с другим, который работает, но ошибки не обнаружил.
public function update($post_id)
{
if (!in_array('updatePost', $this->permission)) {
redirect('dashboard', 'refresh');
}
if (!$post_id) {
redirect('dashboard', 'refresh');
}
$data = array(
'name' => $this->input->post('post_name'),
'summary' => $this->input->post('summary'),
'date' => $this->input->post('date'),
'description' => $this->input->post('description'),
'subject_id' => json_encode($this->input->post('subjects')),
'tag_id' => json_encode($this->input->post('tag')),
'category_id' => $this->input->post('categories'),
'availability' => $this->input->post('availability'),
);
if ($_FILES['post_image']['size'] > 0) {
$upload_image = $this->upload_image();
$upload_image = array('image' => $upload_image);
$this->model_posts->update($upload_image, $post_id);
}
$update = $this->model_posts->update($data, $post_id);
if ($update == true) {
$this->session->set_flashdata('success', 'Successfully updated');
redirect('posts/', 'refresh');
}
else {
$this->session->set_flashdata('errors', 'Error occurred!!');
redirect('posts/update/'.$post_id, 'refresh');
}
}
else {
$this->data['subjects'] = $this->model_subjects->getActiveSubjects();
$this->data['tag'] = $this->model_tag->getActiveTag();
$this->data['categories'] = $this->model_categories->getActiveCategory();
$post_data = $this->model_posts->getPostData($post_id);
$this->data['post_data'] = $post_data;
$this->render_template('posts/edit', $this->data);
}
}
edit // Форма публикации
<div class = "form-group">
<label for = "tag">Tag</label>
<?php $tag_data = json_decode($post_data['tag_id']); ?>
<select class = "form-control select_group" id = "tag" name = "tag[]" multiple = "multiple">
<?php foreach ($tag as $k => $v): ?>
<option value = "<?php echo $v['id'] ?>" <?php if (in_array($v['id'], $tag_data)) { echo 'selected = "selected"'; } ?>><?php echo $v['name'] ?></option>
<?php endforeach ?>
</select>
</div>
Почему одна длинная строка PHP? Позже вы возненавидите себя, когда вернетесь к этому коду и вам придется заниматься обслуживанием.






PHP сообщает вам, что именно не так. В вашем случае, поскольку ваш второй параметр - $tag_data, а $tag_data является результатом json_decode, вполне вероятно, что у json_decode возникла проблема с попыткой декодирования $post_data['tag_id'].
В документации PHP для json_decode указано:
NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.
Подробнее см. Здесь: http://php.net/manual/en/function.json-decode.php
Чтобы обойти предупреждение, можно сделать что-то вроде этого:
if ( is_array( $tag_data ) && in_array($v['id'], $tag_data) )
Но главный вопрос здесь в том, почему вы это делаете? Наверное, есть способ получше.
tag_id в базе данных должен быть фактическим массивом в этой форме ["1", "2", ..]
Переменная NULL, а не массив. Перед использованием проконсультируйтесь с
empty.