2012-02-25 4 views
22

Desidero passare $data dal controller denominato poll a results_view, tuttavia viene visualizzato un errore variabile non definito.Codeigniter: passaggio dati dal controller per visualizzare

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Poll extends CI_Controller { 

    public function __construct() 
     { 
      parent::__construct(); 
      $this->load->database(); 
      $this->load->helper('form'); 
     } 

    public function index() 
    { 

     $this->load->view('poll_view',$data); 
    } 

    public function vote() 
    { 
     echo "Voting Successfull"; 
     $this->db->insert('votes',$_POST); 
    } 

    public function results() 
    { 
     echo "These are the results"; 
     //$query = $this->db->get('votes'); 
     $data = "hello"; 
     $this->load->view('results_view', $data); 

    } 
} 

Results_view.php

<html> 
<?php echo $data; ?> 
</html> 
+0

$ dati dovrebbero essere array non variabile –

risposta

36

$data dovrebbe essere un array o un oggetto: http://codeigniter.com/user_guide/general/views.html

$data = array(
    'title' => 'My Title', 
    'heading' => 'My Heading', 
    'message' => 'My Message' 
); 

$this->load->view('results_view', $data); 

results_view.php

<html> 
<?php 
//Access them like so 
echo $title.$heading.$message; ?> 
</html> 
+0

Woooww, Thankssssssssssss –

+0

Ho letto l'articolo su come passare i dati da controller a Visualizza in CodeIgniter http: //www.cloudways.com/blog/how-to-pass-data-in-codeigniter/ –

+0

@Lawrence Ho provato il tuo codice, che funziona dopo aver cliccato ma prima Se ho aggiornato la pagina della vista, ho trovato la variabile non definita: qualsiasi aiuto? –

6

La vista non avrebbe chiamato i dati 'Dati'

Il controller dovrebbe includere un indice associativo (non so se è corretto nomenclatura) per i dati ad esempio 'roba' cercando così $data['stuff']

Faresti echo in il punto di vista: echo $stuff; non echo $data;

Sono un violinista dal codice basso ma mi piace molto CodeIgniter quindi scusami se ho questo culo per la cincia.

Un'altra cosa: sicuramente la funzione del tuo costruttore è un po 'inutile. Tutto il caricamento di librerie e helper avviene con il file autoload.

+0

Davvero aiutato :) –

11

In termini semplici,

$ data [ 'a'] a regolatore diventa $ una nella vista. (i dati $ non esisteranno nella tua vista, solo l'indice diventerà disponibile)

ad es.

Controller:  
$data['hello']='hellow world'; 

view: 
echo $hello; 
1

nel controller è possibile passare

$data['poll'] = "Your results"; 

Secondo lei è possibile chiamare

echo $poll; 
4

Hai solo bisogno di creare un array, si utilizzando CodeIgniter giusto?

Esempio sul controller:

$data['hello'] = "Hello, world"; 
$this->load->view('results_view', $data); 

In de pagina "results_view" Devi solo:

<?php echo $hello;?> 

Obs: è possibile creare n dati, basta prestare attenzione in nome e renderlo una matrice.

Obs²: per utilizzare i dati utilizzare la chiave della matrice con un eco.

+0

Ho provato il tuo codice, che funziona dopo aver cliccato ma prima Se ho aggiornato la pagina Sto diventando variabile non definita: ciao. Qualsiasi aiuto? –

1

Ok così ho finalmente risolto.Si dovrebbe davvero avere un modello (che aiuta molto)

nel modello fare qualcosa di simile

Modello

class poll_model extends CI_MODEL { 

function __construct() { 
    $this-load->database(); 
} 

function get_poll { 
    $this->db->query("SELECT * FROM table"); 
    $row = $query->row(); 

    $obj = array(
    'id' => $row->id 
); 
    returb $obj; 
} 
} 

Ora, se si dispone di più di un id dire il nome di sondaggio # voi può aggiungere in serie. Ora nel tuo regolatore fare

class Poll extends CI_Controller { 

public function __construct() 
    { 
     parent::__construct(); 
     $this->load->database(); 
     $this->load->helper('form'); 
     $this->load->model('poll_model'); 
    } 

public function index() 
{ 
    $data["a"] = $this->poll_model->get_poll(); 
    $this->load->view('poll_view',$data); 
} 

E infine, nel VISTA messo

<? echo $a["id"]; ?> 

Questo è un grande aiuto. L'ho capito testando e funziona per me.

0

In regolatore:

$data["result"] = $this->login_model->get_login(); // Get array value from DB.. 

$this->load->view('login-form',$data); // Pass the array to view 

In considerazione:

print_r($result); // print the array in view file 
0

ho visto tutta risposta di cui sopra: ecco quello che faccio quando devo caricare i dati dal controller alla mia vista. per passare i dati alla vista dal controller:

public function your_controller(){ 

    // Your Necessary Code 
    // You have the $data, $data2, $data3 to post to the view. 

    $this->load->view('your_view_directory or view_page',['data'=>$data, 'data2'=>$data2, 'data3'=>$data3... so on ]); 

} 

e al Vista laterale si può semplicemente recuperare i dati: Per visualizzare Si può semplicemente utilizzare echo, print, print_r. E se vuoi scavalcarla, puoi farlo anche tu.

0

puoi farlo in questo modo $ data ['hello'] = "ciao";

in vista echo $ ciao;

0

In regolatore:

funzione pubblica del prodotto() {

$data = array("title" => "Books", "status"=>"Read","author":"arshad","company":"3esofttech", 

"soggetto": "computer science");

dati da modello a controllore

$this->load->model('bookModel'); 
$result = $this->bookModel->getMoreDetailsOfBook(); 

**Add *$result* from model to *$data* array** 
$data['tableRows'] = $result; 

$ dati dal controller a Visualizza

$this->load->view('admin/head',$data); 

e di accedere a file di vista views/user.php

<?php echo $data; 
foreach($tableRows as $row){ echo 
$row['startData']; } ?>