# Programmation PHP/Les cadriciels/CakePHP/Formulaire

* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
[ Modifier le sommaire ]
Notre première application sera un simple formulaire d'enregistrement d'un nouvel utilisateur. Les données sont stockées dans une table SQL. Elle contiendra le nom, le prénom, l'identifiant, l'adresse email.

## La table utilisateurs

Le numéro 'id' sera la clé primaire et l'identifiant ainsi que l'email seront uniques.
Pour MySQL :
Pour PostgreSQL :

## Le modèle

La table créée, nous devons créer un modèle pour interagir avec. Notre modèle utilisateur lira, insèrera et validera les données de la table mais pour l'instant c'est une ébauche.
Enregistrez ce listing dans app/models/utilisateur.php

## La vue

La vue enregistrer est notre formulaire d'enregistrement de nouveau compte utilisateur.
Enregistrez ce listing dans app/views/users/enregistrer.thtml

## Le contrôleur

Notre contrôleur va contenir les actions associées à notre modèle Utilisateur. Une action correspond à une fonction, notre première action sera d'enregistrer les données.
Un contrôleur CakePHP hérite d'AppController.
L'action enregistrer va devoir vérifier si le formulaire a bien été soumis. Ensuite notre action va sauvegarder ($this->Utilisateur->save($this->params['form']) les données du formulaire (le tableau $this->params['form']) dans la table en utilisant les clés du tableau comme nom de colonne et les valeurs comme une requête SQL d'insertion.
La table SQL doit se nommer d'après le nom de notre modèle (Utilisateur) au pluriel (table utilisateurs).
Enregistrez ce listing dans app/controllers/utilisateurs_controller.php.
La methode Flash permet d'alerter l'utilisateur avec un message puis de renvoyer (2e paramètre) ici vers la vue du formulaire d'enregistrement.

## Essais

Il est temps d'observer le résultat, téléchargez les fichiers sur votre serveur puis allez à l'adresse :
Normalement, votre enregistrement doit être accepté.
Votre table utilisateurs doit contenir :
Réessayer d'enregistrer les mêmes informations, vous obtiendrez un message d'erreur :
Ceci est dû au fait que la colonne identifiant a été définie avec comme contrainte d'être unique en langage SQL. Avec des données différentes l'enregistrement est accepté.

## Conclusion

Dans ce premier exemple, nous avons juste défini une page formulaire simple (notre vue) et sa représentation dans la base de données. Notre traitement (le contrôleur) se limitant juste à vérifier que le formulaire a bien été saisi, tout le reste a été géré automatiquement. L’utilisation d’un cadriciel permet de ne pas avoir à tout réinventer afin d’éviter les erreurs et bugs courants de conception.