J'ai des difficultés avec les données d'affichage de la base de données à la liste déroulante.
C'est ce que j'ai essayé:
Model.php
public function __construct()
{
parent::__construct();
}
function getAllGroups()
{
/*
$query = $this->db->get('location');
foreach ($query->result() as $row)
{
echo $row->description;
}*/
$query = $this->db->query('SELECT description FROM location');
foreach ($query->result() as $row)
{
echo $row->description;
}
//echo 'Total Results: ' . $query->num_rows();
}
Controller.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Delivery_controller extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('delivery_model');
}
public function index()
{
$data['title']= 'Warehouse - Delivery';
$this->load->view('include/header',$data);
$this->load->view('include/navbar',$data);
$this->load->view('delivery_view', $data);
$this->load->view('include/sidebar',$data);
$this->load->view('include/footer',$data);
$data['groups'] = $this->delivery_model->getAllGroups();
}
}
View.php
<select class="form-control">
<?php
$data = $this->delivery_model->getAllGroups();
foreach($description as $each)
{ ?><option value="<?php echo $each['description']; ?>"><?php echo $each['description']; ?></option>';
<?php }
?>
</select>
Mais les résultats apparaissent en haut de ma page. Il n'apparaît pas dans la liste déroulante. Qu'est-ce que je fais mal ici? L'aide est très appréciée. Merci.
Vous ne devriez pas appeler votre modèle de votre vue. Essayez plutôt d'appeler votre modèle et de définir $data['groups']
avant de charger vos vues.
De même, n'imprimez pas les résultats de la ligne dans votre modèle, sauf si vous souhaitez que celle-ci soit affichée sur votre page.
Manette:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Delivery_controller extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('delivery_model');
}
public function index()
{
$data['title']= 'Warehouse - Delivery';
$data['groups'] = $this->delivery_model->getAllGroups();
$this->load->view('include/header',$data);
$this->load->view('include/navbar',$data);
$this->load->view('delivery_view', $data);
$this->load->view('include/sidebar',$data);
$this->load->view('include/footer',$data);
}
}
Modèle:
public function __construct()
{
parent::__construct();
}
function getAllGroups()
{
/*
$query = $this->db->get('location');
foreach ($query->result() as $row)
{
echo $row->description;
}*/
$query = $this->db->query('SELECT description FROM location');
return $query->result();
//echo 'Total Results: ' . $query->num_rows();
}
Vue:
<select class="form-control">
<?php
foreach($groups as $row)
{
echo '<option value="'.$row->description.'">'.$row->description.'</option>';
}
?>
</select>
Voici ce que vous devriez faire:
Modèle :
public function __construct()
{
parent::__construct();
}
function getAllGroups()
{
$query = $this->db->query('SELECT description FROM location');
return $this->db->query($query)->result();
}
Manette :
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Delivery_controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('delivery_model');
}
public function index()
{
$data['title']= 'Warehouse - Delivery';
$data['groups'] = $this->delivery_model->getAllGroups();
//I take here a sample view, you can put more view pages here
$this->load->view('include/header',$data);
}
}
Vue :
<select class="form-control">
<?php foreach($groups as $each){ ?>
<option value="<?php echo $each->description; ?>"><?php echo $each->description; ?></option>';
<?php } ?>
</select>
Codeigniter a déjà des fonctions spécialisées qui minimisent la quantité de HTML que vous devez vider dans votre code:
Modèle
public function description_pulldown(){
$this->db->from('location');
$query = $this->db->get();
foreach($query->result() as $row ){
//this sets the key to equal the value so that
//the pulldown array lists the same for each
$array[$row->description] = $row->description;
}
return $array;
}
Manette
public function index(){
$data['description_list'] = $this->delivery_model->description_pulldown();
//load all of your view data
$this->load->view('delivery_view', $data);
}
Vue
echo form_label("Description");
echo form_dropdown('description', $description_list, set_value('description'), $description_list);
Si vous avez besoin que la vue affiche les données précédentes dans la liste déroulante, vous pouvez utiliser une boucle foreach pour obtenir la valeur précédente de la liste déroulante, à savoir ... $ description = $ item-> description; et dans la vue, remplacez la valeur 'set_value (' description ')' par simplement '$ description.'
Ne jamais appeler un modèle depuis une vue. C'est faisable mais vous perdez encore une fois le point d'utiliser un MVC . Appelez le modèle à partir de votre contrôleur. Obtenez les données et transmettez-les à votre vue.
Utilisez comme ci-dessous.
public function index(){
$data['title']= 'Warehouse - Delivery';
$data['groups'] = $this->delivery_model->getAllGroups();
$this->load->view('include/header',$data);
$this->load->view('include/navbar',$data);
$this->load->view('delivery_view', $data);
$this->load->view('include/sidebar',$data);
$this->load->view('include/footer',$data);
}
Selon vous, il vous suffit de parcourir la variable $groups
et echo
avec votre liste déroulante.
<select class="form-control">
<?php
$i = 0;
while($i < count($groups)){
$val= $groups[$i]['value'];
$des = $groups[$i]['description'];
echo "<option value='$i'>$des</option>";
}
</select>
Et la fonction de votre modèle devrait être,
function getAllGroups(){
$query = $this->db->get('location');
return $query->result_array();
}
Mieux je pense, à votre avis utiliser:
Sur votre modèle, récupérez toutes vos données dans un tableau avec:
public function get_all_description()
{
$query = $this->db->get('description');
return $query->result_array();
}
Dans le contrôleur:
$data['description']=$this->model->get_all_description();
En vue:
for($i=0;$i<sizeof($description);$i++)
{
$description2[$description[$i]['description']]=$marque[$i]['description'];
}
echo form_dropdown('description', $description22, set_value('description'));