From b3668d1157abb0cd0388ef4510752e5610c731cf Mon Sep 17 00:00:00 2001 From: MDevoldere <10086604+mdevoldere@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:56:39 +0100 Subject: [PATCH 01/21] Create sitemap.json --- docs/sitemap.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/sitemap.json diff --git a/docs/sitemap.json b/docs/sitemap.json new file mode 100644 index 0000000..7e11c51 --- /dev/null +++ b/docs/sitemap.json @@ -0,0 +1,15 @@ +--- +--- +[ + {% for post in site.posts %} + { + + "title" : "{{ post.title | escape }}", + "url" : "{{ site.baseurl }}{{ post.url }}", + "category" : "{{ post.category }}", + "tags" : "{{ post.tags | join: ', ' }}", + "date" : "{{ post.date }}" + + } {% unless forloop.last %},{% endunless %} + {% endfor %} +] \ No newline at end of file From 6adca0116c8ea4ecbaa66451d68336b2b7704259 Mon Sep 17 00:00:00 2001 From: MDevoldere <10086604+mdevoldere@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:53:08 +0100 Subject: [PATCH 02/21] add sql corr --- .../03-faq/correction/01-faq-creation-bdd.sql | 41 +++++++++++++ .../03-faq/correction/02-faq-jeu-d-essai.sql | 38 ++++++++++++ .../sql/03-faq/correction/03-faq-selects.sql | 52 ++++++++++++++++ .../correction/01-rezoSocial-creation-bdd.sql | 51 ++++++++++++++++ .../correction/02-rezoSocial-jeu-d-essai.sql | 36 +++++++++++ .../correction/03-RezoSocial-selects.sql | 59 +++++++++++++++++++ 6 files changed, 277 insertions(+) create mode 100644 docs/tp/databases/sql/03-faq/correction/01-faq-creation-bdd.sql create mode 100644 docs/tp/databases/sql/03-faq/correction/02-faq-jeu-d-essai.sql create mode 100644 docs/tp/databases/sql/03-faq/correction/03-faq-selects.sql create mode 100644 docs/tp/databases/sql/05-rezo-social/correction/01-rezoSocial-creation-bdd.sql create mode 100644 docs/tp/databases/sql/05-rezo-social/correction/02-rezoSocial-jeu-d-essai.sql create mode 100644 docs/tp/databases/sql/05-rezo-social/correction/03-RezoSocial-selects.sql diff --git a/docs/tp/databases/sql/03-faq/correction/01-faq-creation-bdd.sql b/docs/tp/databases/sql/03-faq/correction/01-faq-creation-bdd.sql new file mode 100644 index 0000000..8308e69 --- /dev/null +++ b/docs/tp/databases/sql/03-faq/correction/01-faq-creation-bdd.sql @@ -0,0 +1,41 @@ +DROP DATABASE IF EXISTS minifaq; + +CREATE DATABASE mini_faq; + +USE mini_faq; + +CREATE TABLE users( + user_id INT, + user_email VARCHAR(128) NOT NULL, + user_lastname VARCHAR(50) NOT NULL, + user_firstname VARCHAR(50) NOT NULL, + PRIMARY KEY(user_id), + UNIQUE(user_email) +); + +CREATE TABLE questions( + question_id INT AUTO_INCREMENT, + question_date DATE NOT NULL, + question_label VARCHAR(255) NOT NULL, + question_response TEXT NOT NULL, + user_id INT NOT NULL, + PRIMARY KEY(question_id), + FOREIGN KEY(user_id) REFERENCES users(user_id) +); + +CREATE TABLE categories( + category_name VARCHAR(30), + category_description VARCHAR(255), + category_order TINYINT NOT NULL, + PRIMARY KEY(category_name), + UNIQUE(category_order) +); + +CREATE TABLE categories_questions( + question_id INT, + category_name VARCHAR(30), + PRIMARY KEY(question_id, category_name), + FOREIGN KEY(question_id) REFERENCES questions(question_id), + FOREIGN KEY(category_name) REFERENCES categories(category_name) +); + diff --git a/docs/tp/databases/sql/03-faq/correction/02-faq-jeu-d-essai.sql b/docs/tp/databases/sql/03-faq/correction/02-faq-jeu-d-essai.sql new file mode 100644 index 0000000..40e0d99 --- /dev/null +++ b/docs/tp/databases/sql/03-faq/correction/02-faq-jeu-d-essai.sql @@ -0,0 +1,38 @@ +use mini_faq; + +INSERT INTO users +(user_id, user_email, user_lastname, user_firstname) +VALUES +(1, 'zorb@example.com', 'Rabbit', 'Zora'), +(2, 'patchouli@example.fr', 'Patchouli', 'Édouard'), +(3, 'eva.stt@example.com', 'Satiti', 'Eva'); + +INSERT INTO questions +(question_date, question_label, question_response, user_id) +VALUES +('2024-11-23', 'Dans MySQL, quel type de données permet de stocker des valeurs numériques dont le maximum est 127 ?', 'Le type TINYINT stocke des valeurs numériques comprises entre -128 et 127', 3), +('2024-11-23', 'Quels sont les principaux serveurs SQL gratuits ?', 'MySQL, MariaDB, PostgreSQL, SQLite', 2), +('2024-11-27', 'Que signifie le sigle SGBDR ?', 'Système de Gestion de Bases de Données Relationnelles', 1), +('2024-12-05', 'Que signifie le sigle SQL ?', 'Structured Query Language !', 2), +('2024-12-05', 'Que signifie le sigle noSQL ?', 'Not Only SQL !', 3); + +INSERT INTO categories +(category_name, category_description, category_order) +VALUES +('Bases de données', 'Les questions relatives aux bases de données', 2), +('SQL', 'Les questions sur le langage SQL', 3), +('NoSQL', 'Les questions sur l’approche NoSQL', 4), +('PHP', 'Les questions relatives à PHP', 1); + +INSERT INTO categories_questions +(question_id, category_name) +VALUES +(1, 'Bases de données'), +(1, 'SQL'), +(2, 'Bases de données'), +(2, 'SQL'), +(3, 'Bases de données'), +(4, 'Bases de données'), +(4, 'SQL'), +(5, 'Bases de données'), +(5, 'NoSQL'); diff --git a/docs/tp/databases/sql/03-faq/correction/03-faq-selects.sql b/docs/tp/databases/sql/03-faq/correction/03-faq-selects.sql new file mode 100644 index 0000000..6d5a95c --- /dev/null +++ b/docs/tp/databases/sql/03-faq/correction/03-faq-selects.sql @@ -0,0 +1,52 @@ +use mini_faq; + +-- 1. Sélectionner tous les utilisateurs (identifiant, nom, prénom, email). + +SELECT user_id, user_lastname, user_firstname, user_email FROM users; + +-- 2. Sélectionner toutes les questions (date, intitulé, réponse, identifiant utilisateur) triées par date de la plus ancienne à la plus récente. + +SELECT question_date, question_label, question_response, user_id FROM questions ORDER BY question_date DESC; + +-- 3. Sélectionner les questions (identifiant, date, intitulé, réponse) de l’utilisateur n°2. + +SELECT question_id, question_date, question_label, question_response FROM questions WHERE user_id = 2; + +-- 4. Sélectionner les questions (date, intitulé, réponse, identifiant utilisateur) de l’utilisateur Eva Satiti. + +/* Sans jointure */ +SELECT question_date, question_label, question_response, questions.user_id +FROM questions,users +WHERE users.user_id = questions.user_id AND users.user_lastname = 'Satiti' AND users.user_firstname = 'Eva'; + +/* Avec jointure */ +SELECT question_date, question_label, question_response, users.user_id +FROM questions +JOIN users ON questions.user_id = users.user_id +WHERE users.user_lastname = 'Satiti' AND users.user_firstname = 'Eva'; + +-- 5. Sélectionner les questions (identifiant, date, intitulé, réponse, identifiant utilisateur) dont l’intitulé contient “SQL”. Le résultat est trié par le titre et par ordre décroissant. + +SELECT question_id, question_date, question_label, question_response +FROM questions +WHERE question_label LIKE '%SQL%' +ORDER BY question_label DESC; + +-- 6. Sélectionner les catégories (nom, description) sans question associée. + +SELECT categories.category_name, category_description FROM categories +LEFT JOIN categories_questions ON categories.category_name = categories_questions.category_name +WHERE categories_questions.category_name IS NULL; + +-- 7. Sélectionner les questions triées par titre (ordre alphabétique) avec le nom et prénom de l’auteur (nécessite une jointure). + +SELECT question_id, question_date, question_label, question_response, user_lastname, user_firstname +FROM questions +JOIN users ON users.user_id = questions.user_id; + +-- 8. Sélectionner les catégories (nom) avec, pour chaque catégorie le nombre de questions associées (nécessite une jointure). + +SELECT categories.category_name, COUNT(categories_questions.question_id) as nb_questions +FROM categories +LEFT JOIN categories_questions ON categories.category_name = categories_questions.category_name +GROUP BY categories.category_name; diff --git a/docs/tp/databases/sql/05-rezo-social/correction/01-rezoSocial-creation-bdd.sql b/docs/tp/databases/sql/05-rezo-social/correction/01-rezoSocial-creation-bdd.sql new file mode 100644 index 0000000..3864371 --- /dev/null +++ b/docs/tp/databases/sql/05-rezo-social/correction/01-rezoSocial-creation-bdd.sql @@ -0,0 +1,51 @@ +/* SUPPRIMER la base de données "rezo_social" */ + +DROP DATABASE IF EXISTS rezo_social; + +/* CREER la base de données "rezo_social" */ + +CREATE DATABASE IF NOT EXISTS rezo_social; + +/* Sélectionner la base de données */ + +USE rezo_social; + +CREATE TABLE utilisateur +( + id INT PRIMARY KEY, + nom_utilisateur VARCHAR(32) NOT NULL UNIQUE, + email VARCHAR(128) UNIQUE NOT NULL +); + +CREATE TABLE aimer +( + id INT, + pub_id INT, + PRIMARY KEY (id, pub_id) +); + +CREATE TABLE publication +( + pub_id INT AUTO_INCREMENT PRIMARY KEY, + pub_date DATETIME NOT NULL, + pub_titre VARCHAR(255), + pub_contenu TEXT, + id INT +); + +/* Modifier la table publication et y ajouter une clé étrangère */ +ALTER TABLE publication ADD FOREIGN KEY (id) REFERENCES utilisateur(id); + +ALTER TABLE aimer ADD CONSTRAINT fk_aimer_utilisateur FOREIGN KEY (id) REFERENCES utilisateur(id); + +ALTER TABLE aimer ADD CONSTRAINT fk_aimer_publication FOREIGN KEY (pub_id) REFERENCES publication(pub_id); + +/* ALTER TABLE aimer + ADD CONSTRAINT fk_aimer_utilisateur FOREIGN KEY (id) REFERENCES utilisateur(id), + ADD CONSTRAINT fk_aimer_publication FOREIGN KEY (pub_id) REFERENCES publication(pub_id); */ + +/* ALTER TABLE aimer DROP CONSTRAINT fk_aimer_utilisateur; */ + + + + diff --git a/docs/tp/databases/sql/05-rezo-social/correction/02-rezoSocial-jeu-d-essai.sql b/docs/tp/databases/sql/05-rezo-social/correction/02-rezoSocial-jeu-d-essai.sql new file mode 100644 index 0000000..6d9d8d6 --- /dev/null +++ b/docs/tp/databases/sql/05-rezo-social/correction/02-rezoSocial-jeu-d-essai.sql @@ -0,0 +1,36 @@ +use rezo_social; + +/* AJOUTER DES DONNEES DANS LA TABLE utilisateur */ + +INSERT INTO utilisateur +(id, nom_utilisateur, email) +VALUES +(1, 'Zorro', 'zorb@example.com'), +(2, 'Patchouli', 'patchouli@example.fr'), +(3, 'Eva', 'eva.stt@example.com'); + +/* AJOUTER DES DONNEES DANS LA TABLE publication */ + +INSERT INTO publication +(pub_date, pub_titre, pub_contenu, id) +VALUES +('2024-11-23 14:30', 'Il fait beau', 'Quel beau soleil aujourd’hui !', 1), +('2024-11-23 09:15', 'Les bonbons', "Les bonbons, c’est bon", 2), +('2024-11-27 08:17', 'Super resto', 'J’ai découvert un super restaurant hier soir.', 1), +('2024-12-05 17:52', 'Album disponible', 'Nouvel album de mon groupe préféré !', 2), +('2024-12-15 10:05', 'Aidez-moi', 'Je cherche une recette de gâteau au chocolat.', 3); + +INSERT INTO aimer +(id, pub_id) +VALUES +(1, 5), +(2, 4), +(3, 3), +(2, 2), +(1, 1); + +/* +SELECT * FROM utilisateur; +SELECT * FROM publication; +SELECT * FROM aimer; +*/ \ No newline at end of file diff --git a/docs/tp/databases/sql/05-rezo-social/correction/03-RezoSocial-selects.sql b/docs/tp/databases/sql/05-rezo-social/correction/03-RezoSocial-selects.sql new file mode 100644 index 0000000..66edd35 --- /dev/null +++ b/docs/tp/databases/sql/05-rezo-social/correction/03-RezoSocial-selects.sql @@ -0,0 +1,59 @@ +use rezo_social; + +/* SELECTIONNER TOUTES LES COLONNES ET TOUTES LES LIGNES */ +SELECT * FROM utilisateur; +SELECT * FROM publication; +SELECT * FROM aimer; + +-- Sélectionner tous les utilisateurs (nom d’utilisateur + email). + +SELECT nom_utilisateur, email FROM utilisateur; + +-- Sélectionner toutes les publications (titre, date, contenu, id utilisateur) +-- triées par date de la plus récente à la plus ancienne. + +SELECT pub_titre, pub_date, pub_contenu, id +FROM publication +ORDER BY pub_date DESC; + +-- Sélectionner toutes les publications +-- triées par id utilisateur puis par date de la plus récente à la plus ancienne. + +SELECT * FROM publication ORDER BY id ASC, pub_date DESC; + +-- Sélectionner les publications (pub_id, date, titre) de l’utilisateur N°2. + +SELECT pub_id, pub_date, pub_titre FROM publication +WHERE id = '2'; + +-- Sélectionner les publications (pub_id, titre, contenu) dont le titre contient la lettre “a”. +-- Le résultat est trié par le titre et par ordre décroissant. + +SELECT pub_id, pub_titre, pub_contenu FROM publication +WHERE pub_titre LIKE '%a%' +ORDER BY pub_titre DESC; + +-- Sélectionner les publications (pub_id, titre, contenu) dont le titre NE contient PAS la lettre “a”. +-- Le résultat est trié par le titre et par ordre décroissant. + +SELECT pub_id, pub_titre, pub_contenu FROM publication +WHERE pub_titre NOT LIKE '%a%' +ORDER BY pub_titre DESC; + +-- Sélectionner les utilisateurs (id, nom, email) dont l’adresse email se termine par “com”. + +SELECT id, nom_utilisateur, email FROM utilisateur +WHERE email LIKE '%com'; + +-- Sélectionner les publications triées par titre (ordre alphabétique) +-- avec le nom d’utilisateur de l’auteur (nécessite une jointure). + +-- Version sans jointure +SELECT * FROM publication, utilisateur +WHERE publication.id = utilisateur.id +ORDER BY publication.pub_titre; + +-- Version avec jointure --> A privilégier pour des raisons de performances +SELECT * FROM publication +INNER JOIN utilisateur ON publication.id = utilisateur.id +ORDER BY publication.pub_titre; From b38f3918424b19dc4a1749b0258b5047c27a86c9 Mon Sep 17 00:00:00 2001 From: MDevoldere206 <10086604+mdevoldere@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:01:40 +0100 Subject: [PATCH 03/21] update docker local --- Dockerfile-local => Dockerfile | 0 docker-compose.yml | 7 ++- .../web/php/10-php-bases/formulaires-intro.md | 57 +++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) rename Dockerfile-local => Dockerfile (100%) create mode 100644 docs/tp/web/php/10-php-bases/formulaires-intro.md diff --git a/Dockerfile-local b/Dockerfile similarity index 100% rename from Dockerfile-local rename to Dockerfile diff --git a/docker-compose.yml b/docker-compose.yml index 52b311b..ef46501 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,8 +2,8 @@ version: '2' name: arfp-io services: pages: - build: https://raw.githubusercontent.com/mdevoldere/edu-docker/develop/jekyll/Dockerfile - # build: . + # build: https://raw.githubusercontent.com/mdevoldere/edu-docker/develop/jekyll/Dockerfile + build: . image: mdevoldere-jekyll-develop container_name: arfpio ports: @@ -11,4 +11,5 @@ services: - 35728:35729 volumes: - ./docs:/srv/jekyll - command: jekyll serve --force_polling --incremental --livereload \ No newline at end of file + command: jekyll serve --force_polling --livereload + \ No newline at end of file diff --git a/docs/tp/web/php/10-php-bases/formulaires-intro.md b/docs/tp/web/php/10-php-bases/formulaires-intro.md new file mode 100644 index 0000000..7068bf6 --- /dev/null +++ b/docs/tp/web/php/10-php-bases/formulaires-intro.md @@ -0,0 +1,57 @@ +--- +title: "PHP: Formulaires" +serie: "php" +order: 12 +--- + +Le HTML permet de créer des formulaires. Cependant, pour récupérer et manipuler les données envoyées, un langage "serveur" (PHP, Java, C#...) est nécessaire. + +Voici un exemple simple de formulaire traité avec PHP pour vous aider à démarrer. + +Ce formulaire permet à un utilisateur de saisir son nom, puis affiche ces informations après la soumission. + +### Formulaire HTML + +```html +
+