Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    escludere elemento da un ciclo

    Ciao a tutti,
    ho un ciclo
    Codice PHP:
    <?php do { ?>"elemento" + "separatore"<?php } while ($row_gallery mysqli_fetch_assoc($gallery)); ?>
    che prende i dati da un db e crea una lista di elementi con separatore affianco.

    Mi chiedo se sia possibile fare in modo che, quando si tratta dell'ultimo record, venga visualizzato solo "elemento" e non "separatore".

    Grazie a tutti in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Un metodo facile facile:

    Codice PHP:
    <?php
    $separatore 
    '; <br>';
    $output '';

    foreach (
    range(010) as $elemento)
        
    $output .= $elemento $separatore;
    if (!empty(
    $output))
        
    $output substr($output0strlen($output) - strlen($separatore));

    echo 
    $output;
    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    codice:
    <?php
    $totale=mysql_num_rows($gallery);//devi necessariamente sapere quante sono, immagino che $gallery sia la query
    $i=0;
    do{
    if($i==$totale){//se è l'ultimo
    ?>"elemento"
    }else{//altrimenti
    ?>"elemento" + "separatore"<?php
    }
    ++$i;
    }while ($row_gallery = mysqli_fetch_assoc($gallery)); ?>
    Questo dovrebbe fare al caso tuo, immagino che il ciclo do...while ti serva e che tu abbia previsto i tuoi dovuti controlli riguardo al fatto che la query restituisca sempre almeno un elemento. Altrimenti usa semplicemente un for, in questo caso anche la condizione "se è l'ultimo" risulta più facile.

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Simo, permettimi una piccola correzione allo stile. E' superfluo chiamare due volte elemento in entrambi i rami dell'if. Portalo all'esterno. Puoi comunque sfruttare il ciclo for per ridurre il codice e migliorare la leggibilità. Gli apri e chiudi di PHP non mi piacciono molto, ma lasciamoli stare.

    Codice PHP:
    <?php
    $totale 
    mysql_num_rows($gallery); //devi necessariamente sapere quante sono, immagino che $gallery sia la query
    for($i 0;$row_gallery mysqli_fetch_assoc($gallery); $i++){?>
        "elemento"
        <?php  
        
    if ($i != $totale) {//se non è l'ultimo
            
    ?> + "separatore"<?php
        
    }
    }
    ?>
    E' comunque hai piena ragione a ricordare all'amico che deve utilizzare il ciclo con test pre corpo e non post corpo. Mi chiedo come faccia a funzionargli. Praticamente il primo elemento gli arriva vuoto. Forse avrà gli errori php disabilitati.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    Quoto in pieno quanto detto da Grino!
    Ciao!

  6. #6
    Grazie per l'aiuto Grino, avrei dovuto premettere che non sono un programmatore esperto.
    Ho provato il codice che mi hai consigliato e mi da il seguente errore "WARNING: MYSQL_NUM_ROWS() EXPECTS PARAMETER 1 TO BE RESOURCE, OBJECT GIVEN IN..." ma comunque riesco a vedere la stampa del risultato: "separatore" è stato eliminato però dal primo risultato e non dall'ultimo del ciclo.

    Ho notato che usi
    Codice PHP:
    $totale mysql_num_rows($gallery); 
    e cercando sul forum leggo che sarebbe corretto
    Codice PHP:
    $totale mysqli_num_rows($gallery); 
    e in effetti così non da più l'errore però in questo caso vedo "separatore".

    Perdona l'ignoranza, mi potresti dire cos'è test pre corpo?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    mysql e mysqli sono due diverse estensioni di php per interagire con il mysql, in base alle necessità usi una o l'altra e di conseguenza una o l'altra funzione.

    Per test pre corpo si intende fare i controlli prima del codice.
    Nel tuo caso usi un ciclo do...while. Tale ciclo esegue sempre almeno una volta il codice, poiché prima lo esegue, poi verifica la condizione e se è rispettata lo ripete finché non diventa false. Un ciclo for o while invece prima controllano che la condizione sia vera, e in tal caso continuano a ripetere l'esecuzione del codice finché la condizione non diventa falsa.

    Il ciclo do...while lo devi usare se sei certo che almeno una volta (la prima) tu debba fare quella cosa a prescindere da qualunque controllo imporrai per le volte successive.

  8. #8
    Grazie Simo. Per il fatto che "separatore" lo elimina dal primo risultato del ciclo e non dall'ultimo? Ho provato anche a invertire l'ordine dalla query al database "DESC" invece che "ASC" ma non cambia niente.

    L'errore "WARNING: MYSQL_NUM_ROWS() EXPECTS PARAMETER 1 TO BE RESOURCE, OBJECT GIVEN IN..." è dato dal fatto che non faccio fare i test pre corpo?

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    con calma.
    il tuo errore è dato dal fatto che $gallery non gli va bene, questo perché in base a come formuli la query devi usare mysql o mysqli.

    il discorso dei controlli "pre corpo" è un discorso di logica del programma, non è che devono o non devono essere fatti, in base alla tua struttura e a quello che ti serve usi un ciclo che li fa o uno che non li fa.

  10. #10
    Non mi ero accorto prima, con il codice che mi avete suggerito perdo un ciclo, cioè i valori che mi deve restituire sono 5 e ne vedo solo 4.

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.