Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Funzione count array

  1. #1

    Funzione count array

    Salve a tutti, ho un problema che non riesco a risolvere. Sto iniziando ad utilizzare codeigniter per delle interfacce web che mi servono a lavoro. Si tratta di semplici operazione CRUD.

    Adesso mi trovo alcuni errori quando il db è vuoto. Ad esempio nella visualizzazione se la tabella da visualizzare non contiene dati nella pagina di visualizzazione mi dice:

    Message: Invalid argument supplied for foreach()

    A questo punto avevo pensato di contare i valori presenti nell'array che passo alla view, se i valori sono > di zero non procede con il ciclo e posta un messeggio. Altrimenti continua con il ciclo.

    vi posto un pò di codice per farvi capire meglio la situazione.


    Controller
    codice:
    	$this->load->model('archivio_model');
    	$data['rows'] = $this->archivio_model->getAll($config['per_page'], $this->uri->segment(3));
    	$this->load->view('visualizzazione', $data);
    Pagina visualizzazione (view)
    codice:
    	if(count($rows) == 0) {
    		echo'<h3>Nessun risultato utile</h3>'; 
    	}
    	else {
                   procedo con le altre operazioni........
    C'è un altro modo per poter risolvere il problema? in questo momento non ho dati nella tabella, quindi il count dovrebbe restituire 0 ma comunque non va.

    Qualche suggerimento?

    Grazie

  2. #2
    Un uppettino...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    70
    $rows dov'è definito?

    se $rows non è un array count() torna 1 ...

  4. #4
    innanzitutto il controllo lo farei effettivamente sul ">"

    Codice PHP:
    if( count($rows) > ) {

    //procedo con le altre operazioni........

    } else {
     echo
    '<h3>Nessun risultato utile</h3>'


    non conosco nel dettaglio codeigniter, ma in molti framework fare un controllo di ugualianza su 0 può creare problemi!

  5. #5
    Allora ho fatto un pò di test suggeriti da maje ma non va...

    vi posto il codice ripulito da html, pensavo di essermi incartato ma anche così non va...


    CONTROLLER
    codice:
    $campo = $this->input->post('ricerca');
    $valore = $this->input->post('attore');
    $this->load->model('search_model');
    $data['rows'] = $this->search_model->ricerca_singola($campo, $valore );		
    $this->load->view('test', $data);
    MODEL
    codice:
    function ricerca_singola($campo, $valore) {
    		
    $data = $this->db->query("Select * From archivio Where $campo  LIKE '%$valore%' ");
    
    if($data->num_rows()>0){
    return $data->result_array();
    }
    else{			
    return false;
    }						
    $data->free_result();
    }
    VIEW
    codice:
    if(count($rows) > 0 ){
        foreach($rows as $r) {
        echo "<h1>
    
    ".$r['id']."</p></h1>";
        }	
    }
    else{
    	echo'VUOTO';
    }

    Purtroppo il problema persiste...
    Questo anche in risposta alla domanda se è un vettore o meno.

    Grazie per l'aiuto

  6. #6
    come ti suggeriva civre probabilmente non definisci $rows, ma definisci $data['rows']. Alla vista passi l'array $data, dunque io proverei così:

    Codice PHP:
    if(count($data['rows']) > ){
        foreach(
    $data['rows'] as $r) {
        echo 
    "<h1>

    "
    .$r['id']."</p></h1>";
        }    
    }
    else{
        echo
    'VUOTO';


  7. #7
    Allore se faccio come sugeritomi da te il warning è su data

    codice:
    A PHP Error was encountered
    
    Severity: Notice
    
    Message: Undefined variable: data
    
    Filename: views/test.php
    
    Line Number: 2
    
    VUOTO
    però mi stampa la stringa VUOTO, quindi va nell'else...

    se invece il controllo lo effettuo come indicavo prima il warning è sul foreach

    codice:
    A PHP Error was encountered
    
    Severity: Warning
    
    Message: Invalid argument supplied for foreach()
    
    Filename: views/test.php
    
    Line Number: 4
    ma essendo nel foreach il controllo non va a buon fine....

  8. #8
    si infatti, come ti ho suggerito non è corretto, mi sono confuso con zend scusami :

    http://codeigniter.com/user_guide/general/views.html

    Però tu in effetti lo fai già nel model il controllo sul numero di record, dunque nella view potresti anche solo mettere un qualcosa del tipo:

    Codice PHP:

    if( false != $rows ){

        foreach(
    $rows as $r) {
        echo 
    "<h1>

    "
    .$r['id']."</p></h1>";
        }    

    } else{
        echo 
    'VUOTO';

    Andrebbe sistemato un attimo ma vediamo se così funziona

  9. #9
    Pare che così vada bene... Potrebbe esserci altro modo per verificare se $rows è piena? non capisco come mai con count ho problemi...

    Grazie per le dritte....

  10. #10
    con count hai problemi perchè molto probabilmente quando il result set è vuoto restituisci false, e chiaramente applicare count a false non ha senso.

    Visto che il controllo sul numero di record lo fai già sul model, nella vista puoi lasciare il controllo su false: potresti anche usare "is_array()" su $rows, ma nella sostanza non cambia molto, e probabilmente il controllo su false è leggermente più veloce.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.