Dès l'origine, le php a été pensé pour renvoyer du html classique

Condition

La syntaxe suivante permet d'ajouter des conditions à l'affichage du html :

<!DOCTYPE html>
<html>
<head>
<?php if(isset($title)) { ?>
  <title><?php echo $title;?></title>
<?php } else { ?>
  <title>Titre générique</title>
<?php } ?>

<meta charset="utf-8" />
</head>
<body>
  <p>Texte ici</p>
</body>
</html>

... mais cette syntaxe devient vite illisible. On lui préfère la suivante : 

<!DOCTYPE html>
<html>
<head>
  <?php if(isset($title)) : ?>
    <title><?php echo $title;?></title>
  <?php else : ?>
    <title>Titre générique</title>
  <?php endif ?>
    <meta charset="utf-8"  />
</head>
<body>
     <p>Texte ici</p>
</body>
</html>

Remarquez que les accolades ouvrantes sont remplacées par ":" et que les accolades fermantes sont remplacées par les termes "else" et "endif". Le terme employé pour fermer le bloc va dépendre du nom de la boucle utilisée. On peut donc rencotrer "endfor", "endwhile", ...

Il est également possible de remplacer le code "<?php echo $title;" ?> par 

<?=  $title; ?>

Boucles dans le html

while

Il est également possible d'exécuter des "boucles" dans le html en utilisant la syntaxe suivante :

<?php while($d = $req->fetch(PDO::FETCH_ASSOC)): ?>
<tr>
  <td><?= $d['nid'] ?></td> 
  <td><?= $d['title'] ?></td> 
  <td><a href="/exos/sql1/editnode.php?nid=<?= $d['nid'] ?>">Modifier</a></td>
</tr>
<?php endwhile ?>

foreach

// Affichage si aucun résultat
if(empty($data)): ?>
             <tr>
                <td colspan="4">Aucun résultat trouvé</td>
             </tr>
<?php else:
   foreach($data as $row): ?>
             <tr>
      <?php foreach($row as $cell): ?>
                <td><?php echo $cell; ?></td>
      <?php endforeach; ?>
             </tr>
   <?php endforeach;
endif; ?>

Simple guillemet

Lorsque l'on utilise des simples guillemets dans du code php, les variables et autres fonctions ne sont pas interprétées.

Guillemets

Lorsque l'on utilise des doubles guillemets dans du code php, les variables et autres fonctions sont interprétées. Ex : 

$fruit = "citron";
echo " Le $fruit est mûr";

Attention l'instruction suivante va créer une erreur

$fruit = "citron";
echo " Les $fruits sont mûrs";

... l'interpréteur php cherche la variable $fruits qui n'existe pas.

Solution : encapsuler dans des accolades la variable (wrapping it in curly braces) :

$fruit = "citron";
echo " Les ${fruit}s sont mûrs";

In-string variable

$str = "Hello, \"{$name}\" ";

Attention à  "echapper" les caractères spéciaux et les  variables,.

Sprintf

$str = sprintf('Hello "%s", do you know where is %s ?', $user1, $user2);

... pas besoin d'"echaper" ici

On peut également passer les variables dans un tableau

$vars = [
 'George',
 'Simone'
];
$str = sprintf('Hello "%s", do you know where is %s ?', ...$vars);

Heredoc

Lorsque l'on utilise la syntaxe Heredoc, les variables et autres fonctions sont également interprétées. Ex : 

$foo = new foo();
$name = 'MyName';

echo <<<EOT
Mon nom est "$name". J'affiche quelques $foo->foo.
Maintenant, j'affiche quelques {$foo->bar[1]}.
Et ceci devrait afficher un 'A' majuscule : \x41
EOT;

Attention, le signe qui termine la chaîne de caractères (ici EOT) ne doit pas être précédé d'espace ou de tabulation.

Exercice 1

Faire un mini-site cv avec un seul fichier header.php et un seul fichier footer.php.

Les 4 autres fichiers : index.php, competences.php, experience.php, formation.php feront appel aux fichiers header.php et footer.php (via des "require" par exemple)

Dans la nav (gérée par le fichier header.php), les liens enverront vers les différentes pages (compétences, expérience ...).

Les deux difficultés de l'exercice :

  • savoir utiliser require ou include avec les bons chemins (cf $_SERVER["DOCUMENT_ROOT"])
  • savoir faire des liens dans le menu en partant de la racine de votre "DOCUMENT_ROOT" (<a href=/repertoire/fichier.php>Intitulé du lien</a>)

Pour ceux qui vont vite :
 - optimiser le code pour l'accessibilité et le référencement
 - optimiser l'affichage en utilisant bootstrap

Exercice 2

Faire un mini-site de recettes avec en page d'accueil les dernières recettes publiées.

Un menu, va permettre d'accéder à des thématiques :

Végétarien, De saison, Cheat Meal, Light

Créez 5 fichiers  index.php, vegetarian.php, season.php, cheat.php, light.php qui feront appel aux fichiers head, header et footer

Dans la nav (gérée par le fichier header.php), les liens enverront vers les différentes pages.

Attention : créez une arborescence cohérente. Ne mettez donc pas tous les fichiers dans le même répertoire !

Pour ceux qui vont vite :
 - optimiser le code pour l'accessibilité et le référencement
 - optimiser l'affichage en utilisant bootstrap