Différences
Ci-dessous, les différences entre deux révisions de la page.
Révision précédente | |||
— | formations:devweb_3 [20/10/2022 20:08] (Version actuelle) – Update Caroussel Bootstrap 5 frauline | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Devweb 103 : Le back-end et PHP ====== | ||
+ | |||
+ | Ce second tutoriel a pour but de présenter les bases de développement avec un langage serveur (PHP). | ||
+ | |||
+ | ** Compétences abordées : ** HTML, CSS, SFTP, PHP, Algorithmique basique, formulaires, | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | Il faut avoir suivi le cours [[formations: | ||
+ | |||
+ | ==== Logiciels nécessaires ==== | ||
+ | Il est nécessaire d' | ||
+ | |||
+ | Selon votre système d' | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | Ou FileZilla pour envoyer les fichiers vers votre site perso centrale. | ||
+ | |||
+ | ===== Un début de back-end ===== | ||
+ | |||
+ | ==== Quelques notions de PHP ==== | ||
+ | Le PHP se met dans un fichier portant l' | ||
+ | |||
+ | Pour pouvoir mettre du code PHP, il faut ouvrir et fermer une balise un peu spéciale : ''<? | ||
+ | |||
+ | <file php> | ||
+ | ... | ||
+ | <h1> Coucou </h1> | ||
+ | <? | ||
+ | // Ici je vais mettre mon code PHP | ||
+ | ?> | ||
+ | <b>De nouveau du code HTML ! </b> | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <note tip>Le %%//%% n'est pas mis au hasard, il sert à définir un commentaire (Un bout de code qui ne sera pas interprété par php)</ | ||
+ | |||
+ | Quelques points : | ||
+ | * Chaque instruction est terminée par un **point virgule** | ||
+ | * Les noms de variables commencent par des '' | ||
+ | * Les blocs (boucles, définition de fonction, conditions...) sont entourés par des '' | ||
+ | * Dans les chaines de caractères à guillemets doubles (comme ''" | ||
+ | * Pour **concaténer** (mettre plusieurs chaines de caractères à la suite) on l' | ||
+ | |||
+ | <file html> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | ... | ||
+ | </ | ||
+ | < | ||
+ | <h1> Coucou </h1> | ||
+ | <? | ||
+ | | ||
+ | echo "Salut j'ai " | ||
+ | ?> | ||
+ | <b>De nouveau du code HTML ! </b> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | <note tip>Le PHP va renvoyer simplement du texte et du HTML qui va construire la page, mais de manière dynamique. </ | ||
+ | |||
+ | ==== Comparaison avec python ==== | ||
+ | Quelques commandes de base : | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | | **Description** | ||
+ | | Affichage | <code php>echo " | ||
+ | | Variables | <code php> | ||
+ | texte="Bonjour".variable;</ | ||
+ | texte = " | ||
+ | | Condition | <code php> | ||
+ | // Si vrai | ||
+ | }else{ | ||
+ | // Si faux | ||
+ | } </ | ||
+ | # si vrai | ||
+ | else: | ||
+ | # si faux | ||
+ | </ | ||
+ | |Vérifier l' | ||
+ | |||
+ | ===== Rappels de Html et vos débuts de PHP : ===== | ||
+ | |||
+ | ==== Le formulaire ==== | ||
+ | On va commencer par créer un nouveau fichier contenant un formulaire. | ||
+ | |||
+ | Un formulaire se définit à l'aide de plusieurs balises HTML. Ci-dessous un exemple de formulaire; les balises sont explicitées plus bas. | ||
+ | |||
+ | <file html form.html> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | |||
+ | <form method=" | ||
+ | < | ||
+ | Votre nom : | ||
+ | < | ||
+ | </ | ||
+ | <input type=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * ''< | ||
+ | * '' | ||
+ | * **POST** dans la requête, invisible pour l' | ||
+ | * **GET** dans l'URL (adresse de la page, après un ?), visible par l' | ||
+ | * '' | ||
+ | * ''< | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * ''< | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * **Remarquez que le for="" | ||
+ | |||
+ | |||
+ | |||
+ | Si vous avez bien suivi avant, ou juste testé, ce formulaire basique affiche un champ de texte et un bouton. | ||
+ | |||
+ | ==== Le traitement ==== | ||
+ | |||
+ | Les données du formulaire sont stockées en PHP dans une des deux variables '' | ||
+ | |||
+ | Pour vérifier que le formulaire a bien été envoyé, il suffit de tester l' | ||
+ | |||
+ | <note tip>Le fichier suivant porte l' | ||
+ | <file html traitement.php> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | |||
+ | <?php | ||
+ | if(isset($_POST[' | ||
+ | echo ' | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Suite des commandes de bases de PHP : ===== | ||
+ | |||
+ | Voici les commandes un peu plus complexes mais tout aussi importantes que celles que l'on vient de voir : | ||
+ | On aura l' | ||
+ | |||
+ | ==== Comparaison avec python ==== | ||
+ | |||
+ | | **Description** | ||
+ | | Boucles | <code php> | ||
+ | echo $i; | ||
+ | } </ | ||
+ | print i, # le , pour ne pas passer à la ligne | ||
+ | </ | ||
+ | | ::: | <code php> | ||
+ | $i = 0; | ||
+ | while($i < 10){ | ||
+ | echo $i; | ||
+ | $i++; | ||
+ | } </ | ||
+ | while i < 10: | ||
+ | print i, # le , pour ne pas passer à la ligne | ||
+ | i += 1 | ||
+ | </ | ||
+ | | Tableaux | <code php>$tab = [1, 2, 3, " | ||
+ | | ::: | <code php> | ||
+ | echo $a; | ||
+ | }</ | ||
+ | print a, </ | ||
+ | | Dictionnaires | <code php>$dic = [" | ||
+ | | ::: | <code php> | ||
+ | echo a.′apourvaleur′.b . ' <br /> '; | ||
+ | }</ | ||
+ | print a + " a pour valeur " + str(b) </ | ||
+ | | Fonctions | <code php> | ||
+ | return a+b + $c; | ||
+ | }</ | ||
+ | return a + b + c</ | ||
+ | |||
+ | === Exemple d' | ||
+ | |||
+ | <file php> | ||
+ | <?php | ||
+ | $lol = 4; | ||
+ | function ma_super_fonction(){ | ||
+ | return ' | ||
+ | } | ||
+ | |||
+ | echo "< | ||
+ | echo ma_super_fonction(); | ||
+ | |||
+ | if($lol == 4){ | ||
+ | echo 'Ce bloc est exécuté car lol vaut 4.<br />'; // Affiche Ce bloc est exécuté car lol vaut 4.<br /> | ||
+ | echo "Ce bloc est exécuté car $lol vaut 4."; // Affiche Ce bloc est exécuté car 4 vaut 4. | ||
+ | }else{ | ||
+ | echo 'Ce bloc n\'est pas exécuté !'; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Premier exercice : La galerie ===== | ||
+ | |||
+ | === Keskecé === | ||
+ | On va réaliser une page qui va afficher une galerie d' | ||
+ | |||
+ | === Prérequis === | ||
+ | On va créer un fichier '' | ||
+ | |||
+ | <file php galerie.php> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <link href=" | ||
+ | </ | ||
+ | < | ||
+ | <!-- On va mettre la galerie ici --> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <file css galerie.css> | ||
+ | .miniature{ | ||
+ | max-width: 300px; | ||
+ | max-height: 300px; | ||
+ | } | ||
+ | |||
+ | .conteneur{ | ||
+ | height: 310px; | ||
+ | width: 310px; | ||
+ | text-align: center; | ||
+ | background-color: | ||
+ | float: left; | ||
+ | margin: 20px; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Fonctionnement === | ||
+ | Pour faire notre galerie, on va utiliser une fonction de php qui va nous donner le contenu d'un répertoire. C'est la fonction < | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | $fichiers = glob(' | ||
+ | |||
+ | foreach(fichiers as fichier){ | ||
+ | ?> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | <? | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | En plaçant ce code dans le body, les images devraient normalement s' | ||
+ | |||
+ | |||
+ | ===== Inclusion de fichier ===== | ||
+ | On utilise la fonction ``include(' | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | <file html menu.php> | ||
+ | <ul> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ul> | ||
+ | </ | ||
+ | |||
+ | Et dans toutes vos pages : | ||
+ | |||
+ | <code php> | ||
+ | < | ||
+ | < | ||
+ | .. | ||
+ | </ | ||
+ | < | ||
+ | <?php include(' | ||
+ | Mon contenu spécifique à la page | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== A gérer ===== | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Attention code utilisant Bootstrap 4 et n'est donc plus à jour avec ce que vous avez fait en devweb 2 (Bootstrap 5) | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code html> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta charset=" | ||
+ | <link href=" | ||
+ | <link rel=" | ||
+ | </ | ||
+ | < | ||
+ | |||
+ | <nav class=" | ||
+ | <a class=" | ||
+ | |||
+ | <!-- Bouton affiché uniquement sur mobile pour dérouler --> | ||
+ | <button class=" | ||
+ | <span class=" | ||
+ | </ | ||
+ | |||
+ | <!-- Les éléments de la navbar --> | ||
+ | <div class=" | ||
+ | <ul class=" | ||
+ | <li class=" | ||
+ | <a class=" | ||
+ | </li> | ||
+ | <li class=" | ||
+ | <a class=" | ||
+ | </li> | ||
+ | <li class=" | ||
+ | <a class=" | ||
+ | </li> | ||
+ | <li class=" | ||
+ | <a class=" | ||
+ | </li> | ||
+ | <li class=" | ||
+ | <a href="#" | ||
+ | </li> | ||
+ | </ul> | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | < | ||
+ | <div id=" | ||
+ | <div class=" | ||
+ | |||
+ | <? | ||
+ | $fichiers = glob(' | ||
+ | $i = 0; | ||
+ | foreach(fichiers as fichier){ | ||
+ | |||
+ | ?> | ||
+ | < | ||
+ | <img class=" | ||
+ | </ | ||
+ | <? | ||
+ | $i++; | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | <a class=" | ||
+ | < | ||
+ | < | ||
+ | </a> | ||
+ | <a class=" | ||
+ | < | ||
+ | < | ||
+ | </a> | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <h5 class=" | ||
+ | <button type=" | ||
+ | <span aria-hidden=" | ||
+ | </ | ||
+ | </ | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <div class=" | ||
+ | <img src=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | <div class=" | ||
+ | <button type=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <script src=" | ||
+ | <script src=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Pour aller plus loin ===== | ||
+ | |||
+ | En utilisant vos nouvelles connaissances, | ||
+ | |||
+ | ---- | ||
+ | Cette formation a été réalisée par [[amenasria|Alexandre MENASRIA]] et [[user: | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour la faille xss sur [[http:// | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <script type=" | ||
+ | console.log(' | ||
+ | let colors = [' | ||
+ | |||
+ | function httpGet() | ||
+ | { | ||
+ | fetch(" | ||
+ | console.log(' | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | function changeColor () { | ||
+ | console.log(' | ||
+ | document.body.style.backgroundColor = colors[i%3]; | ||
+ | i += 1; | ||
+ | setTimeout(changeColor, | ||
+ | }; | ||
+ | |||
+ | let i = 0; | ||
+ | changeColor(i, | ||
+ | httpGet() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||