8722 sujets

Développement web côté serveur, CMS

Bonjour, je veux afficher le résultat de ma requete sql count ...
je n'arrive pas a l'afficher dans la view
je vous montre mon code:
contrôleur :
<?php
defined('BASEPATH') OR exit('No direct script access allowed');


	class AccueilControlleur extends CI_Controller
	{ 
		function __construct(){
			parent::__construct();
			$this->load->helper('url');
			$this->load->model('users_model');
		}
		public function index(){   			
			$this->load->view('home');
			$result['data']=$this->users_model->nbreEnCours();
			$this->load->view('home',$result);
			}   
	}

model :

<?php
	class Users_model extends CI_Model {
		function __construct(){
			parent::__construct();
			$this->load->database();
		}
 
		public function login($login, $password){
			$query = $this->db->get_where('utilisateur', array('login'=>$login, 'password'=>$password));
			return $query->row_array();
		}
		
		function nbreEnCours(){
			$query=$this->db->query("SELECT COUNT(a.IdActivite) AS cptAct 
								     FROM activite a 
									 WHERE UtilisateurDebut = 'Eric'
									 AND a.DateFin IS NULL ");
			return $query->result();
		}
 
	}
?>

view; c'est ici que je ne sais pas comment l'appeler
<div class="leftt cptDivv">
						<span class="cptLinee">   </span>
							<?php 								
								// echo $data->IdActivite;
								echo 'ticket(s) en cours';
								// $resActUser->closeCursor();
							?>
					</div>	
Bonjour

Pour ma part je vois deux problèmes.

-- D'abord dans ton contrôleur, tu charge une même vue deux fois. Ceci va générer une erreur car la première fois, tu ne transmet aucune donnée à la vue or la vue utilise bien la donnée, donc tu aura certainement une erreur du genre "Undefined variable $data". Donc le premier chargement de la vue ( $this->load->view('home'); ) doit être annulé.

-- Ensuite, lorsque tu fait COUNT(a.IdActivite) AS cptAct, la propriété idActivite n'existe pas dans l'objet retourné, elle est remplacée par son alias cptAct. Donc dans ta vue, tu devrai plutôt faire echo $data->cptAct;

Par ailleurs je ne vois pas pourquoi tu écris ta requête en dur. CodeIgniter a déjà une méthode pour compter les éléments de ta table. J'aurai plutôt faire un truc du genre

Au niveau du modele

function nbreEnCours()
{
	return $this->db
		->where('UtilisateurDebut','Eric')
		->where('DateFin IS NULL', NULL, FALSE)
		->count_all('activite');
}


Au niveau du controleur

public function index(){   			
	$result['cptAct'] = $this->users_model->nbreEnCours();
	$this->load->view('home', $result);
}


Au niveau de la vue

<div class="leftt cptDivv">
	<span class="cptLinee"></span>
	<?= $cptAct; ?>
</div>	
Meilleure solution
Dimtrovich a écrit :
Bonjour

Pour ma part je vois deux problèmes.

-- D'abord dans ton contrôleur, tu charge une même vue deux fois. Ceci va générer une erreur car la première fois, tu ne transmet aucune donnée à la vue or la vue utilise bien la donnée, donc tu aura certainement une erreur du genre "Undefined variable $data". Donc le premier chargement de la vue ( $this-&gt;load-&gt;view('home'); ) doit être annulé.

-- Ensuite, lorsque tu fait COUNT(a.IdActivite) AS cptAct, la propriété idActivite n'existe pas dans l'objet retourné, elle est remplacée par son alias cptAct. Donc dans ta vue, tu devrai plutôt faire echo $data-&gt;cptAct;

Par ailleurs je ne vois pas pourquoi tu écris ta requête en dur. CodeIgniter a déjà une méthode pour compter les éléments de ta table. J'aurai plutôt faire un truc du genre

Au niveau du modele

function nbreEnCours()
{
	return $this-&gt;db
		-&gt;where('UtilisateurDebut','Eric')
		-&gt;where('DateFin IS NULL', NULL, FALSE)
		-&gt;count_all('activite');
}


Au niveau du controleur

public function index(){   			
	$result['cptAct'] = $this-&gt;users_model-&gt;nbreEnCours();
	$this-&gt;load-&gt;view('home', $result);
}


Au niveau de la vue

&lt;div class="leftt cptDivv"&gt;
	&lt;span class="cptLinee"&gt;&lt;/span&gt;
	&lt;?= $cptAct; ?&gt;
&lt;/div&gt;	



Merci pour votre réponse super claire
cependant j'ai toujours une erreur
upload/1616700910-82236-capture9.jpg
j'ai fais exactement comme vous,
model ; (on doit pas appeler la table faire un select ou from ????)
function nbreEnCours()
		{
			return $this->db
				->where('UtilisateurDebut','Eric')
				->where('DateFin IS NULL', NULL, FALSE)
				->count_all('activite');
		}

controlleur :
public function index(){   			
			$result['cptAct'] = $this->Users_model->nbreEnCours();
			$this->load->view('home', $result);
		} 

view :
<div class="leftt cptDivv">
<span class="cptLinee"> </span>
<?= $cptAct; ?>

cordialement,