Aller au contenu

Cours 5

Annonce

Sauvegarde !

Il y aura une maintenance qui sera faite sur le serveur et pour ne pas perdre de données, il faudra faire une sauvegarde de votre devoir WOW.

PHP

PHP est un langage interprété côté serveur utilisé principalement pour générer du contenu dynamique sur le web.

WordPress utilise PHP pour générer des contenus et les récupérer dans une base de données.

Exécuter du PHP

  • Un fichier PHP doit avoir l’extension .php.
  • Le fichier principal d’un site est souvent index.php (comme en html).
  • Un code PHP est toujours entouré des balises PHP :
<?php
    // Code PHP ici
?>

Hello world

Pour afficher du texte dans la page HTML, on utilise la fonction echo.

<?php
echo "Salut JS !";
?>
document.write("Bonjour monsieur PHP !");

Go on essaye !

Affichons notre fameux et tout premier "Hello world" en PHP !

Commentaires

<?php
// Ceci est un commentaire sur une seule ligne

# Ceci est aussi un commentaire sur une seule ligne

/* Ceci est un commentaire sur
plusieurs lignes. */
?>
// Ceci est un commentaire sur une seule ligne

/* Ceci est un commentaire sur
plusieurs lignes. */

Variables

En PHP, les variables commencent par le symbole $.

<?php
    $title = "1984";          // Chaîne de caractères
    $publication_year = 1949; // Nombre entier
    $price = 9.99;            // Nombre flottant
    $recommended = true;      // Booléen
    $genres = ["science-fiction", "dystopique"]; // Tableau
?>
let title = "1984";          // Chaîne de caractères
let publication_year = 1949; // Nombre entier
let price = 9.99;            // Nombre flottant
let recommended = true;      // Booléen
let genres = ["science-fiction", "dystopique"]; // Tableau

Les tableaux associatifs

<?php
$livre = [
    "titre" => "1984",
    "auteur" => "George Orwell",
    "annee" => 1949
];
echo $livre["titre"]; // 1984
?>
let livre = {
    titre: "1984",
    auteur: "George Orwell",
    annee: 1949
};
console.log(livre.titre); // 1984

Les constantes

<?php
const PI = 3.14159;
echo PI; // 3.14159
?>
const PI = 3.14159;
console.log(PI); // 3.14159

Concaténation

La concaténation permet d'assembler plusieurs chaînes de caractères pour former un texte complet.

En PHP, on utilise le point (.) pour concaténer des chaînes :

<?php
$nom = "JF";
$message = "Salut " . $nom . " !";
echo $message; // Affiche : Salut JF !
?>
let nom = "JF";
let message = "Salut " + nom + " !";
console.log(message);

Interpolation de chaîne

PHP permet d’insérer une variable directement dans une chaîne avec les guillemets ", mais pas avec l'apostrophe '.

<?php
$nom = "JF";

echo "Salut $nom !"; // Affiche : Salut JF !
echo 'Salut $nom !'; // Affiche : Salut $nom !
?>
let nom = "JF";

console.log(`Salut ${nom} !`); // Affiche : Salut JF !
console.log('Salut ${nom} !'); // Affiche : Salut ${nom} !
console.log("Salut ${nom} !"); // Affiche : Salut ${nom} !

En JavaScript on appelle le concept template literals.

Les opérateurs

Opérateurs mathématiques

<?php
$a = 10;
$b = 5;
echo $a + $b; // 15
echo $a - $b; // 5
echo $a * $b; // 50
echo $a / $b; // 2
echo $a % $b; // 0 (modulo)
?>
let a = 10;
let b = 5;
console.log(a + b); // 15
console.log(a - b); // 5
console.log(a * b); // 50
console.log(a / b); // 2
console.log(a % b); // 0 (modulo)

Opérateurs de comparaison

Les opérateurs de comparaison sont souvent utilisés dans les conditions (if).

<?php
$a = 10;
$b = 5;
$a == $b   # Vrai si $a est égal à $b (sans vérifier le type).
$a === $b  # Vrai si $a est égal à $b et du même type.
$a != $b   # Vrai si $a est différent de $b.
$a !== $b  # Vrai si $a est différent de $b ou de type différent.
$a < $b    # Vrai si $a est inférieur à $b.
$a > $b    # Vrai si $a est supérieur à $b.
?>
let a = 10;
let b = 5;
a == b  // Vrai si a est égal à b (sans vérifier le type).
a === b // Vrai si a est égal à b et du même type.
a != b  // Vrai si a est différent de b.
a !== b // Vrai si a est différent de b ou de type différent.
a < b   // Vrai si a est inférieur à b.
a > b   // Vrai si a est supérieur à b.

Structures conditionnelles

if

<?php
$celcius = 100;

if ($celcius < 116) {
  echo "Zut ! Ma meringue italienne ne prend pas";
} elseif ($celcius >= 116 && $celcius <= 118) {
  echo "Juste à point";
} else {
  echo "Fudge ! La meringue italienne cristallise";
}
?>
let celcius = 100;

if (celcius < 116) {
console.log("Zut ! Ma meringue italienne ne prend pas");
} else if (celcius >= 116 && celcius <= 118) {
console.log("Juste à point");
} else {
console.log("Fudge ! La meringue italienne cristallise");
}

switch

<?php
$note = "B";

switch ($note) {
  case "A":
    echo "Excellente note !!!";
    break;
  case "B":
    echo "Bonne note !";
    break;
  default:
    echo "C'est une note";
}
?>
let note = "B";

switch (note) {
  case "A":
    console.log("Excellente note !!!");
    break;
  case "B":
    console.log("Bonne note !");
    break;
  default:
    console.log("C'est une note");
}

PHP ❤ HTML

PHP s'intègre carrément dans du HTML 😱

Code serveur (index.php)
<?php $nom = "JF"; ?>
<!DOCTYPE html>
<html>
<head>
    <title>PHP ♥ HTML</title>
</head>
<body>
    <h1><?php echo $nom . " salut ses <strong>droogies</strong> !"; ?></h1>
</body>
</html>

Rendu côté client (votre navigateur)
<!DOCTYPE html>
<html>
<head>
    <title>PHP ♥ HTML</title>
</head>
<body>
    <h1>JF salut ses <strong>droogies</strong> !</h1>
</body>
</html>

Boucles

for()

<?php
for ($i = 0; $i < 5; $i++) {
  echo "index $i /";
  // ou
  // echo "index " . $i . "/";
}

// Affiche : index 0 /index 1 /index 2 /index 3 /index 4 /
?>
for (let i = 0; i < 5; i++) {
  console.log(`Itération ${i}`);
  // ou
  console.log("Itération " + i);
}

while()

<?php
$i = 0;

while ($i < 5) {
    echo "Valeur : $i <br>";
    $i++;
}
?>
let i = 0;

while (i < 5) {
    console.log("Valeur : " + i);
    i++;
}

foreach()

<?php
$fruits = ["Tomate", "Concombre", "Aubergine", "Piment", "Olive"];

foreach ($fruits as $fruit) {
  echo $fruit . "<br>";
}

// Affiche :  Tomate<br>Concombre<br>Aubergine<br>Piment<br>Olive<br>
?>
let fruits = ["Tomate", "Concombre", "Aubergine", "Piment", "Olive"];
fruits.forEach(
    fruit => console.log(fruit)
);

Fonctions

<?php
function pythagore($a, $b) {
  return sqrt($a ** 2 + $b ** 2);
}

echo pythagore(3, 4); // Affiche : 5
?>
function pythagore(a, b) {
  return Math.sqrt(a ** 2 + b ** 2);
}

console.log(pythagore(3, 4)); // Affiche : 5

Fonctions PHP courantes

Longueur d'une chaîne de caractères

<?php
$texte = "Bonjour";
echo strlen($texte); // 7
?>
let texte = "Bonjour";
console.log(texte.length); // 7

Convertion de chaîne en minuscules ou majuscules

<?php
$texte = "Bonjour";
echo strtolower($texte); // bonjour
echo strtoupper($texte); // BONJOUR
?>
let texte = "Bonjour";
console.log(texte.toLowerCase()); // bonjour
console.log(texte.toUpperCase()); // BONJOUR

Suppression des espaces au début et à la fin d'une chaîne

<?php
$texte = "  Bonjour  ";
echo trim($texte); // "Bonjour"
?>
let texte = "  Bonjour  ";
console.log(texte.trim()); // "Bonjour"

Remplacement de caractères

<?php
$texte = "Bonjour";
echo str_replace("o", "a", $texte); // Banjaur
?>
let texte = "Bonjour";
console.log(texte.replace("o", "a")); // Banjaur

Nombre d'éléments dans un tableau

<?php
$array = [1, 2, 3, 4, 5];
echo count($array); // 5
?>
let array = [1, 2, 3, 4, 5];
console.log(array.length); // 5

Vérifier si une valeur est dans un tableau

<?php
$array = ["pomme", "banane", "orange"];
if(in_array("banane", $array)) {
  echo "Oui";
} else {
  echo "Non";
}
?>
let array = ["pomme", "banane", "orange"];
if(array.includes("banane")) {
  console.log("Oui");
} else {
  console.log("Non");
}

Arrondir un nombre

<?php
$nombre = 4.6;
echo round($nombre); // 5
?>
let nombre = 4.6;
console.log(Math.round(nombre)); // 5

Générer un nombre aléatoire

<?php
echo rand(1, 10); // Nombre entre 1 et 10
?>
console.log(Math.floor(Math.random() * 10) + 1); // Nombre entre 1 et 10

Validation et sécurité des entrées utilisateur

Vérifier si une variable est définie : isset($variable)

Vérifier si une variable est vide : empty($variable)

Convertit les caractères spéciaux (< > & " ') en entités HTML : htmlspecialchars($input)

Formulaire

index.html
<form method="post" action="traitement.php">
    <input type="text" name="nom" placeholder="Votre nom">
    <input type="hidden" name="identifiant" value="23487102948">
    <button type="submit">Envoyer</button>
</form>
traitement.php
<?php
if (isset($_POST['nom'])) {
    echo "Bonjour, " . $_POST['nom'];
}

if (isset($_POST['identifiant'])) {
    echo "Votre id unique est " . $_POST['identifiant'];
}
?>

Sécurité

Injection XSS, ça vous dit quelque chose ? C'est lorsque l'utilisateur entre du contenu malveillant dans un formulaire et que le contenu est affiché directement sur la page.

Par exemple, dans un formulaire, si l'utilisateur entre comme valeur dans le champ prénom la valeur suivante : <script>alert('Hacked!');</script>, cela pourrait poser problème.

Si en php on prend la valeur $_POST['prenom'] et on l'enregistre sur le site, et que si on fait un affichage de cette valeur, n'importe où sur le site, une alerte s'affichera.

Imaginez ce qui pourrait arriver si le script exécute du code malveillant.

<form method="post">
    <!-- L’attaquant entre ceci dans le champ nom :

        "><script>alert("Hacked!")</script>

     -->
    <input type="text" name="nom">
    <button type="submit">Envoyer</button>
</form>
<?php
$nom = $_POST['nom'];

if (isset($nom)) {
    // ❌ Aucune protection
    echo "Bonjour, " . $nom;

    // ⚠️ Ok
    echo "Bonjour, " . htmlspecialchars($nom);

    // ✅ Sécurisé
    echo "Bonjour, " . htmlspecialchars($nom, ENT_QUOTES, 'UTF-8');
}
?>
Avant Apres
"><script>alert("XSS")</script> &quot;&gt;&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;

Les caractères spéciaux sont convertis en entités HTML, empêchant leur exécution !

Récapitulatif

Regardons ce script et analysons son fonctionnement.

<?php
function obtenirMessage($nb, $msg) {
  if ($nb >= 80) {
      return $msg["excellent"];
  } elseif ($nb >= 50) {
      return $msg["moyen"];
  } else {
      return $msg["faible"];
  }
}

$nom_utilisateur = isset($_POST["nom"]) ? htmlspecialchars($_POST["nom"], ENT_QUOTES, 'UTF-8') : "Invité";
$note = rand(0, 100);

$messages = [
    "excellent" => "Bravo, $nom_utilisateur ! Tu as un score impressionnant ! 🎉",
    "moyen" => "Pas mal, $nom_utilisateur. Tu peux encore progresser ! 💪",
    "faible" => "Oups, $nom_utilisateur... Il faut réessayer ! 😅"
];

echo "<h1>Bienvenue, $nom_utilisateur !</h1>";
echo "<p>Ta note est de <strong>$note</strong>%.</p>";
echo "<p>" . obtenirMessage($note, $messages) . "</p>";

$matieres = ["Philosophie", "Mathématiques", "Biologie", "Astronomie"];

echo "<h2>Matières :</h2>";
echo "<ul>";
foreach ($matieres as $matiere) {
    echo "<li>$matiere</li>";
}
echo "</ul>";

$choix_matiere = "Philosophie";

echo "<h2>Matière préférée :</h2>";
switch ($choix_matiere) {
    case "Philosophie":
        echo "<p>Ah, l'art de comprendre le monde.</p>";
        break;
    case "Mathématiques":
        echo "<p>Oh, le langage de la nature !</p>";
        break;
    default:
        echo "<p>Intéressant !</p>";
}
?>

<hr>

<form method="post" action="index.php">
    <label for="nom">Entre ton nom :</label>
    <input type="text" name="nom" id="nom" placeholder="Ex : Nietzsche" required>
    <button type="submit">Envoyer</button>
</form>

*

Exercices

Exercice - PHP
Copenhague