Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    44

    Problema con ciclo while

    Ciao a tutti!
    Ho un problema con un codice di un ciclo while che serve a decidere in che array inserire una tabella del database in base a dei vincoli. Ad esempio nel mio database ho delle tabelle di attività che devono essere inserite in un array in base al giorno, all'ora e al limite del numero di elementi al loro interno.
    Il codice commentato del ciclo è questo:
    Codice PHP:
    //Codice per mostrare tutte le tabelle del db     
    $result mysqli_query("SHOW TABLES FROM my_autonatta") or die(mysqli_error());

    //Array attività giorno 1     
    $array1g1 = array(); //Array con le attività del giorno 1 primo blocco di ore          
    $array2g1 = array(); //Array con le attività del giorno 1 secondo blocco di ore 

    //Array attività 2 giorno 
    $array1g2 = array(); //Array con le attività del giorno 2 primo blocco di ore   
    $array2g2 = array(); //Array con le attività del giorno 2 secondo blocco di ore 
             
    //Ciclo per stabilire se inserire una tabella e dove visualizzarla     
    while($row mysqli_fetch_row($result)) {         
    $tabella $row[0]; //Ottengo nome tabella da esaminare         
    $selezionaTAB mysqli_query("SELECT * FROM `$tabella`"); //Seleziono tutto dalla tabella 
     
    $conta mysqli_num_rows($selezionaTAB); //Conto quante righe ha la tabella         
    //Controllo che le tabelle CLASSI non vengano inserite         
    $tablong strlen($tabella); //Lunghezza tabella (in caratteri)         
    $tabclass substr("$tabella",0,1); //Ottengo primo carattere alfanumerico della tabella         
    //Se il primo carattere è un numero da 1 a 5...         
    if($tabclass == || $tabclass == || $tabclass == || $tabclass == || $tabclass == 5) {             
    echo 
    ""//...non visualizzo nulla         
    } else { //...altrimenti continuo con l'esaminazione 
                
    //Controllo in quale giorno e ora devo visualizzare la tabella e ottengo il limite massimo

    $trovagiorno mysqli_query("SELECT * FROM giorni_attivita WHERE nome = '$tabella'");
    $trovagiorno2 mysqli_query("SELECT * FROM giorni_attivita_2 WHERE nome = '$tabella'");
    $trovalimite mysqli_query("SELECT * FROM limite_tabelle WHERE nome = '$tabella'");

    if(
    $trovagiorno) {                 
    $estrai mysqli_fetch_array($trovagiorno); //Creo funzione di estrazione dati per la tabella 'giorno'                 
    $estraiLIM mysqli_fetch_array($trovalimite); //Creo funzione di estrazione del limite
    $ora $estrai['ora']; //Ottengo ora della tabella                
    $limite $estraiLIM['limite']; //Ottengo limite tabella                
    $giorno 1//Avverto il ciclo che se cado in questa opzione sto esaminando una tabella del primo giorno                              
    } else {                 
    $estrai mysqli_fetch_array($trovagiorno2); //estrazione dati per la tabella 'giorno 2'                
     
    $estraiLIM mysqli_fetch_array($trovalimite); //estrazione del limite                 

    $ora $estrai['ora']; //Ottengo ora della tabella                
     
    $limite $estraiLIM['limite']; //Ottengo limite tabella                 
    $giorno 2//Avverto il ciclo che se cado in questa opzione sto esaminando una tabella del secondo giorno            
     
    }            

     
    //Non visualizzo tabelle generiche             
    if($tabella == "alunni" || $tabella == "limite_tabelle" || $tabella == "giorni_attivita" || $tabella == "giorni_attivita_2") {                 
    echo 
    ""//Se è una di queste tabelle non faccio nulla e proseguo            
    }            

    //Codici per verificare in che ora avviene l'attività            
    //PER VISUALIZZARE ATTIVITA' IN TUTTE LE ORE INSERIRE: 4            
    //PER VISUALIZZARE ATTIVITA' SOLO PRIME TRE ORE INSERIRE: 1            
    //PER VISUALIZZARE ATTIVITA' SOLO ULTIME TRE ORE INSERIRE: 2            
    if($giorno == 1) {                 
    if(
    $conta <= $limite) { //Verifico che il numero di righe sia minore del limite...
    if($ora == 4) {                         
    $array1g1[] = $tabella;                         
    $array2g1[] = $tabella;                     
    } else if(
    $ora == 1) {                         
    $array1g1[] = $tabella;                    
     } else {                         
    $array2g1[] = $tabella;                     
    }                 
    } else {                     
    echo 
    ""//...altrimenti non visualizzo nulla                 
    }            
    } else { 
    //Se il giorno è il secondo...                 
    if($conta <= $limite) { //Verifico che il numero di righe sia minore del limite...
    if($ora == 4) {                         
    $array1g2[] = $tabella;                         
    $array2g2[] = $tabella;                     
    } else if(
    $ora == 1) {                        
     
    $array1g2[] = $tabella;                     
    } else {                         
    $array2g2[] = $tabella;                     
    }                 
    } else {                     
    echo 
    ""//...altrimenti non visualizzo nulla                 
    }            
    }         
    }              

    Per visualizzare le tabelle in una lista utilizzo un foreach.

    Il problema è che quando lancio la pagina nel browser non solo non compare nessuna tabella nella lista, ma in più scompaiono tutti gli elementi html della pagina, lasciando solo lo sfondo.
    Ho provato a usare "or die..." ma non visualizza nessuna scritta di errore

    Era da più di un anno che non lavoravo su questo codice, quindi forse sono io che non mi sono aggiornato con le nuove funzioni php?

    Confido in voi!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    44
    Tralasciando quello che ho scritto nel messaggio soprastante, ho cercato di capire meglio dove fosse il problema e l'ho riscontrato in questa riga di codice:
    Codice PHP:
    $trovagiorno mysql_query("SELECT * FROM `giorni_attivita` WHERE nome = '$tabella'");
    $trovagiorno2 mysql_query("SELECT * FROM `giorni_attivita_2` WHERE nome = '$tabella'");

    if(
    $trovagiorno) {
       
    $estrai mysql_fetch_array($trovagiorno);
       
    $ora $estrai['ora']; //Ottengo ora della tabella
       
    $giorno 1;
    } else {
       
    $estrai mysql_fetch_array($trovagiorno2);
       
    $ora $estrai['ora']; //Ottengo ora della tabella
       
    $giorno 2;

    Stampando i valori della variabile 'ora' tramite un ciclo i valori 'ora' del giorno 1 vengono stampati, mentre quelli del giorno 2 no e rimane uno spazio bianco... come mai?

  3. #3
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    mysql_query() restituisce TRUE in caso di successo e FALSE in caso di errore.
    Quindi a meno che non ci sia un errore nella query $trovagiorno, risulterà sempre TRUE anche se ritorna 0 risultati.
    Utilizza mysql_num_rows() per vedere quanti risultati ottieni.
    eXvision

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    44
    Ho verificato e il problema non è nella query $trovagiorno... ho utilizzato mysql_num_rows e i valori li trova all'interno della tabella... ma non li stampa!

  5. #5
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    ma il tuo problema sarebbe? che non ti entra nell'else del ciclo?
    eXvision

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.