Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. title: Cours IUT : PHP et Formulaires
  2. slug: cours-iut-php-formulaires
  3. date: 2014-12-07
  4. chapo: J’ai été contraint et forcé de parler de PHP.
  5. > A l'origine d'[internet](http://interneeeeet.com/) il existait une personne qui possédait tous les pouvoirs. Cet individu avait le droit de vie ou de mort sur un site internet. Cette personne c'était le **maître du web** aka webmaster.
  6. >
  7. > Il connaissait tous les raccourcis Frontpage, pouvait animer une page à l'aide d'images 16 couleurs en .gif, faire défiler ou clignoter du texte, et transférer ses fichier sur le web à l'aide de logiciels FTP.
  8. >
  9. > Certains de ces individus se sont transformés en développeurs web. D'autres en découpeurs HTML, encore appelés intégrateurs. Ces magiciens du CSS étaient capables de cacher des liens dans des images à l'aide de leur logiciel de prédilection Dreamweaver. Ils ont aussi découvert le copier / coller et l'utilisaient à travers le web pour récupérer du code source JavaScript.
  10. >
  11. > Mais ce temps est révolu...
  12. >
  13. > <cite>*[Manifeste d'un développeur front-end éclairé](http://davidl.fr/manifesto.html)*</cite>
  14. **J’ai été contraint et forcé de parler de PHP.** Un langage que je n’ai pas utilisé depuis 10 ans. Un langage de bidouilles par excellence. Un langage dont la qualité des ressources en ligne est très variable (mais il y a [des pépites](http://www.phptherightway.com/)). *Dur.*
  15. Mais c’est aussi l’occasion d’essayer de transmettre quelque chose que je ne maîtrise pas du tout, entamer la discussion sur l’importance d’apprendre à apprendre tout au long de sa carrière. Sur ce que l’on peut apprendre en aidant sur un forum, sur irc, en participant à une conférence ou en formant. Et de faire une introduction à la mise en forme des formulaires et aux [attributs HTML 5 dédiés](http://www.html5rocks.com/en/tutorials/forms/html5forms/). *Et de troller un peu aussi hein.*
  16. Je compte partir sur un formulaire d’envoi d’email très basique mais qui permet d’explorer les différents concepts (architecture client/serveur, double validation, séparation du code et de l’affichage, etc) :
  17. :::php
  18. <?php
  19. if(isset($_POST['submit'])
  20. && isset($_POST['email'])
  21. && isset($_POST['name'])
  22. && isset($_POST['message'])
  23. /* L'existence est vérifiée pour tout malgré le required en HTML. */) {
  24. $to = "you@example.com";
  25. $from = filter_input(INPUT_POST, 'email');
  26. $name = filter_input(INPUT_POST, 'name');
  27. $message = filter_input(INPUT_POST, 'message');
  28. $subject = "Un email vous a été envoyé via le site !";
  29. $headers = "From: {$from}";
  30. if (strpos($from, '@') !== false) {
  31. $is_email_sent = mail($to, $subject, $message, $headers);
  32. if (!$is_email_sent) {
  33. # Il faudrait ici gérer les erreurs en cas de non-envoi de l'email.
  34. } else {
  35. $success = "Message envoyé. Merci {$name} ({$from}), "
  36. ."nous répondrons rapidement à « {$message} ».";
  37. }
  38. } else {
  39. # Il faudrait ici gérer les erreurs en cas de soumission d'un email
  40. # erroné malgré le type="email" du formulaire.
  41. # L'erreur devrait être affichée proche du champ concerné.
  42. }
  43. }
  44. ?>
  45. <!DOCTYPE html>
  46. <html lang="fr">
  47. <head>
  48. <meta charset="utf-8" />
  49. <title>Envoi d'un message</title>
  50. <style>
  51. #main {
  52. margin: 1em auto;
  53. width: 32em;
  54. }
  55. .form-row {
  56. display: flex;
  57. flex-direction: row;
  58. }
  59. .form-row label {
  60. flex: 1;
  61. }
  62. .form-row input, .form-row textarea {
  63. flex: 4;
  64. }
  65. button {
  66. width: 99%;
  67. margin: 2px;
  68. text-align: center;
  69. }
  70. </style>
  71. </head>
  72. <body>
  73. <div id="main">
  74. <?php if($success): /* Affichage du message de remerciement. */ ?>
  75. <p><?php echo $success; ?></p>
  76. <?php else: /* Sinon affichage du formulaire de soumission. */ ?>
  77. <form method="post">
  78. <fieldset>
  79. <legend>Formulaire de contact</legend>
  80. <div class="form-row">
  81. <label for="name">Nom :</label>
  82. <input type="text" id="name" name="name" required autofocus>
  83. </div>
  84. <div class="form-row">
  85. <label for="email">Email :</label>
  86. <input type="email" id="email" name="email" required>
  87. </div>
  88. <div class="form-row">
  89. <label for="message">Message :</label>
  90. <textarea rows="6" id="message" name="message" required></textarea>
  91. </div>
  92. </fieldset>
  93. <button type="submit" name="submit">Envoyer</button>
  94. </form>
  95. <?php endif /* Fin du if(!$success) correspondant au formulaire. */ ?>
  96. </div>
  97. </body>
  98. </html>
  99. Ce simple exemple nous prendra je l’espère moins de 4 heures à expliquer, c’est pas gagné car à 24 l’inertie de compréhension est terrible. **Il faut que j’arrive à mieux faire en sorte que ceux qui percutent rapidement aident les autres.**
  100. Pour l’instant, les retours sur [les cours](/david/pro/enseignement/) sont vraiment positifs et les étudiants en redemandent ce qui est très motivant. Je vais peut-être avoir une autre classe plus technique pour parler du web mobile (*whatever it means*) lors du premier trimestre 2015.