Hello all I have a problem that my information is not being send to my view file.
What mistake do I have?
My Model:
public function viewbds($duanid, $bdsid)
{
$q = $this->db->query("SELECT bds.tenduan, bds.id, bds.tieude FROM bds WHERE bds.tenduan=$duanid AND bds.id=$bdsid);
if($q->num_rows() > 0)
return $q->result();
return false;
}
My Controller:
public function chothue($duanid, $bdsid)
{
$this->load->model('admin_model');
$date[chothue] = $this->admin_model->viewbds('$duanid', '$bdsid');
$this->load->view('admin/view', $data);
}
My View: admin/chothue/1/1
<?php foreach($chothue as $d) { ?>
<tr>
<td><?php echo $d->id; ?></td>
<td><?php echo $d->tenduan; ?></td>
<td><?php echo $d->tieude; ?></td>
<?php } ?>
$this->db->query("SELECT bds.tenduan, bds.id, bds.tieude FROM bds WHERE bds.tenduan=$duanid AND bds.id=$bdsid")->get();
Don't forget to use ->get()
AND use active record
$this->db->select("tenduan, id, tieude")->from("bds")->where("tenduan", $duanid)->where("id", $bdsid)->get();
Related
I have a table that store the data of ID, ID Login, Name, etc. But i just want to show the data based on ID Login
Here My Controller :
function index(){
$data['hasil'] = $this->M_user_lapor->index_model();
$this->load->view('v_user_lapor/index', $data);
}
My Model :
function index_model(){
$baca = $this->db->query('select * from user_lapor');
if($baca->num_rows() > 0){
foreach ($baca->result() as $data){
$hasil[] = array(
'id_login'=>$data->id_login,
'id_lapor'=>$data->id_lapor,
'nm_unit'=>$data->nm_unit,
'pic_1'=>$data->pic_1,
'pic_2'=>$data->pic_2,
'ip_wan'=>$data->ip_wan,
'ip_lan'=>$data->ip_lan,
'prov'=>$data->prov,
'icn_sid'=>$data->icn_sid,
'tlkm_sid'=>$data->tlkm_sid,
'status'=>$data->status,
);
}
return json_encode ($hasil);
}else{
return false;
}
}
View :
<tbody>
<?php
if ($hasil){
$no = 1;
$array = json_decode($hasil, true);
foreach($array as $data) {
?>
<tr>
<td class="text-center"><?php echo $no++;?></td>
<td><?php echo $data['nm_unit'];?></td>
<td><?php echo $data['pic_1'];?></td>
<td><?php echo $data['pic_2'];?></td>
<td><?php echo $data['ip_wan'];?></td>
<td><?php echo $data['ip_lan'];?></td>
<td><?php echo $data['prov'];?></td>
<td><?php echo $data['icn_sid'];?></td>
<td><?php echo $data['tlkm_sid'];?></td>
</tr>
<?php
}
}
?>
</tbody>
As you can see, there is id_login inside my model, and i want to show the table data based on it, hopefully somebody can help me because i'm just using the codeigniter, thnaks
I solved this by myself, lol. I just pass the id_login value from session, so i add this to my controller :
function index(){
$id_login = $this->session->id_login;
$data['hasil'] = $this->M_user_lapor->index_model($id_login);
$this->load->view('v_user_lapor/index', $data);
}
And call it to my model :
function index_model($id_login){
$baca = $this->db->query('select * from user_lapor where id_login='.$id_login);
if($baca->num_rows() > 0){
foreach ($baca->result() as $data){
$hasil[] = array(
'id_login'=>$data->id_login,
'id_lapor'=>$data->id_lapor,
'nm_unit'=>$data->nm_unit,
'pic_1'=>$data->pic_1,
'pic_2'=>$data->pic_2,
'ip_wan'=>$data->ip_wan,
'ip_lan'=>$data->ip_lan,
'prov'=>$data->prov,
'icn_sid'=>$data->icn_sid,
'tlkm_sid'=>$data->tlkm_sid,
'status'=>$data->status,
);
}
return json_encode ($hasil);
}else{
return false;
}
}
I'm trying to get all results from my database. I have an OOP structure set up and created a couple functions in my DB class which get all results from the database.
public function getAll($table, $order) {
return $this->actionAll('SELECT *', $table, $order);
}
public function actionAll($action, $table, $order) {
$sql = "{$action} FROM {$table} ORDER BY {$order} DESC";
if(!$this->queryAll($sql)) {
return $this;
}
}
public function queryAll($sql) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
}
In my Page class I'm calling the functions from my DB class and counting the results.
public function get() {
$data = $this->_db->getAll('pages', 'created');
if($data->count()) {
$this->_data = $data->first();
return true;
}
}
Next, in my list PHP file I'm calling the get function from my Page class and creating an foreach loop to loop through the results.
<?php $page = new Page();
$pages = $page->get();
if(empty($pages)): ?>
<p>No pages at the moment</p>
<?php else: ?>
<?php foreach($pages as $item): ?>
<tr>
<td><?php echo e($item->data()->label); ?></td>
<td><?php echo e($item->data()->title); ?></td>
<td><?php echo e($item->data()->slug); ?></td>
<td>Edit</td>
<td>Delete</td>
</tr>
<?php endforeach;
endif; ?>
The problem is that I'm getting the error Invalid argument supplied for foreach(). I don't really understand why I'm getting this error.
I've tried to fix this, but couldn't think of a solution.
Instead of checking empty($pages) check !is_array($pages).
<?php $page = new Page();
$pages = $page->get();
if(!is_array($pages)): ?>
<p>No pages at the moment</p>
<?php else: ?>
<?php foreach($pages as $item): ?>
<tr>
<td><?php echo e($item->data()->label); ?></td>
<td><?php echo e($item->data()->title); ?></td>
<td><?php echo e($item->data()->slug); ?></td>
<td>Edit</td>
<td>Delete</td>
</tr>
<?php endforeach;
endif; ?>
I want to validate and insert multiple records from single form.
I tried following solution, but it is not validating each records.
Yii - multiple records in one form submission
I've used something like this in my form:
<td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
<td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
And in my controller I've done similar to this:
public function actionBatchCreate() {
$models=array();
// since you know how many models
$i=0;
while($i<5) {
$models[]=Modelname::model();
// you can also allocate memory for the model with `new Modelname` instead
// of assigning the static model
}
if (isset($_POST['Modelname'])) {
$valid=true;
foreach ($_POST['Modelname'] as $j=>$model) {
if (isset($_POST['Modelname'][$j])) {
$models[$j]=new Modelname; // if you had static model only
$models[$j]->attributes=$model;
$valid=$models[$j]->validate() && $valid;
}
}
if ($valid) {
$i=0;
while (isset($models[$i])) {
$models[$i++]->save(false);// models have already been validated
}
// anything else that you want to do, for example a redirect to admin page
$this->redirect(array('modelname/admin'));
}
}
$this->render('batch-create-form',array('models'=>$models));
}
<?php
public function actionBatchCreate()
{
$arrItems = array();
$valid = true;
if(isset($_POST['Modelname'])) {
foreach ($_POST['Modelname'] as $i => $notUsed)
{
$objItem = new Modelname();
$objItem->attributes=$_POST['Modelname'][$i];
$valid = $objItem->validate() && $valid;
$arrItems[] = $objItem;
}
if($valid) {
foreach ($arrItems as $objItemValidated) {
$objItemValidated->save();
}
$this->redirect(array('modelname/admin'));
}
}
// optional create a initial empty row in View
if(!count($arrItems)) {
$arrItems[] = new Modelname();
}
$this->render('batch-create-form',array('models'=>$arrItems));
}
View-File batch-create-form.php
<table>
<?php foreach($models AS $i => $item):?>
<tr>
<td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
<td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
<tr>
<?php endforeach;?>
</table>
Here is my model - I want to assign the rows and echo out on the view page e.g
My Model:
public function dsduan(){
$data = array();
$q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
if ($q->num_rows == 1)
{
foreach ($q->result() as $row)
{
$data[]['id'] = $row->id;
$data[]['tenduan'] = $row->tenduan;
$data[]['diachi'] = $row->diachi;
$data[]['quan'] = $row->quan;
}
}
return $data;
}
My Controller:
public function dsduan() {
$this->load->model('madmin');
$duan = $this->madmin->dsduan();
$this->load->view('danhsachduan', $duan);
}
My View:
<td><?php echo $id; ?></td>
<td><?php echo $tenduan; ?></td>
<td><?php echo $diachi; ?></td>
<td><?php echo $quan; ?></td>
How do I properly pass my model array to my controller so that I can echo out on my view?
My view Error:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: id
Filename: views/danhsachduan.php
Line Number: 44
In your model you use two dimensional array:
$data[]['id'] = $row->id;
then in your controller you pass this array to view.
so if you want to access two dimensional array into your view, you have to use foreach loop.
such as change your array in model like following:
$data['id'][] = $row->id;
and in your view access array using:
foreach($id as $res)
{
echo $res;
}
update your view like this
<?php foreach($duan as $d) { ?>
<td><?php echo $d['id']; ?></td>
<td><?php echo $d['tenduan']; ?></td>
<td><?php echo $d['diachi']; ?></td>
<td><?php echo $d['quan']; ?></td>
<?php } ?>
public function dsduan(){
$data = array();
$q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
if ($q->num_rows == 1)
{
foreach ($q->result() as $row)
{
$data['id'] = $row->id;
$data['tenduan'] = $row->tenduan;
$data['diachi'] = $row->diachi;
$data['quan'] = $row->quan;
}
}
return $data;
}
In codeigniter, it use extract() method when binding variable from controller to view. In this case, you can do like this.
In Model
public function dsduan()
{
$data = array();
$q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
if ($q->num_rows)
{
$data = $q->result_array();
}
return $data;
}
In Controller
public function dsduan()
{
$this->load->model('madmin');
$data['duan'] = $this->madmin->dsduan();
$this->load->view('danhsachduan', $data);
}
In View, if your array is multi-dimensional, you can use like this,
<?php foreach($duan as $d) { ?>
<td><?php echo $d['id']; ?></td>
<td><?php echo $d['tenduan']; ?></td>
<td><?php echo $d['diachi']; ?></td>
<td><?php echo $d['quan']; ?></td>
<?php } ?>
if your array is one-dimensional, you can use like this,
<td><?php echo $duan['id']; ?></td>
<td><?php echo $duan['tenduan']; ?></td>
<td><?php echo $duan['diachi']; ?></td>
<td><?php echo $duan['quan']; ?></td>
Have modified your code. Kindly replace below with your code.
Model:
public function dsduan()
{
$q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
if($q->num_rows() > 0)
return $q->result();
return false;
}
Controller:
public function dsduan()
{
$this->load->model('madmin');
$data['duan'] = $this->madmin->dsduan();
$this->load->view('danhsachduan', $data);
}
View:
<?php foreach($duan as $d) { ?>
<td><?php echo $d->id; ?></td>
<td><?php echo $d->tenduan; ?></td>
<td><?php echo $d->diachi; ?></td>
<td><?php echo $d->quan; ?></td>
<?php } ?>
I am currently following tutorials on viewing data from the database using the Framework Codeigniter. There are various ways in which I've learnt. Is there is a more realiable way- either displaying as an array or using 'foreach' in the view file? Any opinions would be helpful.
This is my code using the two methods:
Method 1 Model:
function getArticle(){
$this->db->select('*');
$this->db->from('test');
$this->db->where('author','David');
$this->db->order_by('id', 'DESC');
$query=$this->db->get();
if($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}$query->free_result();
}
}
Method 1 View file:
<?php foreach($article as $row){ ?>
<h3><?php echo $row->title; ?></h3>
<p><?php echo $row->content; ?></p>
<p><?php echo $row->author; ?></p>
<p><?php echo $row->date; ?></p>
<?php } ?>
Method 2 Model:
class News_model extends CI_Model {
function getArticle(){
$this->db->select('*');
$this->db->from('test');
$this->db->where('author', 'David');
$this->db->order_by('id', 'DESC');
$query=$this->db->get();
if ($query->num_rows()>0) {
return $query->row_array();
}
$query->free_result();
}
Method 2 View file:
<?php echo '<h3>' .$article['title'].'</h3>' ?>
<?php echo '<p>' .$article['content']. '</p>' ?>
<?php echo '<p>' .$article['author']. '</p>' ?>
<?php echo '<p>'. $article['date']. '</p>' ?>
I would do it like that:
Model
function getArticle() {
$this->db->select('*');
$this->db->from('test');
$this->db->where('author','David');
$this->db->order_by('id', 'DESC');
return $this->db->get()->result();
}
}
Controller
function get_tests() {
$data = array(
'tests' => $this->mymodel->getArticle()
}
$this->load->view('myview', $data);
}
View
<table>
<?php foreach($tests as $test) { ?>
<tr>
<td><?php echo $test->title;?></td>
<td><?php echo $test->content;?></td>
<td><?php echo $test->author;?></td>
<td><?php echo $test->date;?></td>
</tr>
</table>
If you wish to work with arrays rather than objects, in your model change line
return $this->db->get()->result();
to
return $this->db->get()->result_array();
and in views echo like
<td><?php echo $test['title'];?></td>
P.S.
In your code you use $query->free_result(); but it doesn't even run because when you use keyword return everything after that is not even parsed. It's not necessary to free results anyway.
P.S.2.
You use if($query->num_rows() > 0) { but don't have the else part, it means that it's not necessary too. If you'll return no lines to your foreach statement in the view, you won't get any errors.