diff --git a/TP3_02.10.20/ansible/DockerFile b/TP3_02.10.20/ansible/DockerFile new file mode 100644 index 0000000000000000000000000000000000000000..ab1c3d33eae9609aadd24db2797bc728accd9f6d --- /dev/null +++ b/TP3_02.10.20/ansible/DockerFile @@ -0,0 +1,12 @@ +FROM debian +MAINTAINER Olivier Choquet +RUN apt-get update && apt-get upgrade -y +RUN apt-get install apache2 -y +COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf +COPY ./siteHTML /var/www/siteHTML +#RUN a2ensite siteHTML +#RUN echo "127.0.0.1 siteHTML" >> /etc/hosts +EXPOSE 80 +CMD apachectl -D FOREGROUND +# apache fonctionne en background -> container exited +#CMD service apache2 restart diff --git a/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml b/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml new file mode 100644 index 0000000000000000000000000000000000000000..d7228e4c1ae94403251c99c43f79dd313990b3a0 --- /dev/null +++ b/TP3_02.10.20/ansible/docker_sitePHP_phpMyAdmin.yml @@ -0,0 +1,29 @@ +--- +- hosts: all + become: true + # vars: + # create_containers: 1 + # default_container_name: httpd + # default_container_image: + # default_container_command: + + tasks: + - name: install apache2 + apt: name=apache2 update_cache=yes state=latest + + # - name: create sitePHPDocker folder + # file: + # path: /root/sitePHPDocker + # state: directory + + - name: Recursively remove directory + file: + path: /root/sitePHPDocker + state: absent + + - name: copy files of sitePHPDocker + copy: + src: "/home/pierre/Bureau/MASTER 1 2020 - 2021/Cours/Quadrimestre 1/DAC/dac-tp/TP3_02.10.20/ansible/sitePHPDocker" + dest: "/root/" + ignore_errors: yes + \ No newline at end of file diff --git a/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml b/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml index 07f6ffc0b59cc236e60fa9ac5774ee3fdcf2473d..3756634e7919393c0858a2f70e33087da14d5bc8 100644 --- a/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml +++ b/TP3_02.10.20/ansible/docker_ubuntu_removeImages&Containers.yml @@ -1,5 +1,5 @@ --- -- name: firewalld +- name: RemovePlaybook #hosts: serveurs_sans_ssh hosts: all become: true @@ -10,8 +10,31 @@ docker_host_info: containers: True register: docker_info + - name: Stop all running containers docker_container: name: '{{ item.Names[0] | regex_replace("^/", "") }}' state: stopped loop: '{{ docker_info.containers }}' + + - name: delete all containers + shell: | + docker rm $(docker ps -a -q); + + + + + + + - name: Get a list of all images + docker_host_info: + images: True + register: docker_info + + - debug: msg="{{docker_info.images}}" + + + - name: remove imgsitephpdb + docker_image: + state: absent + name: mongo \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh b/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh new file mode 100644 index 0000000000000000000000000000000000000000..7870cff2eb07a0974216ad81e4212e7512cab22b --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/construire_docker_images_et_containers.sh @@ -0,0 +1,9 @@ +#!/bin/bash +docker build -t imgsitephp contsitephp/ +docker build -t imgsitephpdb contdbphp/ +#utiliser phpmyadmin pour gérer la db mysql +#docker pull phpmyadmin/phpmyadmin:latest +docker run -d -p 3306:3306 --name contsitephpdb --network=sitephpnet imgsitephpdb +#docker run -d --name contmysql mysql +#docker run -d -p 8002:80 --name contphpmyadmin --network=sitephpnet --link contsitephpdb:db phpmyadmin/phpmyadmin +docker run -d -p 8001:80 --name contsitephp --network=sitephpnet imgsitephp diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6e87905780c3ce9ff46649ddbf538c36cb03fbe2 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile @@ -0,0 +1,6 @@ +FROM mysql +MAINTAINER Pierre Michiels +ENV MYSQL_DATABASE=bdbn +#ENV MYSQL_TCP_PORT=8002 +ENV MYSQL_ROOT_PASSWORD=ipl +COPY bdbn.sql /docker-entrypoint-initdb.d diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~ new file mode 100644 index 0000000000000000000000000000000000000000..b86e213320de8c8c8bd16d107d1408d6e6c7ddd0 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/Dockerfile~ @@ -0,0 +1,7 @@ +FROM mysql +MAINTAINER Olivier Choquet +ENV MYSQL_DATABASE=bdbn +ENV MYSQL_ROOT_PASSWORD=ipl +# la DB sera créée à l'intérieur du conteneur via +# mysql -u root -p < bdbn.sql +COPY bdbn.sql /root/bdbn.sql diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql new file mode 100644 index 0000000000000000000000000000000000000000..30b41ef798c1df015915259d13f5e681196b1967 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contdbphp/bdbn.sql @@ -0,0 +1,66 @@ +-- phpMyAdmin SQL Dump +-- version 4.6.4 +-- https://www.phpmyadmin.net/ +-- +-- Client : 127.0.0.1 +-- Généré le : Mar 18 Juillet 2017 à 10:20 +-- Version du serveur : 5.7.14 +-- Version de PHP : 5.6.25 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `bdbn` +-- +CREATE DATABASE IF NOT EXISTS `bdbn` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE `bdbn`; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `livres` +-- + +DROP TABLE IF EXISTS `livres`; +CREATE TABLE `livres` ( + `no` int(11) NOT NULL, + `titre` varchar(255) NOT NULL, + `auteur` varchar(255) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Contenu de la table `livres` +-- + +INSERT INTO `livres` (`no`, `titre`, `auteur`) VALUES +(1, 'test', 'test'); + +-- +-- Index pour les tables exportées +-- + +-- +-- Index pour la table `livres` +-- +ALTER TABLE `livres` + ADD PRIMARY KEY (`no`); + +-- +-- AUTO_INCREMENT pour les tables exportées +-- + +-- +-- AUTO_INCREMENT pour la table `livres` +-- +ALTER TABLE `livres` + MODIFY `no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php new file mode 100644 index 0000000000000000000000000000000000000000..1e217b396d9642385d60e50206fd13c43a18bd28 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Db.class.php @@ -0,0 +1,56 @@ +<?php +class Db +{ + private static $instance = null; + private $_db; + + private function __construct() + { + try { + $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl'); + $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); + $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); + } + catch (PDOException $e) { + die('Erreur de connexion à la base de données : '.$e->getMessage()); + } + } + + # Pattern Singleton + public static function getInstance() + { + if (is_null(self::$instance)) { + self::$instance = new Db(); + } + return self::$instance; + } + + # Fonction qui exécute un SELECT dans la table des livres + # et qui renvoie un tableau d'objet(s) de la classe Livre + public function select_livres() { + # Définition du query + $query = 'SELECT * FROM livres ORDER BY no DESC'; + + # Exécution du query + $result = $this->_db->query($query); + + # Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre + $tableau = array(); + if ($result->rowcount()!=0) { + while ($row = $result->fetch()) { + $tableau[] = new Livre($row->no,$row->titre,$row->auteur); + } + } + # pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau); + # var_dump($tableau); + return $tableau; + } + + public function send_livre() { + echo "dans send livre"; + $val = $_POST[something]; + $query = 'INSERT INTO livres (titre, auteur) VALUES( $val , "no data")'; + + $result = $this->_db->query($query); + } +} diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..12a46718a9c3f95a632a9a8c2810e874d522707f --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/Dockerfile @@ -0,0 +1,11 @@ +FROM php:7.2.8-apache-stretch +RUN docker-php-ext-install pdo_mysql +MAINTAINER Pierre Michiels +EXPOSE 80 +COPY sitePHP.conf /etc/apache2/sites-available/000-default.conf +COPY siteBonneNouvelles /var/www/sitePHP +# modifier éventuellement le nom du conteneur et mdp de passe dans Db.class.php +# docker utilisera au niveau réseau le nom du conteneur pour atteindre le conteneur de la DB +COPY Db.class.php /var/www/sitePHP/models/Db.class.php +CMD apache2ctl -D FOREGROUND + diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php new file mode 100644 index 0000000000000000000000000000000000000000..727b78a075c2b68a7603a34b75539edefb1c23f5 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php @@ -0,0 +1,14 @@ +<?php +class AccueilController{ + + public function __construct() { + + } + + public function run(){ + + # Un contrôleur se termine en écrivant une vue + require_once(CHEMIN_VUES . 'accueil.php'); + } + +} \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php new file mode 100644 index 0000000000000000000000000000000000000000..75c9865bdf2d5c6138e390837130e121430a75d8 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php @@ -0,0 +1,37 @@ +<?php +class ContactController{ + + public function __construct() { + + } + + public function run(){ + + # Envoi d'un email sur base des informations du formulaire transmises par la méthode POST + $notification=''; + if (!empty($_POST)) { + + if (empty($_POST['email']) && empty($_POST['message'])) { + $notification='Entrez un email et un message non vides!'; + } elseif (empty($_POST['email'])) { + $notification='Entrez un email non vide!'; + } elseif (empty($_POST['message'])) { + $notification='Entrez un message non vide!'; + } else { + $to = 'webmaster@votresite'; + $subject = 'Test du site des bonnes nouvelles'; + $message = $_POST['message']; + $headers = 'From: ' . $_POST['email']; + + if (mail($to, $subject, $message, $headers)) { + $notification='Vos informations ont été transmises avec succès.'; + } else { + $notification='Vos informations n\'ont pas été transmises.'; + } + } + } + + # Ecrire ici la vue + require_once(CHEMIN_VUES . 'contact.php'); + } +} \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php new file mode 100644 index 0000000000000000000000000000000000000000..b0468bb0347d93415de180ce766e3672f9b39a4b --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php @@ -0,0 +1,25 @@ +<?php +class GeneseController{ + + public function __construct() { + + } + + public function run(){ + + # Tableau de l'évolution du cours de PHP à l'IPL + $cphp[2009] = 'PHP structuré en modules avec accès à SQLite comme base de données'; + $cphp[2010] = 'PHP structuré en modules avec accès à MySQL comme base de données'; + $cphp[2011] = 'PHP structuré en modules avec PDO OO accédant à MySQL comme base de données'; + $cphp[2012] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2013] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2014] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2015] = 'PHP OO structuré en MVC avec PDO OO accédant à MySql comme base de données'; + + # Un contrôleur se termine en écrivant une vue + require_once(CHEMIN_VUES . 'genese.php'); + } + + + +} \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php new file mode 100644 index 0000000000000000000000000000000000000000..868d07f12fcc4d50adaad43ba273786b717309ee --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php @@ -0,0 +1,26 @@ +<?php +class LivresController{ + + public function __construct() { + + } + + public function run(){ + + # Variable HTML dans la vue + $tablivres=''; + + # Sélection de tous les livres sous forme de tableau + $tablivres=Db::getInstance()->select_livres(); + + #envoyer un livre + if(isset($_POST['submit'])){ + echo "Dans livres controller"; + Db::getInstance()->send_livre(); + } + + # Ecrire ici la vue + # $tablivres contient un tableau d'objets de la classe Livre + require_once(CHEMIN_VUES . 'livres.php'); + } +} \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php new file mode 100644 index 0000000000000000000000000000000000000000..9fb9e81dcdd2e035c4303687ae92ff6df66bd90c --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php @@ -0,0 +1,50 @@ +<?php + # Prise du temps actuel au début du script + $time_start = microtime(true); + + # Variables globales du site + define('CHEMIN_VUES','views/'); + define('CHEMIN_CONTROLLERS','controllers/'); + define('EMAIL','pierre.michiels.etu@univ-lille.fr'); + $date = date("j/m/Y"); + + # Require des classes automatisé + function chargerClasse($classe) { + require 'models/' . $classe . '.class.php'; + } + spl_autoload_register('chargerClasse'); + + # Ecrire ici le header de toutes pages HTML + require_once(CHEMIN_VUES . 'header.php'); + + # Ecrire ici le menu du site de toutes pages HTML + require_once(CHEMIN_VUES . 'menu.php'); + + # Tester si une variable GET 'action' est précisée dans l'URL index.php?action=... + $action = (isset($_GET['action'])) ? htmlentities($_GET['action']) : 'default'; + # Quelle action est demandée ? + switch($action) { + case 'genese': + require_once('controllers/GeneseController.php'); + $controller = new GeneseController(); + break; + case 'livres': + require_once('controllers/LivresController.php'); + $controller = new LivresController(); + break; + case 'contact': + require_once('controllers/ContactController.php'); + $controller = new ContactController(); + break; + default: # Par défaut, le contrôleur de l'accueil est sélectionné + require_once('controllers/AccueilController.php'); + $controller = new AccueilController(); + break; + } + # Exécution du contrôleur correspondant à l'action demandée + $controller->run(); + + # Ecrire ici le footer du site de toutes pages HTML + require_once(CHEMIN_VUES . 'footer.php'); + +?> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php new file mode 100644 index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php @@ -0,0 +1,48 @@ +<?php +class Db +{ + private static $instance = null; + private $_db; + + private function __construct() + { + try { + $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl'); + $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); + $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); + } + catch (PDOException $e) { + die('Erreur de connexion à la base de données : '.$e->getMessage()); + } + } + + # Pattern Singleton + public static function getInstance() + { + if (is_null(self::$instance)) { + self::$instance = new Db(); + } + return self::$instance; + } + + # Fonction qui exécute un SELECT dans la table des livres + # et qui renvoie un tableau d'objet(s) de la classe Livre + public function select_livres() { + # Définition du query + $query = 'SELECT * FROM livres ORDER BY no DESC'; + + # Exécution du query + $result = $this->_db->query($query); + + # Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre + $tableau = array(); + if ($result->rowcount()!=0) { + while ($row = $result->fetch()) { + $tableau[] = new Livre($row->no,$row->titre,$row->auteur); + } + } + # pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau); + # var_dump($tableau); + return $tableau; + } +} diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php new file mode 100644 index 0000000000000000000000000000000000000000..8ef941396e826df09eb38ee99e2726c8d563c404 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php @@ -0,0 +1,25 @@ +<?php +class Livre{ + private $_no; + private $_titre; + private $_auteur; + + public function __construct($no,$titre, $auteur){ + $this->_no = $no; + $this->_titre = $titre; + $this->_auteur = $auteur; + } + + public function no(){ + return $this->_no; + } + + public function titre(){ + return $this->_titre; + } + + public function auteur(){ + return $this->_auteur; + } +} +?> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php new file mode 100644 index 0000000000000000000000000000000000000000..6ca8b6bc60cdf6dfff46ca53632ee9602690ff39 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php @@ -0,0 +1,5 @@ +<div id="contenu"> + <h2>Accueil</h2> + <p>Bienvenue aux séances d'exercices consacrées à élaborer un site Internet en PHP selon une architecture didactique MVC OO.</p> + <p>Jean-Luc Collinet.</p> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php new file mode 100644 index 0000000000000000000000000000000000000000..6d16ad739146e9cdd0b3bbd1b0d107774ec38254 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php @@ -0,0 +1,13 @@ +<div id="contenu"> + <h2>Contactez-nous</h2> + <p>Bienvenue sur la page de contact.</p> + <p>Cette page est demandée grâce à la valeur 'contact' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=contact.</p> + <div id="notification"><?php echo $notification ?></div> + <div class="formulaire"> + <form action="index.php?action=contact" method="post"> + <p>Votre email : <input type="text" name="email" /></p> + <p><textarea rows="3" name="message">Entrez votre message ici</textarea></p> + <p><input type="submit" name="form_contact" value="Envoyer"></p> + </form> + </div> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css new file mode 100644 index 0000000000000000000000000000000000000000..7dcf24082821d9eba565dd154f137bceac4e2118 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css @@ -0,0 +1,184 @@ +/* ============================================== + FEUILLE DE STYLES DES GABARITS HTML/CSS + � Elephorm & Alsacreations.com + Conditions d'utilisation: + http://creativecommons.org/licenses/by/2.0/fr/ + ============================================== */ + + +/* --- STYLES DE BASE POUR LE TEXTE ET LES PRINCIPAUX �L�MENTS --- */ + +/* Page */ +html { + font-size: 100%; /* Voir -> Note 1 � la fin de la feuille de styles. */ +} +body { + margin: 10; + padding: 10px 20px; /* Note -> 2 */ + font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif; /* 3 */ + font-size: .8em; /* -> 4 */ + line-height: 1.25; /* -> 5 */ + color: black; + background: white; +} + +/* Titres */ +h1, h2, h3, h4, h5, h6 { + margin: 1em 0 .5em 0; /* -> 6 */ +} +h1, h2 { + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; + font-weight: normal; /* -> 7 */ +} +h1 { + font-size: 3em; /* -> 8 */ + font-style: italic; +} +h2 {font-size: 1.8em;} +h3 {font-size: 1.2em;} +h4 {font-size: 1em;} + +/* Listes */ +ul, ol { + margin: .75em 0 .75em 24px; + padding: 0; /* -> 9 */ +} +ul { + list-style: square; +} +li { + margin: 0; + padding: 0; +} + +/* Paragraphes */ +p { + margin: .75em 0; +} +li p, blockquote p { + margin: .5em 0; +} + +/* Citations */ +blockquote, q { + font-size: 1.1em; + font-style: italic; + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; +} +blockquote { + margin: .75em 0 .75em 24px; +} +cite { + font-style: italic; +} + +/* Liens */ +a { + color: mediumblue; + text-decoration: underline; +} +a:hover, a:focus { + color: crimson; +} +a img { + border: none; /* -> 10 */ +} + +/* Divers �l�ments de type en-ligne */ +em { + font-style: italic; +} +strong { + font-weight: bold; + color: dimgray; +} + + +/* --- STYLES POUR CERTAINS CONTENUS DES GABARITS --- */ + +pre, code { + font-size: 100%; + font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", monospace; +} +pre { + width: 90%; + overflow: auto; + overflow-y: hidden; + margin: .75em 0; + padding: 12px; + background: #eee; + color: #555; +} +pre strong { + font-weight: normal; + color: black; +} +#copyright { + margin: 20px 0 5px 0; + text-align: right; + font-size: .8em; + color: #848F63; +} +#copyright a { + color: #848F63; + text-decoration: none; +} +#copyright a:hover, #copyright a:focus { + text-decoration: underline; +} + + +/* --- NOTES --- + +1. Ce "font-size: 100%" est normalement inutile. On l'utilise uniquement + pour �viter un bug de redimensionnement du texte dans Internet Explorer. + +2. Par d�faut, les navigateurs ont un padding (ou, pour certains, un + margin) de 6px pour l'�l�ment BODY. C'est ce qui �vite que le texte + ne soit compl�tement coll� aux bords de la zone de visualisation du + navigateur lorsqu'on affiche une page �brute�, sans mise en forme. + Mais ce retrait de 6px est un peu faiblard: on le renforce donc. + Notez bien que les feuilles de styles des gabarits pourront augmenter + ce retrait, ou bien l'annuler. + +3. Voici quelques exemples de collections coh�rentes de fontes (propri�t� + CSS "font-family"): + font-family: Arial, Helvetica, "Nimbus Sans L", sans-serif; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; + font-family: "Times New Roman", Times, "Nimbus Roman No9 L", serif; + +4. Taille du texte de base de la page. D�pend de la taille du texte par + d�faut du navigateur (souvent 16px), et des r�glages de l'utilisateur. + � adapter en fonction de la fonte choisie, et du rendu souhait�. + En g�n�ral, on utilisera une valeur de base entre .65em et 1em + (ou 65% et 100%). + +5. Hauteur de ligne. � adapter en fonction de la fonte choisie, et des + besoins particuliers (lignes de texte longues ou courtes, titre ou + corps de texte...). + +6. En g�n�ral, les styles par d�faut des navigateurs font que les marges + en haut et en bas des titres sont �quivalentes. Ici, en diminuant la + marge du bas, on cherche � rapprocher le titre du contenu qu'il introduit. + +7. Les styles par d�faut des navigateurs mettent les titres en gras. + Si on souhaite passer � des caract�res �normaux�, on doit utiliser + font-size: normal. + +8. Pour un �l�ment en "font-size: 3em", la taille du texte sera le triple de + la taille du texte de l'�l�ment parent. + � noter: on aurait pu �crire "font-size: 300%" pour le m�me r�sultat. + +9. Par d�faut, les listes UL et OL ont un retrait � gauche qui peut �tre, + suivant les navigateurs: + - un padding-left de 40px; + - ou bien un margin-left de 40px. + On met tout le monde d'accord avec une marge � gauche de 24px, et pas + de padding. + +10. Les navigateurs donnent souvent aux images plac�es dans des liens + une bordure disgracieuse. On annule ce style souvent g�nant en appliquant + un "border: none" aux images qui se trouvent � l'int�rieur d'un lien. + +*/ \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css new file mode 100644 index 0000000000000000000000000000000000000000..6de9fd7b93340b12e47af2719414536f4e652a42 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css @@ -0,0 +1,191 @@ +/* ============================================== + FEUILLE DE STYLES DES GABARITS HTML/CSS --- 01 + � Elephorm & Alsacreations.com + Conditions d'utilisation: + http://creativecommons.org/licenses/by/2.0/fr/ + ============================================== */ + + +/* --- COULEURS --- */ + +/* Note: vous pouvez modifier simplement l'aspect de ce gabarit en modifiant + uniquement les couleurs de fond (propri�t�s background) et les couleurs + du texte (propri�t� color). + Pour modifier la disposition des blocs, voir plus bas dans la feuille de + styles la partie �positionnement�. */ + +/* G�n�ral */ +body { + color: #F0E39E; + background: #181A12; /* Voir -> Note 1 ci-dessous */ +} +a { + color: #FF6533; +} +a:hover, a:focus { + color: #FF4C00; +} +strong { + color: #A1B55D; +} + +/* En-t�te */ +#entete { + background: #181A12; +} + +/* Navigation #181A12; */ +#navigation { + background: #000000; +} +#navigation a { + color: #FF6533; +} +#navigation a:hover, #navigation a:focus { + background: #000000; +} + +/* Contenu principal */ +#contenu { + color: #363B29; + background: #cbd888; +} +#contenu a { + color: #332510; +} +#contenu a:hover, #contenu a:focus { + color: #6E5122; +} +#contenu strong { + color: #181A12; +} + +/* Pied de page */ +#pied { + color: #E6A948; +} + +/* Formulaire */ +.formulaire { + padding: 12px 12px; + background: #cbdd88; +} + +/* Notification */ +#notification { + color: #582758; +} + + +/* --- POSITIONNEMENT --- */ + +/* Page */ +body { + padding: 0; /* -> 2 */ +} + +/* En-t�te */ +#entete { + padding: 15px 20px 10px 20px; +} +#entete h1 { + margin: 0; +} +#entete h1 img { + float: left; + margin: 7px 20px 10px 0; +} +#entete .sous-titre { + margin: 4px 0 15px 0; +} + +/* Menu de navigation */ +#navigation { + padding: 12px 15px; +} +#navigation ul { + margin: 0; + padding: 0; + list-style: none; +} +#navigation li { + display: inline; /* -> 3 */ +} +#navigation a { + padding: 6px; + line-height: 1.5; + font-size: .9em; + text-decoration: none; +} + +/* Contenu */ +#contenu { + padding: 10px 20px; +} +#contenu > :first-child { + margin-top: 10px; +} +#contenu p, #contenu li { + line-height: 1.5; +} + +/* Pied de page */ +#pied { + padding: 15px 20px; + font-size: .85em; +} +#pied p { + margin: .5em 0; +} +#pied #copyright { + float: right; + margin: .5em 0 30px 10%; + font-size: 1em; +} + +/* Tableau repris du cours d'HTML */ +.html { + font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", + monospace; + font-size: larger; + color: purple; +} + +#tableBalises th{ + border-style: solid; + border-width: thin; + border-collapse: collapse; + background-color: #DCDCDC; +} +#tableBalises td{ + border-style: solid; + border-width: thin; + border-collapse: collapse; +} + +/* --- NOTES --- + +1. Notes que cette couleur de fond n'est apparente qu'en bas de page. Plus + haut, elle est masque: par la couleur de fond de l'en-t�te, puis par la + couleur de fond du menu, puis par la couleur de fond du contenu. Seul le + pied de page laisse apparaitre cette couleur de fond. + +2. Pour ce gabarit, on supprime l'�cart entre les �bords� du navigateur et + le contenu, en passant le padding de l'�l�ment BODY � z�ro. + (Voir �galement la note num�ro 2 dans base.css.) + +3. Si les �l�ments de notre menu se placent horizontalement plut�t que les + uns en dessous des autres, c'est parce qu'ils ne sont plus affich�s + comme des blocs (ce qui est normalement le cas des �l�ments LI), mais + comme des �l�ments de type en-ligne. On obtient ce comportement avec la + propri�t� "display" et la valeur "inline". + Le fait que nos LI se comportent comme un flot unique de texte aura deux + cons�quences: + - on va pouvoir aligner le texte du menu � gauche (c'est le cas ici), � + droite ou encore au centre, en jouant sur la propri�t� "text-align" du + menu (sur l'�l�ment UL ou sur div#navigation); + - certains styles ne pourront pas �tre appliqu�s... par exemple, la + propri�t� "width" ne peut pas �tre utilis�e pour les �l�ments en + "display: inline". + +*/ diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php new file mode 100644 index 0000000000000000000000000000000000000000..764891369b5f6f9275c14ac6453e03a1dc997cce --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php @@ -0,0 +1,14 @@ + <div id="pied"> + <strong>Excellente journée qu'aujourd'hui le <?php echo $date ?></strong> :: + <?php $time_end = microtime(true); + $time = number_format(($time_end - $time_start)*1000,6); + echo $time; ?>ms pour exécuter le script PHP :: + <!-- ! adresse email non cryptée : spam possible --> + <a href="mailto:<?php echo EMAIL ?>"><?php echo EMAIL ?></a> + <p id="copyright">Mise en page d'après + <a href="http://www.alsacreations.com/tutoriels/">Alsacréations</a> + </p> + </div><!-- #pied --> + </div><!-- #global --> + </body> +</html> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php new file mode 100644 index 0000000000000000000000000000000000000000..4123d0a56d39ff6b4ff524894875cb2f6c476cbf --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php @@ -0,0 +1,21 @@ +<div id="contenu"> + <h2>La Genèse</h2> + <p>Bienvenue sur la page de la genèse.</p> + <table id="tableBalises"> + <thead> + <tr> + <th>Année</th> + <th>Cours</th> + </tr> + </thead> + <tbody> + <?php foreach ($cphp as $annee => $cours) { ?> + <tr> + <td><span class="html"><?php echo $annee ?></span></td> + <td><?php echo $cours ?></td> + </tr> + <?php } ?> + </tbody> + </table> + <img src="<?php echo CHEMIN_VUES ?>images/big-w3cvalidtemplate.png" alt="W3C Valid" > +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php new file mode 100644 index 0000000000000000000000000000000000000000..d06af94af1d6c771be892a1e56af3a7506d4e0df --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="fr"> + <head> + <meta charset="utf-8" > + <title>Un site de Bonnes Nouvelles</title> + <link rel="stylesheet" type="text/css" href="views/css/base.css" media="all" > + <link rel="stylesheet" type="text/css" href="views/css/modele01.css" media="screen" > + </head> + <body> + <div id="global"> + <div id="entete"> + <h1> + <a href="index.php"> + <img src="views/images/smiley.jpg" alt="Sourire"> + </a> + Un site de Bonnes Nouvelles + </h1> + <p class="sous-titre"> + </p> + </div><!-- entete --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..091f757258f968217eda8d7c5ba6a2c2ec142e12 Binary files /dev/null and b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png differ diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76367dd5a1c1c1995c1b56c6d2a72b58bd335ddd Binary files /dev/null and b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg differ diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php new file mode 100644 index 0000000000000000000000000000000000000000..0a897af7fce17bc06bb791be29dd99a6294cfdf9 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php @@ -0,0 +1,27 @@ +<div id="contenu"> + <h2>Les Livres</h2> + <p>Bienvenue sur la page des livres.</p> + <table id="tableBalises"> + <thead> + <tr> + <th>Titre</th> + <th>Auteur</th> + </tr> + </thead> + <tbody> + <?php for ($i=0;$i<count($tablivres);$i++) { ?> + <tr> + <td><span class="html"><?php echo $tablivres[$i]->titre() ?></span></td> + <td><?php echo $tablivres[$i]->auteur() ?></td> + </tr> + <?php } ?> + </tbody> + <form action="../controllers/LivresController.php" method="post"> + <h3>Inserer un livre ?</h3> + <label for="something">give something:</label> + <input type="text" id="something" name="something"> + <input type = "submit" name = "submit" value = "Envoyer"> + </form> + + </table> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php new file mode 100644 index 0000000000000000000000000000000000000000..9d13787a32342a2c8163c4e4c8c71a78ab430c88 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php @@ -0,0 +1,7 @@ +<div id="navigation"> + <ul> + <li><a href="index.php?action=genese">La genèse</a></li> + <li><a href="index.php?action=livres">Les livres</a></li> + <li><a href="index.php?action=contact">Contactez-nous</a></li> + </ul> +</div><!-- menu --> \ No newline at end of file diff --git a/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf new file mode 100644 index 0000000000000000000000000000000000000000..4464e6aad74e9f11c6e5746e22596bd8ee1961fc --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/contsitephp/sitePHP.conf @@ -0,0 +1,17 @@ +<VirtualHost *:80> + # pas de servername -> site par défaut + #ServerName sitePHP + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/sitePHP + + ErrorLog ${APACHE_LOG_DIR}/sitePHP_errors.log + CustomLog ${APACHE_LOG_DIR}/sitePHP_access.log combined + + <Directory /var/www/sitePHP> + Require all granted + AllowOverride all + </Directory> + +</VirtualHost> + diff --git a/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh b/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh new file mode 100644 index 0000000000000000000000000000000000000000..2a09291a88221d50cefb2ca1f2c849238d18ce64 --- /dev/null +++ b/TP3_02.10.20/ansible/sitePHPDocker/detruire_containers_et_images.sh @@ -0,0 +1,5 @@ +#!/bin/bash +docker stop $(docker ps -aq) +docker rm $(docker ps -aq) +docker image rm imgsitephp imgsitephpdb +#echo $(docker image ls) diff --git a/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx# b/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx# new file mode 100644 index 0000000000000000000000000000000000000000..dee86383607c08d033c623d9e8abb5d07691b734 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/.~lock.Docker solution.docx# @@ -0,0 +1 @@ +,michiels,a11p6.fil.univ-lille1.fr,16.10.2020 11:05,file:///home/m1io/michiels/.config/libreoffice/4; \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/Docker solution.docx b/TP3_02.10.20/siteHTML_IPL/Docker solution.docx new file mode 100644 index 0000000000000000000000000000000000000000..108a19e40e9cebf0160b8cb2aabd5734fc767d42 Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/Docker solution.docx differ diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt new file mode 100644 index 0000000000000000000000000000000000000000..5d006ced7061b92fc27912ebecb3153518bbddde --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/Explications et commandes.txt @@ -0,0 +1,48 @@ +DEMO + +PUTTY - Permet le copier/coller de commandes +PUTTY - �l�ments int�ressants +Keyboard -> ctrl-H (gestion de la touche backspace) +Features -> disable keypad (gestion pav� num�rique) +Fonts -> taille 18 +Connection -> Data -> Autologin -> root +SSH -> Auth -> cl� priv�e + +INSTANTANES +Revenir � un �tat ant�rieur + +INSTALLATION DOCKER +copier/coller depuis syllabus + +WinSCP -> copie de fichier via SSH (idem que putty les param�tres peuvent �tre sauv�s). + +EXPLICATIONS DOCKERFILE +contdbphp -> mysql -> docker hub -> voir environnement variables + fresh instance +contsitephp -> php -> docker hub -> add extensions + search apache + + + +Dans le r�pertoire sitePHPDocker : +# cr�ation image site php code +docker build -t imgsitephp contsitephp/. +# cr�ation image site php db +docker build -t imgsitephpdb contdbphp/. +# cr�ation du conteneur avec la DB +docker run -d --name contsitephpdb imgsitephpdb +# cr�ation du conteneur sitephp +docker run -d -p 80:80 --name contsitephp imgsitephp +# A ce stade +#-> lynx localhost affiche le site php mais erreur dans le menu "Livres" car connexion � la DB +# Erreur : Name or service not know -> erreur r�seau +# connecter les conteneurs -> les placer dans un m�me r�seau +# cr�ation de notre r�seau +docker network create sitephpnet +# connecter le premier conteneur +docker network connect sitephpnet contsitephp +# connecter le deuxi�me conteneur +docker network connect sitephpnet contsitephpdb + +# A noter +Le fichier Db.class.php contient la connexion vers la DB et doit �tre �ventuellement adapt�. +Il doit contenir le nom du conteneur -> docker utilisera le nom du conteneur au niveau r�seau +Le mot de passe pour la DB dans ce fichier doit �tre le m�me que celui pr�cis� dans le Dockerfile du conteneur DB \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..fa354763927cb2bd00a03be13ed6866a67d580eb --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile @@ -0,0 +1,5 @@ +FROM mysql +MAINTAINER Olivier Choquet +ENV MYSQL_DATABASE=bdbn +ENV MYSQL_ROOT_PASSWORD=ipl +COPY bdbn.sql /docker-entrypoint-initdb.d diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~ new file mode 100644 index 0000000000000000000000000000000000000000..b86e213320de8c8c8bd16d107d1408d6e6c7ddd0 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/Dockerfile~ @@ -0,0 +1,7 @@ +FROM mysql +MAINTAINER Olivier Choquet +ENV MYSQL_DATABASE=bdbn +ENV MYSQL_ROOT_PASSWORD=ipl +# la DB sera créée à l'intérieur du conteneur via +# mysql -u root -p < bdbn.sql +COPY bdbn.sql /root/bdbn.sql diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql new file mode 100644 index 0000000000000000000000000000000000000000..30b41ef798c1df015915259d13f5e681196b1967 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contdbphp/bdbn.sql @@ -0,0 +1,66 @@ +-- phpMyAdmin SQL Dump +-- version 4.6.4 +-- https://www.phpmyadmin.net/ +-- +-- Client : 127.0.0.1 +-- Généré le : Mar 18 Juillet 2017 à 10:20 +-- Version du serveur : 5.7.14 +-- Version de PHP : 5.6.25 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `bdbn` +-- +CREATE DATABASE IF NOT EXISTS `bdbn` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE `bdbn`; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `livres` +-- + +DROP TABLE IF EXISTS `livres`; +CREATE TABLE `livres` ( + `no` int(11) NOT NULL, + `titre` varchar(255) NOT NULL, + `auteur` varchar(255) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Contenu de la table `livres` +-- + +INSERT INTO `livres` (`no`, `titre`, `auteur`) VALUES +(1, 'test', 'test'); + +-- +-- Index pour les tables exportées +-- + +-- +-- Index pour la table `livres` +-- +ALTER TABLE `livres` + ADD PRIMARY KEY (`no`); + +-- +-- AUTO_INCREMENT pour les tables exportées +-- + +-- +-- AUTO_INCREMENT pour la table `livres` +-- +ALTER TABLE `livres` + MODIFY `no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php new file mode 100644 index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Db.class.php @@ -0,0 +1,48 @@ +<?php +class Db +{ + private static $instance = null; + private $_db; + + private function __construct() + { + try { + $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl'); + $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); + $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); + } + catch (PDOException $e) { + die('Erreur de connexion à la base de données : '.$e->getMessage()); + } + } + + # Pattern Singleton + public static function getInstance() + { + if (is_null(self::$instance)) { + self::$instance = new Db(); + } + return self::$instance; + } + + # Fonction qui exécute un SELECT dans la table des livres + # et qui renvoie un tableau d'objet(s) de la classe Livre + public function select_livres() { + # Définition du query + $query = 'SELECT * FROM livres ORDER BY no DESC'; + + # Exécution du query + $result = $this->_db->query($query); + + # Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre + $tableau = array(); + if ($result->rowcount()!=0) { + while ($row = $result->fetch()) { + $tableau[] = new Livre($row->no,$row->titre,$row->auteur); + } + } + # pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau); + # var_dump($tableau); + return $tableau; + } +} diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ef99d5bba868a90b30763950ac1955ab335a2c29 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/Dockerfile @@ -0,0 +1,11 @@ +FROM php:7.2.8-apache-stretch +RUN docker-php-ext-install pdo_mysql +MAINTAINER Olivier Choquet +EXPOSE 80 +COPY sitePHP.conf /etc/apache2/sites-available/000-default.conf +COPY siteBonneNouvelles /var/www/sitePHP +# modifier éventuellement le nom du conteneur et mdp de passe dans Db.class.php +# docker utilisera au niveau réseau le nom du conteneur pour atteindre le conteneur de la DB +COPY Db.class.php /var/www/sitePHP/models/Db.class.php +CMD apache2ctl -D FOREGROUND + diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php new file mode 100644 index 0000000000000000000000000000000000000000..727b78a075c2b68a7603a34b75539edefb1c23f5 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/AccueilController.php @@ -0,0 +1,14 @@ +<?php +class AccueilController{ + + public function __construct() { + + } + + public function run(){ + + # Un contrôleur se termine en écrivant une vue + require_once(CHEMIN_VUES . 'accueil.php'); + } + +} \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php new file mode 100644 index 0000000000000000000000000000000000000000..75c9865bdf2d5c6138e390837130e121430a75d8 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/ContactController.php @@ -0,0 +1,37 @@ +<?php +class ContactController{ + + public function __construct() { + + } + + public function run(){ + + # Envoi d'un email sur base des informations du formulaire transmises par la méthode POST + $notification=''; + if (!empty($_POST)) { + + if (empty($_POST['email']) && empty($_POST['message'])) { + $notification='Entrez un email et un message non vides!'; + } elseif (empty($_POST['email'])) { + $notification='Entrez un email non vide!'; + } elseif (empty($_POST['message'])) { + $notification='Entrez un message non vide!'; + } else { + $to = 'webmaster@votresite'; + $subject = 'Test du site des bonnes nouvelles'; + $message = $_POST['message']; + $headers = 'From: ' . $_POST['email']; + + if (mail($to, $subject, $message, $headers)) { + $notification='Vos informations ont été transmises avec succès.'; + } else { + $notification='Vos informations n\'ont pas été transmises.'; + } + } + } + + # Ecrire ici la vue + require_once(CHEMIN_VUES . 'contact.php'); + } +} \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php new file mode 100644 index 0000000000000000000000000000000000000000..b0468bb0347d93415de180ce766e3672f9b39a4b --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/GeneseController.php @@ -0,0 +1,25 @@ +<?php +class GeneseController{ + + public function __construct() { + + } + + public function run(){ + + # Tableau de l'évolution du cours de PHP à l'IPL + $cphp[2009] = 'PHP structuré en modules avec accès à SQLite comme base de données'; + $cphp[2010] = 'PHP structuré en modules avec accès à MySQL comme base de données'; + $cphp[2011] = 'PHP structuré en modules avec PDO OO accédant à MySQL comme base de données'; + $cphp[2012] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2013] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2014] = 'PHP structuré en MVC avec PDO OO accédant à MySql comme base de données'; + $cphp[2015] = 'PHP OO structuré en MVC avec PDO OO accédant à MySql comme base de données'; + + # Un contrôleur se termine en écrivant une vue + require_once(CHEMIN_VUES . 'genese.php'); + } + + + +} \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php new file mode 100644 index 0000000000000000000000000000000000000000..294360fe503d356682c1492369435a4c9ea474fe --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/controllers/LivresController.php @@ -0,0 +1,20 @@ +<?php +class LivresController{ + + public function __construct() { + + } + + public function run(){ + + # Variable HTML dans la vue + $tablivres=''; + + # Sélection de tous les livres sous forme de tableau + $tablivres=Db::getInstance()->select_livres(); + + # Ecrire ici la vue + # $tablivres contient un tableau d'objets de la classe Livre + require_once(CHEMIN_VUES . 'livres.php'); + } +} \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php new file mode 100644 index 0000000000000000000000000000000000000000..b3a54d3de9ec34547189b681a860c333471c6db4 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/index.php @@ -0,0 +1,49 @@ +<?php + # Prise du temps actuel au début du script + $time_start = microtime(true); + + # Variables globales du site + define('CHEMIN_VUES','views/'); + define('EMAIL','jeanluc.collinet@ipl.be'); + $date = date("j/m/Y"); + + # Require des classes automatisé + function chargerClasse($classe) { + require 'models/' . $classe . '.class.php'; + } + spl_autoload_register('chargerClasse'); + + # Ecrire ici le header de toutes pages HTML + require_once(CHEMIN_VUES . 'header.php'); + + # Ecrire ici le menu du site de toutes pages HTML + require_once(CHEMIN_VUES . 'menu.php'); + + # Tester si une variable GET 'action' est précisée dans l'URL index.php?action=... + $action = (isset($_GET['action'])) ? htmlentities($_GET['action']) : 'default'; + # Quelle action est demandée ? + switch($action) { + case 'genese': + require_once('controllers/GeneseController.php'); + $controller = new GeneseController(); + break; + case 'livres': + require_once('controllers/LivresController.php'); + $controller = new LivresController(); + break; + case 'contact': + require_once('controllers/ContactController.php'); + $controller = new ContactController(); + break; + default: # Par défaut, le contrôleur de l'accueil est sélectionné + require_once('controllers/AccueilController.php'); + $controller = new AccueilController(); + break; + } + # Exécution du contrôleur correspondant à l'action demandée + $controller->run(); + + # Ecrire ici le footer du site de toutes pages HTML + require_once(CHEMIN_VUES . 'footer.php'); + +?> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php new file mode 100644 index 0000000000000000000000000000000000000000..5ce1eed4036442625444dfb7382dde2035fe90dc --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Db.class.php @@ -0,0 +1,48 @@ +<?php +class Db +{ + private static $instance = null; + private $_db; + + private function __construct() + { + try { + $this->_db = new PDO('mysql:host=contsitephpdb;dbname=bdbn', 'root', 'ipl'); + $this->_db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); + $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); + } + catch (PDOException $e) { + die('Erreur de connexion à la base de données : '.$e->getMessage()); + } + } + + # Pattern Singleton + public static function getInstance() + { + if (is_null(self::$instance)) { + self::$instance = new Db(); + } + return self::$instance; + } + + # Fonction qui exécute un SELECT dans la table des livres + # et qui renvoie un tableau d'objet(s) de la classe Livre + public function select_livres() { + # Définition du query + $query = 'SELECT * FROM livres ORDER BY no DESC'; + + # Exécution du query + $result = $this->_db->query($query); + + # Parcours de l'ensemble des résultats et construction d'un tableau d'objet(s) de la classe Livre + $tableau = array(); + if ($result->rowcount()!=0) { + while ($row = $result->fetch()) { + $tableau[] = new Livre($row->no,$row->titre,$row->auteur); + } + } + # pour debug : affichage ici possible de l'array à l'aide de var_dump($tableau); + # var_dump($tableau); + return $tableau; + } +} diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php new file mode 100644 index 0000000000000000000000000000000000000000..8ef941396e826df09eb38ee99e2726c8d563c404 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/models/Livre.class.php @@ -0,0 +1,25 @@ +<?php +class Livre{ + private $_no; + private $_titre; + private $_auteur; + + public function __construct($no,$titre, $auteur){ + $this->_no = $no; + $this->_titre = $titre; + $this->_auteur = $auteur; + } + + public function no(){ + return $this->_no; + } + + public function titre(){ + return $this->_titre; + } + + public function auteur(){ + return $this->_auteur; + } +} +?> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php new file mode 100644 index 0000000000000000000000000000000000000000..6ca8b6bc60cdf6dfff46ca53632ee9602690ff39 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/accueil.php @@ -0,0 +1,5 @@ +<div id="contenu"> + <h2>Accueil</h2> + <p>Bienvenue aux séances d'exercices consacrées à élaborer un site Internet en PHP selon une architecture didactique MVC OO.</p> + <p>Jean-Luc Collinet.</p> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php new file mode 100644 index 0000000000000000000000000000000000000000..6d16ad739146e9cdd0b3bbd1b0d107774ec38254 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/contact.php @@ -0,0 +1,13 @@ +<div id="contenu"> + <h2>Contactez-nous</h2> + <p>Bienvenue sur la page de contact.</p> + <p>Cette page est demandée grâce à la valeur 'contact' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=contact.</p> + <div id="notification"><?php echo $notification ?></div> + <div class="formulaire"> + <form action="index.php?action=contact" method="post"> + <p>Votre email : <input type="text" name="email" /></p> + <p><textarea rows="3" name="message">Entrez votre message ici</textarea></p> + <p><input type="submit" name="form_contact" value="Envoyer"></p> + </form> + </div> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css new file mode 100644 index 0000000000000000000000000000000000000000..7dcf24082821d9eba565dd154f137bceac4e2118 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/base.css @@ -0,0 +1,184 @@ +/* ============================================== + FEUILLE DE STYLES DES GABARITS HTML/CSS + � Elephorm & Alsacreations.com + Conditions d'utilisation: + http://creativecommons.org/licenses/by/2.0/fr/ + ============================================== */ + + +/* --- STYLES DE BASE POUR LE TEXTE ET LES PRINCIPAUX �L�MENTS --- */ + +/* Page */ +html { + font-size: 100%; /* Voir -> Note 1 � la fin de la feuille de styles. */ +} +body { + margin: 10; + padding: 10px 20px; /* Note -> 2 */ + font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif; /* 3 */ + font-size: .8em; /* -> 4 */ + line-height: 1.25; /* -> 5 */ + color: black; + background: white; +} + +/* Titres */ +h1, h2, h3, h4, h5, h6 { + margin: 1em 0 .5em 0; /* -> 6 */ +} +h1, h2 { + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; + font-weight: normal; /* -> 7 */ +} +h1 { + font-size: 3em; /* -> 8 */ + font-style: italic; +} +h2 {font-size: 1.8em;} +h3 {font-size: 1.2em;} +h4 {font-size: 1em;} + +/* Listes */ +ul, ol { + margin: .75em 0 .75em 24px; + padding: 0; /* -> 9 */ +} +ul { + list-style: square; +} +li { + margin: 0; + padding: 0; +} + +/* Paragraphes */ +p { + margin: .75em 0; +} +li p, blockquote p { + margin: .5em 0; +} + +/* Citations */ +blockquote, q { + font-size: 1.1em; + font-style: italic; + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; +} +blockquote { + margin: .75em 0 .75em 24px; +} +cite { + font-style: italic; +} + +/* Liens */ +a { + color: mediumblue; + text-decoration: underline; +} +a:hover, a:focus { + color: crimson; +} +a img { + border: none; /* -> 10 */ +} + +/* Divers �l�ments de type en-ligne */ +em { + font-style: italic; +} +strong { + font-weight: bold; + color: dimgray; +} + + +/* --- STYLES POUR CERTAINS CONTENUS DES GABARITS --- */ + +pre, code { + font-size: 100%; + font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", monospace; +} +pre { + width: 90%; + overflow: auto; + overflow-y: hidden; + margin: .75em 0; + padding: 12px; + background: #eee; + color: #555; +} +pre strong { + font-weight: normal; + color: black; +} +#copyright { + margin: 20px 0 5px 0; + text-align: right; + font-size: .8em; + color: #848F63; +} +#copyright a { + color: #848F63; + text-decoration: none; +} +#copyright a:hover, #copyright a:focus { + text-decoration: underline; +} + + +/* --- NOTES --- + +1. Ce "font-size: 100%" est normalement inutile. On l'utilise uniquement + pour �viter un bug de redimensionnement du texte dans Internet Explorer. + +2. Par d�faut, les navigateurs ont un padding (ou, pour certains, un + margin) de 6px pour l'�l�ment BODY. C'est ce qui �vite que le texte + ne soit compl�tement coll� aux bords de la zone de visualisation du + navigateur lorsqu'on affiche une page �brute�, sans mise en forme. + Mais ce retrait de 6px est un peu faiblard: on le renforce donc. + Notez bien que les feuilles de styles des gabarits pourront augmenter + ce retrait, ou bien l'annuler. + +3. Voici quelques exemples de collections coh�rentes de fontes (propri�t� + CSS "font-family"): + font-family: Arial, Helvetica, "Nimbus Sans L", sans-serif; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-family: Georgia, "Bitstream Vera Serif", Norasi, serif; + font-family: "Times New Roman", Times, "Nimbus Roman No9 L", serif; + +4. Taille du texte de base de la page. D�pend de la taille du texte par + d�faut du navigateur (souvent 16px), et des r�glages de l'utilisateur. + � adapter en fonction de la fonte choisie, et du rendu souhait�. + En g�n�ral, on utilisera une valeur de base entre .65em et 1em + (ou 65% et 100%). + +5. Hauteur de ligne. � adapter en fonction de la fonte choisie, et des + besoins particuliers (lignes de texte longues ou courtes, titre ou + corps de texte...). + +6. En g�n�ral, les styles par d�faut des navigateurs font que les marges + en haut et en bas des titres sont �quivalentes. Ici, en diminuant la + marge du bas, on cherche � rapprocher le titre du contenu qu'il introduit. + +7. Les styles par d�faut des navigateurs mettent les titres en gras. + Si on souhaite passer � des caract�res �normaux�, on doit utiliser + font-size: normal. + +8. Pour un �l�ment en "font-size: 3em", la taille du texte sera le triple de + la taille du texte de l'�l�ment parent. + � noter: on aurait pu �crire "font-size: 300%" pour le m�me r�sultat. + +9. Par d�faut, les listes UL et OL ont un retrait � gauche qui peut �tre, + suivant les navigateurs: + - un padding-left de 40px; + - ou bien un margin-left de 40px. + On met tout le monde d'accord avec une marge � gauche de 24px, et pas + de padding. + +10. Les navigateurs donnent souvent aux images plac�es dans des liens + une bordure disgracieuse. On annule ce style souvent g�nant en appliquant + un "border: none" aux images qui se trouvent � l'int�rieur d'un lien. + +*/ \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css new file mode 100644 index 0000000000000000000000000000000000000000..6de9fd7b93340b12e47af2719414536f4e652a42 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/css/modele01.css @@ -0,0 +1,191 @@ +/* ============================================== + FEUILLE DE STYLES DES GABARITS HTML/CSS --- 01 + � Elephorm & Alsacreations.com + Conditions d'utilisation: + http://creativecommons.org/licenses/by/2.0/fr/ + ============================================== */ + + +/* --- COULEURS --- */ + +/* Note: vous pouvez modifier simplement l'aspect de ce gabarit en modifiant + uniquement les couleurs de fond (propri�t�s background) et les couleurs + du texte (propri�t� color). + Pour modifier la disposition des blocs, voir plus bas dans la feuille de + styles la partie �positionnement�. */ + +/* G�n�ral */ +body { + color: #F0E39E; + background: #181A12; /* Voir -> Note 1 ci-dessous */ +} +a { + color: #FF6533; +} +a:hover, a:focus { + color: #FF4C00; +} +strong { + color: #A1B55D; +} + +/* En-t�te */ +#entete { + background: #181A12; +} + +/* Navigation #181A12; */ +#navigation { + background: #000000; +} +#navigation a { + color: #FF6533; +} +#navigation a:hover, #navigation a:focus { + background: #000000; +} + +/* Contenu principal */ +#contenu { + color: #363B29; + background: #cbd888; +} +#contenu a { + color: #332510; +} +#contenu a:hover, #contenu a:focus { + color: #6E5122; +} +#contenu strong { + color: #181A12; +} + +/* Pied de page */ +#pied { + color: #E6A948; +} + +/* Formulaire */ +.formulaire { + padding: 12px 12px; + background: #cbdd88; +} + +/* Notification */ +#notification { + color: #582758; +} + + +/* --- POSITIONNEMENT --- */ + +/* Page */ +body { + padding: 0; /* -> 2 */ +} + +/* En-t�te */ +#entete { + padding: 15px 20px 10px 20px; +} +#entete h1 { + margin: 0; +} +#entete h1 img { + float: left; + margin: 7px 20px 10px 0; +} +#entete .sous-titre { + margin: 4px 0 15px 0; +} + +/* Menu de navigation */ +#navigation { + padding: 12px 15px; +} +#navigation ul { + margin: 0; + padding: 0; + list-style: none; +} +#navigation li { + display: inline; /* -> 3 */ +} +#navigation a { + padding: 6px; + line-height: 1.5; + font-size: .9em; + text-decoration: none; +} + +/* Contenu */ +#contenu { + padding: 10px 20px; +} +#contenu > :first-child { + margin-top: 10px; +} +#contenu p, #contenu li { + line-height: 1.5; +} + +/* Pied de page */ +#pied { + padding: 15px 20px; + font-size: .85em; +} +#pied p { + margin: .5em 0; +} +#pied #copyright { + float: right; + margin: .5em 0 30px 10%; + font-size: 1em; +} + +/* Tableau repris du cours d'HTML */ +.html { + font-family: "Bitstream Vera Mono", "Lucida Console", "Courier New", + monospace; + font-size: larger; + color: purple; +} + +#tableBalises th{ + border-style: solid; + border-width: thin; + border-collapse: collapse; + background-color: #DCDCDC; +} +#tableBalises td{ + border-style: solid; + border-width: thin; + border-collapse: collapse; +} + +/* --- NOTES --- + +1. Notes que cette couleur de fond n'est apparente qu'en bas de page. Plus + haut, elle est masque: par la couleur de fond de l'en-t�te, puis par la + couleur de fond du menu, puis par la couleur de fond du contenu. Seul le + pied de page laisse apparaitre cette couleur de fond. + +2. Pour ce gabarit, on supprime l'�cart entre les �bords� du navigateur et + le contenu, en passant le padding de l'�l�ment BODY � z�ro. + (Voir �galement la note num�ro 2 dans base.css.) + +3. Si les �l�ments de notre menu se placent horizontalement plut�t que les + uns en dessous des autres, c'est parce qu'ils ne sont plus affich�s + comme des blocs (ce qui est normalement le cas des �l�ments LI), mais + comme des �l�ments de type en-ligne. On obtient ce comportement avec la + propri�t� "display" et la valeur "inline". + Le fait que nos LI se comportent comme un flot unique de texte aura deux + cons�quences: + - on va pouvoir aligner le texte du menu � gauche (c'est le cas ici), � + droite ou encore au centre, en jouant sur la propri�t� "text-align" du + menu (sur l'�l�ment UL ou sur div#navigation); + - certains styles ne pourront pas �tre appliqu�s... par exemple, la + propri�t� "width" ne peut pas �tre utilis�e pour les �l�ments en + "display: inline". + +*/ diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php new file mode 100644 index 0000000000000000000000000000000000000000..764891369b5f6f9275c14ac6453e03a1dc997cce --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/footer.php @@ -0,0 +1,14 @@ + <div id="pied"> + <strong>Excellente journée qu'aujourd'hui le <?php echo $date ?></strong> :: + <?php $time_end = microtime(true); + $time = number_format(($time_end - $time_start)*1000,6); + echo $time; ?>ms pour exécuter le script PHP :: + <!-- ! adresse email non cryptée : spam possible --> + <a href="mailto:<?php echo EMAIL ?>"><?php echo EMAIL ?></a> + <p id="copyright">Mise en page d'après + <a href="http://www.alsacreations.com/tutoriels/">Alsacréations</a> + </p> + </div><!-- #pied --> + </div><!-- #global --> + </body> +</html> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php new file mode 100644 index 0000000000000000000000000000000000000000..ca12db254feb28fee2a905c7d2b66f9107fab277 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/genese.php @@ -0,0 +1,22 @@ +<div id="contenu"> + <h2>La Genèse</h2> + <p>Bienvenue sur la page de la genèse.</p> + <p>Cette page est demandée grâce à la valeur 'genese' du paramètre 'action' passé par la méthode GET, visible dans l'URL /index.php?action=genese.</p> + <table id="tableBalises"> + <thead> + <tr> + <th>Année</th> + <th>Cours</th> + </tr> + </thead> + <tbody> + <?php foreach ($cphp as $annee => $cours) { ?> + <tr> + <td><span class="html"><?php echo $annee ?></span></td> + <td><?php echo $cours ?></td> + </tr> + <?php } ?> + </tbody> + </table> + <img src="<?php echo CHEMIN_VUES ?>images/big-w3cvalidtemplate.png" alt="W3C Valid" > +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php new file mode 100644 index 0000000000000000000000000000000000000000..7fad9c5c4f813df676d56e6a03948359c07b1f76 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/header.php @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html lang="fr"> + <head> + <meta charset="utf-8" > + <title>Un site de Bonnes Nouvelles</title> + <link rel="stylesheet" type="text/css" href="views/css/base.css" media="all" > + <link rel="stylesheet" type="text/css" href="views/css/modele01.css" media="screen" > + </head> + <body> + <div id="global"> + <div id="entete"> + <h1> + <a href="index.php"> + <img src="views/images/smiley.jpg" alt="Sourire"> + </a> + Un site de Bonnes Nouvelles + </h1> + <p class="sous-titre"> + <strong>Institut Paul Lambin</strong> + :: 1ère année du baccalauréat en informatique + </p> + </div><!-- entete --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..091f757258f968217eda8d7c5ba6a2c2ec142e12 Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/big-w3cvalidtemplate.png differ diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76367dd5a1c1c1995c1b56c6d2a72b58bd335ddd Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/images/smiley.jpg differ diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php new file mode 100644 index 0000000000000000000000000000000000000000..a0306f283d8d2bc9c6b8fbe8fa65e688d2160ef7 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/livres.php @@ -0,0 +1,20 @@ +<div id="contenu"> + <h2>Les Livres</h2> + <p>Bienvenue sur la page des livres.</p> + <table id="tableBalises"> + <thead> + <tr> + <th>Titre</th> + <th>Auteur</th> + </tr> + </thead> + <tbody> + <?php for ($i=0;$i<count($tablivres);$i++) { ?> + <tr> + <td><span class="html"><?php echo $tablivres[$i]->titre() ?></span></td> + <td><?php echo $tablivres[$i]->auteur() ?></td> + </tr> + <?php } ?> + </tbody> + </table> +</div><!-- #contenu --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php new file mode 100644 index 0000000000000000000000000000000000000000..9d13787a32342a2c8163c4e4c8c71a78ab430c88 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/siteBonneNouvelles/views/menu.php @@ -0,0 +1,7 @@ +<div id="navigation"> + <ul> + <li><a href="index.php?action=genese">La genèse</a></li> + <li><a href="index.php?action=livres">Les livres</a></li> + <li><a href="index.php?action=contact">Contactez-nous</a></li> + </ul> +</div><!-- menu --> \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf new file mode 100644 index 0000000000000000000000000000000000000000..4464e6aad74e9f11c6e5746e22596bd8ee1961fc --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/sitePHPDocker/contsitephp/sitePHP.conf @@ -0,0 +1,17 @@ +<VirtualHost *:80> + # pas de servername -> site par défaut + #ServerName sitePHP + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/sitePHP + + ErrorLog ${APACHE_LOG_DIR}/sitePHP_errors.log + CustomLog ${APACHE_LOG_DIR}/sitePHP_access.log combined + + <Directory /var/www/sitePHP> + Require all granted + AllowOverride all + </Directory> + +</VirtualHost> + diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile b/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..386b26d7b591254051c42f99b792901fc93584d1 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/solutions/Dockerfile @@ -0,0 +1,12 @@ +FROM debian +MAINTAINER Olivier Choquet +RUN apt-get update && apt-get upgrade -y +RUN apt-get install apache2 -y +COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf +COPY ./siteHTML /var/www/siteHTML +#RUN a2ensite siteHTML +#RUN echo "127.0.0.1 siteHTML" >> /etc/hosts +EXPOSE 80 +CMD apachectl -D FOREGROUND +# apache fonctionne en background -> container exited +#CMD service apache2 restart diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf new file mode 100644 index 0000000000000000000000000000000000000000..1b69b13a9f0eb17aa3ce353d1213e31d29113e7f --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTML.conf @@ -0,0 +1,17 @@ +<VirtualHost *:80> + # pas de servername -> site par défaut + #ServerName siteHTML + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/siteHTML + + ErrorLog ${APACHE_LOG_DIR}/siteHTML_errors.log + CustomLog ${APACHE_LOG_DIR}/siteHTML_access.log combined + + <Directory /var/www/siteHTML> + Require all granted + AllowOverride all + </Directory> + +</VirtualHost> + diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip new file mode 100644 index 0000000000000000000000000000000000000000..044520eed595425dda93cff79f82bd28eddb1d39 Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/solutions/siteHTMLDocker.zip differ diff --git a/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip b/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip new file mode 100644 index 0000000000000000000000000000000000000000..407fb493bc73fb4f0c1ecd790d8ff03234d582e8 Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/solutions/sitePHPDocker.zip differ diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..4e6b2ab491301d0eb28b21bb6f5e65f40104e7fb --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/Dockerfile @@ -0,0 +1,12 @@ +FROM debian +MAINTAINER Pierre Michiels +RUN apt-get update && apt-get upgrade -y +RUN apt-get install apache2 -y +COPY siteHTML.conf /etc/apache2/sites-available/000-default.conf +COPY ./siteHTML /var/www/siteHTML +#RUN a2ensite siteHTML +#RUN echo "127.0.0.1 siteHTML" >> /etc/hosts +EXPOSE 80 +CMD apachectl -D FOREGROUND +#apache fonctionne en background -> container exited +#CMD service apache2 restart \ No newline at end of file diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf new file mode 100644 index 0000000000000000000000000000000000000000..79a026932d72b5bc5c771be18899a0c1d85ad199 --- /dev/null +++ b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.conf @@ -0,0 +1,16 @@ +<VirtualHost *:80> + # pas de servername -> site par défaut + #ServerName siteHTML + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/siteHTML + + ErrorLog ${APACHE_LOG_DIR}/siteHTML_errors.log + CustomLog ${APACHE_LOG_DIR}/siteHTML_access.log combined + + <Directory /var/www/siteHTML> + Require all granted + AllowOverride all + </Directory> + +</VirtualHost> diff --git a/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip new file mode 100644 index 0000000000000000000000000000000000000000..b6d397530882da88910f77dcb7e81323fc281592 Binary files /dev/null and b/TP3_02.10.20/siteHTML_IPL/transfert winscp ex1/siteHTML.zip differ