Design patterns et MySQL+PHP

This commit is contained in:
Simon Vieille 2015-08-30 00:15:35 +02:00
parent ef665bdb16
commit 419ec9ba9a
10 changed files with 207 additions and 1 deletions

10
design_patterns/README.md Normal file
View file

@ -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)

View file

@ -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)
```

View file

@ -0,0 +1 @@
# Du SQL ?!

View file

@ -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…

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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) .

73
un_peu_plus_loins/php.md Normal file
View file

@ -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
<?php
$dsn = 'mysql:dbname=cours_wp;host=localhost';
$user = 'root';
$password = 'root';
$pdo = new PDO($dsn, $user, $password);
```
Une fois connecté, on peut balancer de la requête SQL :
```php
$query = $pdo->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&nbsp;!"
[0]=>
string(28) "Bonjour tout le monde&nbsp;!"
["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&rsquo;exemple"
[0]=>
string(20) "Page d&rsquo;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.