From 419ec9ba9abd0d6ac0e761c3c1e3eb7d63b239cf Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 30 Aug 2015 00:15:35 +0200 Subject: [PATCH] Design patterns et MySQL+PHP --- design_patterns/README.md | 10 +++ un_peu_plus_loins/comment_jouer_avec_mysql.md | 42 +++++++++++ un_peu_plus_loins/du_sql.md | 1 + un_peu_plus_loins/exercice.md | 2 +- un_peu_plus_loins/introduction.md | 17 +++++ un_peu_plus_loins/larchitecture_generale.md | 27 +++++++ un_peu_plus_loins/les_base_de_donnees.md | 18 +++++ un_peu_plus_loins/les_variables_globales.md | 3 + un_peu_plus_loins/mysql.md | 15 ++++ un_peu_plus_loins/php.md | 73 +++++++++++++++++++ 10 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 design_patterns/README.md create mode 100644 un_peu_plus_loins/comment_jouer_avec_mysql.md create mode 100644 un_peu_plus_loins/du_sql.md create mode 100644 un_peu_plus_loins/introduction.md create mode 100644 un_peu_plus_loins/larchitecture_generale.md create mode 100644 un_peu_plus_loins/les_base_de_donnees.md create mode 100644 un_peu_plus_loins/mysql.md create mode 100644 un_peu_plus_loins/php.md diff --git a/design_patterns/README.md b/design_patterns/README.md new file mode 100644 index 0000000..ab6b7d1 --- /dev/null +++ b/design_patterns/README.md @@ -0,0 +1,10 @@ +# Design patterns + +On traduit ça par *patrons de conception*. Ce sont des façons de programmer éprouvées et réputées pour apporter des propriétés comme la cohérence, la robustesse, la réutilisabilité, etc. Ils ont vocation à être indépendants du langage de programmation cible. + +Un patron de conception est issu de l'expérience des concepteurs de logiciels2. Il décrit sous forme de diagrammes un arrangement récurrent de rôles et d'actions joués par des modules d'un logiciel, et le nom du patron sert de vocabulaire commun entre le concepteur et le programmeur3. D'une manière analogue à un motif de conception en architecture, le patron de conception décrit les grandes lignes d'une solution, qui peuvent ensuite être modifiées et adaptées en fonction des besoins4. + +Les patrons de conception décrivent des procédés de conception généraux et permettent en conséquence de capitaliser l'expérience appliquée à la conception de logiciel. Ils ont une influence sur l'architecture logicielle d'un système informatique. + +[Wikipedia](https://fr.wikipedia.org/wiki/Patron_de_conception) + diff --git a/un_peu_plus_loins/comment_jouer_avec_mysql.md b/un_peu_plus_loins/comment_jouer_avec_mysql.md new file mode 100644 index 0000000..cacdb92 --- /dev/null +++ b/un_peu_plus_loins/comment_jouer_avec_mysql.md @@ -0,0 +1,42 @@ +# Comment jouer avec MySQL ? + +Au même titre qu'un serveur web, un serveur de mail, ou un serveur SVN, MySQL est un service qui écoute sur un port. + +Typiquement, quand vous lancer MySQL, un socket est créé afin que vous puissiez communiquer avec. + +Pour accéder un serveur MySQL, vous devez ouvrir une connexion TCP vers l'adresse IP du serveur MySQL en indiquant le port d'écoute. Par défaut le port est 3306. + +Une fois connecté à MySQL, vous devez communiquer avec le langage SQL. + +Voici un exemple en ligne de commande : + +```bash +$ mysql -uroot -proot -hlocalhost +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 1457 +Server version: 5.5.39-1-log (Debian) + +Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| SRC2_2011_12_07 | +| SRCe2c | +| bookstore_schemas | +| brightgamepanel | +| cmg_sf_preprod | +| cmg_sf_preprod2 | +| cmg_sf_preprod3 | +| cmsintaller | ++--------------------+ +9 rows in set (0.02 sec) +``` diff --git a/un_peu_plus_loins/du_sql.md b/un_peu_plus_loins/du_sql.md new file mode 100644 index 0000000..271ce93 --- /dev/null +++ b/un_peu_plus_loins/du_sql.md @@ -0,0 +1 @@ +# Du SQL ?! diff --git a/un_peu_plus_loins/exercice.md b/un_peu_plus_loins/exercice.md index a5234d0..031e22e 100644 --- a/un_peu_plus_loins/exercice.md +++ b/un_peu_plus_loins/exercice.md @@ -33,9 +33,9 @@ Mettez un système qui enregistre l'IP de l'internaute dans un fichier Vous devr Une liste de fonctions qui pourraient vous intéresser : -- ```isset``` - ```file_get_contents``` - ```file_put_contents``` +- ```fopen``` et ```fwrite``` ## Un peu d'ergonomie… diff --git a/un_peu_plus_loins/introduction.md b/un_peu_plus_loins/introduction.md new file mode 100644 index 0000000..2caa8aa --- /dev/null +++ b/un_peu_plus_loins/introduction.md @@ -0,0 +1,17 @@ +# Introduction + +Une base de données est un système logiciel qui permet d'enregistrer et de lire des informations. + +Ces informations sont structurées : +* dans des base de données +* puis dans des tables +* puis dans attributs +* et sont typées + +![](https://user.oc-static.com/files/59001_60000/59541.png) +Source : [Openclassrooms](https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/presentation-des-bases-de-donnees-2) + +Elles peuvent avoir des relations entre elles : +* un article de blog est lié à une ou plusieurs catégories +* des catégories peuvent appartenir à des sections +* des commentaires sont déposés pour des articles diff --git a/un_peu_plus_loins/larchitecture_generale.md b/un_peu_plus_loins/larchitecture_generale.md new file mode 100644 index 0000000..49ae6e5 --- /dev/null +++ b/un_peu_plus_loins/larchitecture_generale.md @@ -0,0 +1,27 @@ +# L'architecture générale + +Une installation de MySQL permet d'identifier un premier niveau de données : les bases. Par exemple, si on doit créer 5 sites internet, on pourra imaginer avoir une base de données par site. + +Dans une base de données sont définies des tables. Dans le cas d'un blog, on pourrait avoir ces tables : + +* utilisateurs +* articles +* catégories +* tags +* commentaires + +Une tables est caractérisée par des champs (nommés colonnes ou attributs). Ces champs ont bien sûr un nom, mais aussi plein de caractéristiques : +* le type (entier, chaine, date, etc.) +* la valeur par défaut +* si c'est un index ou pas +* ... + +On a enfin une gestion des permissions fines qui permet d'accorder à un utilisateur : +* quelle(s) bases de données il peut accéder +* quelle(s) tables il peut accéder +* quel(s) champ(s) il peut accéder + +L'accès se détermine par : +* le droit de lire +* le droit d'écrire + diff --git a/un_peu_plus_loins/les_base_de_donnees.md b/un_peu_plus_loins/les_base_de_donnees.md new file mode 100644 index 0000000..17064cf --- /dev/null +++ b/un_peu_plus_loins/les_base_de_donnees.md @@ -0,0 +1,18 @@ +# Les base de données + +Une base de données est un système logiciel qui permet d'enregistrer et de lire des informations. + +Ces informations sont structurées : +* dans des base de données +* puis dans des tables +* puis dans attributs +* et sont typées + +![](https://user.oc-static.com/files/59001_60000/59541.png) +Source : [Openclassrooms](https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/presentation-des-bases-de-donnees-2) + +Elles peuvent avoir des relations entre elles : +* un article de blog est lié à une ou plusieurs catégories +* des catégories peuvent appartenir à des sections +* des commentaires sont déposés pour des articles + diff --git a/un_peu_plus_loins/les_variables_globales.md b/un_peu_plus_loins/les_variables_globales.md index 6f0bf12..1d8e978 100644 --- a/un_peu_plus_loins/les_variables_globales.md +++ b/un_peu_plus_loins/les_variables_globales.md @@ -36,4 +36,7 @@ array(62) { ``` - Les cookies sont accessibles via ```$_COOKIE``` et les données stockées en session (coté serveur et coté client) avec ```$_SESSION``` +- ```$_FILES``` permet de gérer l'upload de fichiers + +http://php.net/manual/fr/reserved.variables.php diff --git a/un_peu_plus_loins/mysql.md b/un_peu_plus_loins/mysql.md new file mode 100644 index 0000000..6c38823 --- /dev/null +++ b/un_peu_plus_loins/mysql.md @@ -0,0 +1,15 @@ +# MySQL + +Il existe plusieurs types de base de données. La plus courrante est la base de données "relationnelle". C'est ce dont la page précédent fait référence. + +MySQL est l'une d'entre elles. Il existe aussi MariaDB (un fork de MySQL), PostgreSQL, Orable, Sqlite, etc. + +Les avantages de MySQL à d'autres SGBD (système de gestion de base de données) sont nombreux : + +* simple à déployer +* simple à adminitrer (je paye une bière à celui qui installe la version gratuite d'Oracle sur une Debian en moins d'une journée) +* simple à comprendre + +Par ailleurs, MySQL est dispose de bibliothèques dans quasiment tous les langages (du fait de sa popularité). + +Il faut tout de même être conscient que ce n'est pas le SGBD parfait et que malgré ses avantages, des gros problèmes existent (mais ils ne vous intéressent pas encore) . diff --git a/un_peu_plus_loins/php.md b/un_peu_plus_loins/php.md new file mode 100644 index 0000000..304f908 --- /dev/null +++ b/un_peu_plus_loins/php.md @@ -0,0 +1,73 @@ +# PHP + +Plusieurs bibliothèques PHP existent pour travailler avec MySQL. + +Celle qu'il faut utiliser est PDO. Comme SQL est un langage utilisé à la fois chez MySQL, PostgreSQL, Oracle, etc., des gens ont travaillé sur un outil qui permet de jouer avec ces sgbd sans modifier le code des applications. PDO est donc une couche d'abstraction. + +Voici comment se connecter à MySQL avec PDO : + +```php +prepare('insert into wp_posts(post_title, post_date) values(:title, now()'); + +$query->execute(array( + ':title' => "Comment faire pousser des pommes ?", +)); + +$query = $pdo->query('select post_title, post_date from wp_posts'); +$results = $query->fetchAll(); + +var_dump($results); +``` + +Le résultat est : + +``` +array(3) { + [0]=> + array(4) { + ["post_title"]=> + string(28) "Bonjour tout le monde !" + [0]=> + string(28) "Bonjour tout le monde !" + ["post_date"]=> + string(19) "2014-10-13 18:59:55" + [1]=> + string(19) "2014-10-13 18:59:55" + } + [1]=> + array(4) { + ["post_title"]=> + string(20) "Page d’exemple" + [0]=> + string(20) "Page d’exemple" + ["post_date"]=> + string(19) "2014-10-13 18:59:55" + [1]=> + string(19) "2014-10-13 18:59:55" + } + [2]=> + array(4) { + ["post_title"]=> + string(34) "Je vais devenir le maître du monde" + [0]=> + string(34) "Je vais devenir le maître du monde" + ["post_date"]=> + string(19) "2014-10-15 22:32:47" + [1]=> + string(19) "2014-10-15 22:32:47" + } +} +``` + +Vous remarquerez que les données sont dans un format similaire au dernier TP.