Codeigniter seçme menüsünde değerler veritabanı satırları alıyorum form_helper

6 Cevap php

Ben bunu bu şekilde yayınlamak kez gerçekten basit olacak biliyorum,

, Ben değerleri veritabanından çekilen istiyorum, içinde bir menü vardır bir form, yazıyorum, bu yüzden bu satırlar boyunca bir şey olacağını düşündüm

Benim bakış

<?php
   echo form_open('admin/save_content');
   echo form_fieldset();
   echo form_dropdown('categories', $select_options);
   echo form_submit('category_submit', 'Submit');
   echo form_fieldset_close();
   echo form_close();
?>

Benim denetleyicisi

function add_content() {
	$data = array();
	$this->is_logged_in();
	$this->load->model('category_model');
	$data['select_options'] = $this->category_model->get_all_online();
	$this->load->view('admin/content/add_content', $data);
}

benim modeli

public function get_all_online() {
	$this->db->select('*');
	$this->db->from('category');
	$this->db->where('category_online', 1);
	$query = $this->db->get();

	return $query->result();

}

Ben formu açılır yılında $selected_options yerleştirdiğinizde şimdi ben, bu hatayı alıyorum

Bir PHP hata ile karşılaşıldı

Önem: 4096

Message: Object of class stdClass could not be converted to string

Dosya Adı: yardımcıları / form_helper.php

Satır sayısı: 331

6 Cevap

Sen metin görüntülenir olacağı dizi anahtarı POSTed olduğu değer ve değer nerede olacak, sizin açılan bir dizi geçmesi gerekiyor.

Bunu başarmak için, bu nedenle gibi kumandayı değiştirmek:

function add_content() {
        $data = array();
        $this->is_logged_in();
        $this->load->model('category_model');
        $data['select_options'] = $this->category_model->get_all_online_select();
        $this->load->view('admin/content/add_content', $data);
}

ve modeline bu işlev eklemek

public function get_all_online_select() {
        $this->db->select('id, name'); //change this to the two main values you want to use
        $this->db->from('category');
        $this->db->where('category_online', 1);
        $query = $this->db->get();
        foreach($query->result_array() as $row){
            $data[$row['id']]=$row['name'];
        }
        return $data;
}

Yani hile yapmak gerekir

Ben şahsen bu kontrolörün iş olarak benim veriler kullanılacaktır nasıl hakkında benim Modeller varsayımlar yapmak için nefret ediyorum. Bir MY_array_helper.php eklemek ve bu yapıştırın eğer:

function array_to_select() {

$args = func_get_args();

$return = array();

switch(count($args)):

	case 3:
		foreach ($args[0] as $itteration):
			if(is_object($itteration)) $itteration = (array) $itteration;
	        $return[$itteration[$args[1]]] = $itteration[$args[2]];
	    endforeach;
	break;

	case 2:
		foreach ($args[0] as $key => $itteration):
			if(is_object($itteration)) $itteration = (array) $itteration;
	        $return[$key] = $itteration[$args[1]];
	    endforeach;
	break;

	case 1:
		foreach ($args[0] as $itteration):
	        $return[$itteration] = $itteration;
	    endforeach;
	break;

	default:
		return FALSE;
	break;

endswitch;

return $return;

}

Sonra böyle bir şey yapabilirsiniz:

function add_content() {
    $data = array();
    $this->is_logged_in();
    $this->load->model('category_model');
    $this->load->helper('array');
    $data['select_options'] = array_to_select($this->category_model->get_all_online(), 'id', 'title');
    $this->load->view('admin/content/add_content', $data);

}

Bu değer ve anahtar olarak değerini kullanarak bir veya iki anahtar, ya da tek boyutlu diziler ileterek çok boyutlu dizileri destekler.

Örn: array_to_select (array ('değer1', 'deger2')) array ('değer1' => 'değer1'i', 'value2' => 'deger2') verir

Sen) dizeleri bir dizi, sonuç (dönmek gerekiyor nesneleri bir dizidir.

Belki modelinde bu deneyin:

return $query->result_array();

Senin görünümünde, Model orada foreach yerine ekleyebilirsiniz.

<?php
   echo form_open('admin/save_content');
   echo form_fieldset();
   foreach($select_options->result_array() as $row){
   $data[$row['id']]=$row['name'];
   echo form_dropdown('categories', $row);
   }
   echo form_submit('category_submit', 'Submit');
   echo form_fieldset_close();
   echo form_close();
?>

Test edilmedi.

Ben sadece iki alan (id & değer) ile basit bir db sorgu ile çalışmak için Phil Cerrahın dizi yardımcısı düzenlenmekte. Yani yardımcı sınıfı şimdi bu gibi görünüyor:

<?php
function array_to_select() {
    //get args
    $args = func_get_args();
    //get args key names
    $keys = array_keys($args[0][0]);
    //set return array
    $return = array();
    foreach ($args[0] as $itteration){
        //$itteration[$keys[0]] is field id value,  $itteration[$keys[1]] is field name value
        $return[$itteration[$keys[0]]] = $itteration[$keys[1]];
    }
    return $return;
}

And you can use it again in your controller.
Hope it's usefull.

Form seçenekleri codeigniter form drop down menu doğrulama sınıfı ile de sürü ile açılır