Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [heredoc] Problema con array.

    Ciao a tutti,

    sto cercando di usare per comodità la sintassi heredoc per stampare php e html con questo codice:

    Codice PHP:
    //METTO IL CODICE HTML PER LA CREAZIONE DELLA TABELLA IN UNA HEREDOC
    $lista_campionati = <<<lista_campionati
      ELENCO DEI CAMPIONATI INSERITI 

                  <table>
                    <tr>
                    <td> NOME CAMPIONATO</td>
                    <td>INSERITO IL ALLE</td>
                    </tr>
    lista_campionati;
    //STAMPO IL CODICE HTML PER LE INTESTAZIONI DI TABELLA
    echo $lista_campionati;
    //CREO UN CICLO PER ESTRARRE IL CONTENUTO DELLA SELECT
    while ($risultato_campionato mysql_fetch_array($query_campionato)) {
    $elenco_campionati = <<<elenco_campionati
                  <tr>
                  <td>
    $risultato_campionato['nome']</td>//riga dell'errore
                  <td>dataItaliana(
    $risultato_campionato['data_creazione'])</td>
                  </tr>            
    elenco_campionati;}
    echo 
    $elenco_campionati."</table> 
    ma quando vado a stampare ho un errore alla riga 62 che ho commentato. Mi spiegate per quale motivo?
    se al posto dell'array metto una variabile non ho problemi perché in questo caso non funziona?

    sto sforzandomi di scrivere codice il più possibile chiaro a vs giudizio ci sto riuscendo?

    grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Innanzi tutto il manuale:

    http://it2.php.net/manual/en/languag...syntax.heredoc

    Leggendo possiamo notare che il manuale riferisce che

    Heredoc text behaves just like a double-quoted string, without the double quotes. This means that quotes in a heredoc do not need to be escaped, but the escape codes listed above can still be used. Variables are expanded, but the same care must be taken when expressing complex variables inside a heredoc as with strings.
    Ovvero
    Il testo Heredoc si comporta proprio come una stringa racchiusa tra doppi apici, senza i doppi apici. Questo significa che non è necessario fare l'escape degli apici, ma possono ancora essere utilizzati i codici di escape elencati di seguito. Le variabili sono espanse, ma la stessa cura utilizzata nell'esprimere variabili complesse deve essere utilizzata all'interno di un heredoc come nelle stringhe.
    Tradotto ulteriormente significa che non puoi chiamare funzioni dentro un heredoc e nel caso in cui tu voglia espandere degli array devi racchiuderli tra parentesi graffe.

    Al link del manuale, l'esempio 2 dedicato agli heredoc chiarisce il tutto.

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

  3. #3

    Re: [heredoc] Problema con array.

    Originariamente inviato da alfonsovincenzo
    ma quando vado a stampare ho un errore alla riga 62 che ho commentato. Mi spiegate per quale motivo?
    se al posto dell'array metto una variabile non ho problemi perché in questo caso non funziona?
    Per l'interpolazione di variabili complesse devi usare le parentesi graffe:
    Codice PHP:
    <td>{$risultato_campionato['nome']}</td
    e' tutto spiegato in dettaglio qui: http://php.net/manual/en/language.types.string.php

    Altra cosa: non puoi mettere funzioni negli heredoc.

    Originariamente inviato da alfonsovincenzo
    sto sforzandomi di scrivere codice il più possibile chiaro a vs giudizio ci sto riuscendo?
    No, non molto. La prima cosa da imparare per scrivere bene il codice per web application e' tenere ben separati il codice PHP e il markup HTML. Gli heredoc non sono una buona alternativa a questa pratica e non vanno usati per questo. Devi creare pagine che elaborano i dati e separatamente pagine di template che creano l'output usando quei dati, e non inviare output mentre esegui calcoli ed elaborazioni.

    Inoltre i commenti servono per spiegare le cose che non sono immediatamente comprensibili semplicemente guardando il codice, quelli presenti nel tuo esempio sono abbastanza superflui.

  4. #4

    Re: Re: [heredoc] Problema con array.

    No, non molto. La prima cosa da imparare per scrivere bene il codice per web application e' tenere ben separati il codice PHP e il markup HTML. Gli heredoc non sono una buona alternativa a questa pratica e non vanno usati per questo. Devi creare pagine che elaborano i dati e separatamente pagine di template che creano l'output usando quei dati, e non inviare output mentre esegui calcoli ed elaborazioni.

    Inoltre i commenti servono per spiegare le cose che non sono immediatamente comprensibili semplicemente guardando il codice, quelli presenti nel tuo esempio sono abbastanza superflui.
    grazie ad entrambi appena ho modo provo!

    per la separazione delle pagine che elaborano i dati e quelle che creano output per unire le 2 cose devo usare gli include?

    mi puoi spiegare meglio?

  5. #5

    Re: Re: Re: [heredoc] Problema con array.

    Originariamente inviato da alfonsovincenzo
    grazie ad entrambi appena ho modo provo!

    per la separazione delle pagine che elaborano i dati e quelle che creano output per unire le 2 cose devo usare gli include?

    mi puoi spiegare meglio?
    http://forum.html.it/forum/showthrea...2#post13258792

  6. #6

    Re: Re: Re: Re: [heredoc] Problema con array.

    //METTO IL CODICE HTML PER LA CREAZIONE DELLA TABELLA IN UNA HEREDOC
    $lista_campionati = <<<lista_campionati
    ELENCO DEI CAMPIONATI INSERITI

    <table>
    <tr>
    <td> NOME CAMPIONATO</td>
    <td>INSERITO IL ALLE</td>
    </tr>
    lista_campionati;
    //STAMPO IL CODICE HTML PER LE INTESTAZIONI DI TABELLA
    echo $lista_campionati;
    //CREO UN CICLO PER ESTRARRE IL CONTENUTO DELLA SELECT
    while ($risultato_campionato = mysql_fetch_array($query_campionato)) {
    $elenco_campionati = <<<elenco_campionati
    <tr>
    <td>{$risultato_campionato['nome']}</td>
    <td>{$risultato_campionato['data_creazione']}</td> //riga dell'errore
    </tr>
    elenco_campionati;}
    echo $elenco_campionati."</table>
    adesso l'errore si è spostato alla riga sottostante...

  7. #7

  8. #8
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Purtroppo gli heredoc sono molto sensibili ai caratteri, sia pure invisibili, che si trovano vicino alle etichette.

    Seleziona il codice sotto, copialo e incollalo al posto del tuo. Vedrai che poi funziona.

    Codice PHP:
    //METTO IL CODICE HTML PER LA CREAZIONE DELLA TABELLA IN UNA HEREDOC 
    $lista_campionati =<<<lista_campionati
       ELENCO DEI CAMPIONATI INSERITI
     
       <table> 
          <tr> 
             <td> NOME CAMPIONATO</td> 
             <td>INSERITO IL ALLE</td> 
          </tr>
    lista_campionati;

    //STAMPO IL CODICE HTML PER LE INTESTAZIONI DI TABELLA 
    echo $lista_campionati
    //CREO UN CICLO PER ESTRARRE IL CONTENUTO DELLA SELECT 
    while ($risultato_campionato mysql_fetch_array($query_campionato)) { 
        
    $elenco_campionati = <<<elenco_campionati
            <tr> 
                <td>
    {$risultato_campionato['nome']}</td>
                <td>
    {$risultato_campionato['data_creazione']}</td> //riga dell'errore 
            </tr> 
    elenco_campionati;


    echo 
    $elenco_campionati."</table>"
    Comunque hai un errore di logica nel ciclo while, perchè se la query ti ritorna n righe con n>1, ti verrà visualizzata solo l'ultima, dato che ad ogni esecuzione del ciclo reimposti il contenuto di $elenco_campionati. In più per n=0 ovvero se il ciclo non viene eseguito fai la echo di una variabile non inizializzata. La cosa è accettata da PHP e nel caso specifico non dovrebbe provocare danni, ma sarebbe opportuno evitarlo. Una tele circostanza ti viene segnalata se elevi l'error reporting nel php.ini, o tramite la funzione error_reporting, a strict.

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

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.