RISOLTO Sintassi php-html

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Domehobb88

Utente Attivo
Messaggi
354
Reazioni
66
Punteggio
47
Ciao a tutti, mi serve un piccolo aiutino per comprendere un concetto fondamentale della sintassi che non ho ben afferrato. Sono alle basi e sto seguendo un testo(Jon Ducket) che spiega davvero passo per passo. Per esempio ho questo frammento di codice in un body html con un foreach per scorrere un array associativo:

PHP:
   <?php foreach ($products as $item => $price)  {  ?>
        <tr>
          <td><?= $item ?></td>
          <td>$<?= $price ?></td>
        </tr>
      <?php } ?>


La cosa che non ho capito è perchè devo inserire la parentesi graffa e poi la chiusura dello script( ?>) per poi aprirne uno alla fine con parentesi graffa chiusa, perchè il blocco di codice html viene ripetuto se si trova fuori dallo script php, ecco questo non mi è chiaro.
 
Nello stesso documento hai il codice html che verrà inviato al browser ed il codice php che "fa cose" per scrivere parte di quel codice html. Potresti usare un echo per ogni riga ma così è meno pesante da leggere e fai prima.
 
La cosa che non ho capito è perchè devo inserire la parentesi graffa e poi la chiusura dello script( ?>) per poi aprirne uno alla fine con parentesi graffa chiusa, perchè il blocco di codice html viene ripetuto se si trova fuori dallo script php, ecco questo non mi è chiaro.

Perchè <?php e ?> li utilizzi per delimitare il codice PHP, non necessariamente uno script intero (da inizio a fine file).
La graffa ti serve poichè ti permette di specificare un blocco di codice (per delimitare uno scope). Ciò che sta tra le parentesi graffe di apertura e chiusura fa parte del corpo del ciclo for. E' buona pratica utilizzare le parentesi, anche se tecnicamente non servono quando hai solo un'istruzione da eseguire.

Ti conviene fare pratica immediamente prima di proseguire comunque; se seguirai solo il libro senza scrivere del codice alla fine imparerai meno della metà dei contenuti, inoltre puoi sperimentare modificando il codice.
 
Nello stesso documento hai il codice html che verrà inviato al browser ed il codice php che "fa cose" per scrivere parte di quel codice html. Potresti usare un echo per ogni riga ma così è meno pesante da leggere e fai prima.
Si grazie per la risposta, la sintassi abbreviata per l'echo rende meno pesante è vero, ed il fatto che viene eseguito php lato server mi è abbastanza chiaro, ma non ho capito bene come viene eseguito il blocco di codice dopo la parentesi graffa aperta, cioè perchè il codice html si ripete per le volte dettate dalla condizione del for, se questo blocco si trova fuori dallo script
Perchè <?php e ?> li utilizzi per delimitare il codice PHP, non necessariamente uno script intero (da inizio a fine file).
La graffa ti serve poichè ti permette di specificare un blocco di codice (per delimitare uno scope). Ciò che sta tra le parentesi graffe di apertura e chiusura fa parte del corpo del ciclo for. E' buona pratica utilizzare le parentesi, anche se tecnicamente non servono quando hai solo un'istruzione da eseguire.

Ti conviene fare pratica immediamente prima di proseguire comunque; se seguirai solo il libro senza scrivere del codice alla fine imparerai meno della metà dei contenuti, inoltre puoi sperimentare modificando il codice.
Grazie mille davvero per la risposta. però non mi è chiaro questo aspetto, cioè ad esempio se scrivessi il codice in questo modo il parser php troverebbe del codice non valido tra i tag di apertura e chiusura, quindi bisogna sempre specificare la chiusura dello script per ogni istruzione php? Perdonatemi ma sono davvero alle basi. Comunque mi è più chiaro adesso, infatti non sto proseguendo con il libro proprio per questo, perchè non mi sono chiare delle cose e sto provando un pò il codice dei vari esempi :)

PHP:
   <? php foreach ($products as $item => $price)  {
        <tr>
          <td><?= $item ?></td>
          <td>$<?= $price ?></td>
        </tr>
    } ?>
 
Esiste anche la sintassi:
PHP:
<?php foreach ($products as $item => $price): ?>
    <tr>
        <td><?php echo $item ?></td>
        <td>$<?php echo $price ?></td>
    </tr>
<?php endforeach ?>

a mio avviso più elegante e leggibile.
 
non ho capito bene come viene eseguito il blocco di codice dopo la parentesi graffa aperta
in diversi linguaggi di programmazione (c, java...) si usano le graffe per racchiudere la parte di codice del tuo ciclo for, do-while o dentro un if-else, funzione, classe...
Occhio però che prima di imparare il php devi avere almeno le basi sull'html. Hai compreso che lì stai scrivendo le righe e le singole celle di ogni riga di una tabella?
 
Ultima modifica:
Esiste anche la sintassi:
PHP:
<?php foreach ($products as $item => $price): ?>
    <tr>
        <td><?php echo $item ?></td>
        <td>$<?php echo $price ?></td>
    </tr>
<?php endforeach ?>

a mio avviso più elegante e leggibile.

Molto più leggibile grazie per la risposta! :)
 
però non mi è chiaro questo aspetto, cioè ad esempio se scrivessi il codice in questo modo il parser php troverebbe del codice non valido tra i tag di apertura e chiusura, quindi bisogna sempre specificare la chiusura dello script per ogni istruzione php? Perdonatemi ma sono davvero alle basi.

Il fatto che sei agli inizi non è un problema, ci siamo passati tutti. 😀
Rinnovo però il consiglio di fare delle prove direttamente, perchè tutti questi dubbi derivano dal non aver - a mio avviso - toccato effettivamente del codice.
Su Windows puoi installare XAMPP, non devi configurare praticamente nulla.

Se vuoi fare delle prove semplici con script piccoli puoi anche utilizzare un interprete online come questo.

Comunque per risponderti: se fai <? php ottieni ovviamente un errore dall'interprete PHP, puoi anche testare con la sandbox online linkata sopra.
Le tags <?php ?> sono per delimitare un codice in PHP. Ciò che sta al di fuori non viene interpretato come codice PHP; ecco perchè l'HTML lo vai a scrivere fuori.

Prima di approcciare però PHP devi avere una base minima di HTML e soprattutto, cosa ancora più importante, avere delle basi teoriche: per esempio, cosa differenzia un linguaggio backend da uno frontend?
I linguaggi frontend vengono tutti interpretati dal tuo browser, per esempio HTML, CSS, JavaScript. Uno backend è PHP, ma ne esistono tanti altri (Java, Go, NodeJS,...).

Come diceva Dumah sopra, l'interprete PHP elabora il codice PHP da te scritto; l'elaborazione avviene direttamente sul server. Quando ricevi la pagina internet, si tratta di una pagina già elaborata e il tuo browser si occupa di elaborare i linguaggi frontend (e formattare/renderizzare il contenuto, applicare il CSS etc etc).

Quindi, le tags PHP le devi aprire e chiudere quando scrivi del codice PHP, se devi scrivere del codice HTML hai due strade. Usare "echo" per stampare una stringa (che poi appunto sarà presente nella pagina internet che riceverai) oppure chiudere il tag PHP e scrivere direttamente il codice HTML.

Per esempio:
PHP:
<table style="border:1px solid black;">

<?php
    for($i = 1; $i <= 10; $i++):
        echo "<tr>";
        for($j=1; $j <= 10; $j++):
            echo "<td>".($i*$j)."</td>";
        endfor;
        echo "<tr>";
    endfor; 
?>
</table>

Produce lo stesso risultato di:

PHP:
<table style="border:1px solid black;">
    <?php for($i = 1; $i <= 10; $i++): ?>
        <tr>
            <?php for($j=1; $j <= 10; $j++): ?>
                <td><?php echo $i*$j; ?></td>
            <?php endfor; ?>
        </tr>
    <?php endfor; ?> 
</table>

Il risultato prodotto, per farti capire poi quello che riceve il tuo browser web, sarà:
HTML:
<table style="border:1px solid black;">
            <tr>
                            <td>1</td>
                            <td>2</td>
                            <td>3</td>
                            <td>4</td>
                            <td>5</td>
                            <td>6</td>
                            <td>7</td>
                            <td>8</td>
                            <td>9</td>
                            <td>10</td>
                    </tr>
            <tr>
                            <td>2</td>
                            <td>4</td>
                            <td>6</td>
                            <td>8</td>
                            <td>10</td>
                            <td>12</td>
                            <td>14</td>
                            <td>16</td>
                            <td>18</td>
                            <td>20</td>
                    </tr>
            <tr>
                            <td>3</td>
                            <td>6</td>
                            <td>9</td>
                            <td>12</td>
                            <td>15</td>
                            <td>18</td>
                            <td>21</td>
                            <td>24</td>
                            <td>27</td>
                            <td>30</td>
                    </tr>
            <tr>
                            <td>4</td>
                            <td>8</td>
                            <td>12</td>
                            <td>16</td>
                            <td>20</td>
                            <td>24</td>
                            <td>28</td>
                            <td>32</td>
                            <td>36</td>
                            <td>40</td>
                    </tr>
            <tr>
                            <td>5</td>
                            <td>10</td>
                            <td>15</td>
                            <td>20</td>
                            <td>25</td>
                            <td>30</td>
                            <td>35</td>
                            <td>40</td>
                            <td>45</td>
                            <td>50</td>
                    </tr>
            <tr>
                            <td>6</td>
                            <td>12</td>
                            <td>18</td>
                            <td>24</td>
                            <td>30</td>
                            <td>36</td>
                            <td>42</td>
                            <td>48</td>
                            <td>54</td>
                            <td>60</td>
                    </tr>
            <tr>
                            <td>7</td>
                            <td>14</td>
                            <td>21</td>
                            <td>28</td>
                            <td>35</td>
                            <td>42</td>
                            <td>49</td>
                            <td>56</td>
                            <td>63</td>
                            <td>70</td>
                    </tr>
            <tr>
                            <td>8</td>
                            <td>16</td>
                            <td>24</td>
                            <td>32</td>
                            <td>40</td>
                            <td>48</td>
                            <td>56</td>
                            <td>64</td>
                            <td>72</td>
                            <td>80</td>
                    </tr>
            <tr>
                            <td>9</td>
                            <td>18</td>
                            <td>27</td>
                            <td>36</td>
                            <td>45</td>
                            <td>54</td>
                            <td>63</td>
                            <td>72</td>
                            <td>81</td>
                            <td>90</td>
                    </tr>
            <tr>
                            <td>10</td>
                            <td>20</td>
                            <td>30</td>
                            <td>40</td>
                            <td>50</td>
                            <td>60</td>
                            <td>70</td>
                            <td>80</td>
                            <td>90</td>
                            <td>100</td>
                    </tr>
     
</table>

che sono le tabelline dall'1 al 10.

Schermata del 2023-02-27 15-10-32.webp

Nel mondo reale poi non utilizzerai in realtà mai PHP + HTML scritti in questo modo, ma farai uso di framework (però occupati solo di imparare HTML e PHP, al momento).
 
Beh che dire, grazie davvero perchè ho capito, avevo già installato xampp e stavo già provando qualcosina, però grazie alla tua spiegazione ho capito come avviene il tutto, praticamente xamp avvia un server web apache che elabora php e restituisce la pagina al browser avendo interpretato tutto il codice tra i tag <?php ?> e fornisce l'elaborazione in output.
Per quanto riguarda html qualcosina la stavo imparando, Liste, tabelle, form e molto altro ovviamente con applicati qualcosina di CSS, al momento molto basilari ma devo dire che ho iniziato da poco.
 
Beh che dire, grazie davvero perchè ho capito, avevo già installato xampp e stavo già provando qualcosina, però grazie alla tua spiegazione ho capito come avviene il tutto, praticamente xamp avvia un server web apache che elabora php e restituisce la pagina al browser avendo interpretato tutto il codice tra i tag <?php ?> e fornisce l'elaborazione in output.
Per quanto riguarda html qualcosina la stavo imparando, Liste, tabelle, form e molto altro ovviamente con applicati qualcosina di CSS, al momento molto basilari ma devo dire che ho iniziato da poco.

Di niente!
Si è corretto, tecnicamente è l'interprete PHP ad elaborare il codice e non il server web.
Puoi anche lanciare uno script direttamente da riga di comando; non uso XAMPP da anni, ma dall'interfaccia mi sembra permetta di lanciare il terminale/cmd; lanciandolo puoi invocare direttamente l'interprete php con php <nomefile.php>. Va bene se devi lanciare un singolo script.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top