├── P2
├── P2C3
│ └── index.php
├── P2C4
│ └── index.php
├── P2C5
│ └── index.php
├── P2C6
│ ├── ErrorsVersion
│ │ └── index.php
│ └── FixedVersion
│ │ └── index.php
└── P2C7
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ └── variables.php
├── P3
├── P3C1
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── submit_contact.php
│ └── variables.php
├── P3C2
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── submit_contact.php
│ └── variables.php
├── P3C3
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── submit_contact.php
│ ├── uploads
│ │ └── .gitignore
│ └── variables.php
├── P3C4
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── login.php
│ ├── submit_contact.php
│ ├── uploads
│ │ └── .gitignore
│ └── variables.php
└── P3C5
│ ├── contact.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── login.php
│ ├── logout.php
│ ├── submit_contact.php
│ ├── submit_login.php
│ ├── uploads
│ └── .gitignore
│ └── variables.php
├── P4
├── P4C2
│ └── sql
│ │ └── creation_base.sql
├── P4C3
│ ├── config
│ │ └── mysql.php
│ ├── contact.php
│ ├── databaseconnect.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── login.php
│ ├── logout.php
│ ├── sql
│ │ └── creation_base.sql
│ ├── submit_contact.php
│ ├── submit_login.php
│ ├── uploads
│ │ └── .gitignore
│ └── variables.php
├── P4C4
│ ├── EndVersion
│ │ ├── config
│ │ │ └── mysql.php
│ │ ├── contact.php
│ │ ├── databaseconnect.php
│ │ ├── footer.php
│ │ ├── functions.php
│ │ ├── header.php
│ │ ├── index.php
│ │ ├── isConnect.php
│ │ ├── login.php
│ │ ├── logout.php
│ │ ├── recipes_create.php
│ │ ├── recipes_delete.php
│ │ ├── recipes_post_create.php
│ │ ├── recipes_post_delete.php
│ │ ├── recipes_post_update.php
│ │ ├── recipes_read.php
│ │ ├── recipes_update.php
│ │ ├── sql
│ │ │ └── creation_base.sql
│ │ ├── submit_contact.php
│ │ ├── submit_login.php
│ │ ├── uploads
│ │ │ └── .gitignore
│ │ └── variables.php
│ └── StartVersion
│ │ ├── config
│ │ └── mysql.php
│ │ ├── contact.php
│ │ ├── databaseconnect.php
│ │ ├── footer.php
│ │ ├── functions.php
│ │ ├── header.php
│ │ ├── index.php
│ │ ├── isConnect.php
│ │ ├── login.php
│ │ ├── logout.php
│ │ ├── sql
│ │ └── creation_base.sql
│ │ ├── submit_contact.php
│ │ ├── submit_login.php
│ │ ├── uploads
│ │ └── .gitignore
│ │ └── variables.php
├── P4C5
│ ├── comments_create.php
│ ├── comments_post_create.php
│ ├── config
│ │ └── mysql.php
│ ├── contact.php
│ ├── databaseconnect.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── isConnect.php
│ ├── login.php
│ ├── logout.php
│ ├── recipes_create.php
│ ├── recipes_delete.php
│ ├── recipes_post_create.php
│ ├── recipes_post_delete.php
│ ├── recipes_post_update.php
│ ├── recipes_read.php
│ ├── recipes_update.php
│ ├── sql
│ │ ├── add_comments.sql
│ │ └── creation_base.sql
│ ├── submit_contact.php
│ ├── submit_login.php
│ ├── uploads
│ │ └── .gitignore
│ └── variables.php
└── P4C6
│ ├── comments_create.php
│ ├── comments_post_create.php
│ ├── config
│ └── mysql.php
│ ├── contact.php
│ ├── databaseconnect.php
│ ├── footer.php
│ ├── functions.php
│ ├── header.php
│ ├── index.php
│ ├── isConnect.php
│ ├── login.php
│ ├── logout.php
│ ├── recipes_create.php
│ ├── recipes_delete.php
│ ├── recipes_post_create.php
│ ├── recipes_post_delete.php
│ ├── recipes_post_update.php
│ ├── recipes_read.php
│ ├── recipes_update.php
│ ├── sql
│ ├── add_comments.sql
│ ├── creation_base.sql
│ └── improve_comments.sql
│ ├── submit_contact.php
│ ├── submit_login.php
│ ├── uploads
│ └── .gitignore
│ └── variables.php
└── README.md
/P2/P2C3/index.php:
--------------------------------------------------------------------------------
1 | 'Cassoulet',
6 | 'author' => 'mickael.andrieu@exemple.com',
7 | ],
8 | [
9 | 'title' => 'Couscous',
10 | 'author' => 'mickael.andrieu@exemple.com',
11 | ],
12 | [
13 | 'title' => 'Escalope milanaise',
14 | 'author' => 'mathieu.nebra@exemple.com',
15 | ],
16 | [
17 | 'title' => 'Salade Romaine',
18 | 'author' => 'laurene.castor@exemple.com',
19 | ],
20 | ];
21 | ?>
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | Affichage des recettes
30 |
31 |
32 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/P2/P2C4/index.php:
--------------------------------------------------------------------------------
1 | 'Cassoulet',
6 | 'recipe' => 'Etape 1 : des flageolets !',
7 | 'author' => 'mickael.andrieu@exemple.com',
8 | 'is_enabled' => true,
9 | ],
10 | [
11 | 'title' => 'Couscous',
12 | 'recipe' => 'Etape 1 : de la semoule',
13 | 'author' => 'mickael.andrieu@exemple.com',
14 | 'is_enabled' => false,
15 | ],
16 | [
17 | 'title' => 'Escalope milanaise',
18 | 'recipe' => 'Etape 1 : prenez une belle escalope',
19 | 'author' => 'mathieu.nebra@exemple.com',
20 | 'is_enabled' => true,
21 | ],
22 | ];
23 | ?>
24 |
25 |
26 |
27 | Affichage des recettes
28 |
32 |
33 |
34 |
35 |
Affichage des recettes
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/P2/P2C5/index.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | ];
41 |
42 | function displayAuthor(string $authorEmail, array $users): string
43 | {
44 | foreach ($users as $user) {
45 | if ($authorEmail === $user['email']) {
46 | return $user['full_name'] . '(' . $user['age'] . ' ans)';
47 | }
48 | }
49 | }
50 |
51 | function isValidRecipe(array $recipe): bool
52 | {
53 | if (array_key_exists('is_enabled', $recipe)) {
54 | $isEnabled = $recipe['is_enabled'];
55 | } else {
56 | $isEnabled = false;
57 | }
58 |
59 | return $isEnabled;
60 | }
61 |
62 | function getRecipes(array $recipes): array
63 | {
64 | $valid_recipes = [];
65 |
66 | foreach ($recipes as $recipe) {
67 | if (isValidRecipe($recipe)) {
68 | $valid_recipes[] = $recipe;
69 | }
70 | }
71 |
72 | return $valid_recipes;
73 | }
74 |
75 | ?>
76 |
77 |
78 |
79 | Recettes de cuisine
80 |
84 |
85 |
86 |
87 |
Liste des recettes de cuisine
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/P2/P2C6/ErrorsVersion/index.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com'
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'lorene.castor@exemple.com',
44 | 'is_enablad' => true,
45 | ],
46 | ];
47 |
48 | function displayAuthor(string $authorEmail, array $users): string
49 | {
50 | foreach ($users as $user) {
51 | if ($authorEmail === $user['email']) {
52 | return $user['full_name'] . '(' . $user['age'] . ' ans)';
53 | }
54 | }
55 | }
56 |
57 | function isValidRecipe(array $recipe): bool
58 | {
59 | return $recipe['is_enabled'];
60 | }
61 | function getRecipes(array $recipes): array
62 | {
63 | $valid_recipes = [];
64 |
65 | foreach ($recipes as $recipe) {
66 | if (isValidRecipe($recipe)) {
67 | $valid_recipes[] = $recipe;
68 | }
69 | }
70 |
71 | return $valid_recipes;
72 | }
73 |
74 | ?>
75 |
76 |
77 |
78 | Recettes de cuisine : Erreur(
79 |
83 |
84 |
85 |
86 |
Liste des recettes de cuisine
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/P2/P2C6/FixedVersion/index.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'lorene.castor@exemple.com',
44 | 'is_enabled' => true,
45 | ],
46 | ];
47 |
48 | function displayAuthor(string $authorEmail, array $users): string
49 | {
50 | foreach ($users as $user) {
51 | if ($authorEmail === $user['email']) {
52 | return $user['full_name'] . '(' . $user['age'] . ' ans)';
53 | }
54 | }
55 |
56 | return 'Auteur inconnu';
57 | }
58 |
59 | function isValidRecipe(array $recipe): bool
60 | {
61 | if (array_key_exists('is_enabled', $recipe)) {
62 | $isEnabled = $recipe['is_enabled'];
63 | } else {
64 | $isEnabled = false;
65 | }
66 |
67 | return $isEnabled;
68 | }
69 |
70 | function getRecipes(array $recipes): array
71 | {
72 | $valid_recipes = [];
73 |
74 | foreach ($recipes as $recipe) {
75 | if (isValidRecipe($recipe)) {
76 | $valid_recipes[] = $recipe;
77 | }
78 | }
79 |
80 | return $valid_recipes;
81 | }
82 |
83 | ?>
84 |
85 |
86 |
87 | Recettes de cuisine : Correction(
88 |
92 |
93 |
94 |
95 |
Liste des recettes de cuisine
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/P2/P2C7/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Site de Recettes - Page d'accueil
8 |
12 |
13 |
14 |
15 |
16 |
17 |
Contactez nous
18 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/P2/P2C7/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P2/P2C7/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
--------------------------------------------------------------------------------
/P2/P2C7/index.php:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de recettes - Page d'accueil
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Site de recettes
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/P2/P2C7/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'laurene.castor@exemple.com',
44 | 'is_enabled' => false,
45 | ],
46 | ];
47 |
--------------------------------------------------------------------------------
/P3/P3C1/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Site de Recettes - Page d'accueil
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Contactez nous
15 |
16 |
17 |
Email
18 |
19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | Votre message
23 |
24 |
25 | Envoyer
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/P3/P3C1/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P3/P3C1/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
--------------------------------------------------------------------------------
/P3/P3C1/index.php:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de recettes - Page d'accueil
14 |
18 |
19 |
20 |
21 |
22 |
23 |
Site de recettes
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P3/P3C1/submit_contact.php:
--------------------------------------------------------------------------------
1 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | Site de Recettes - Contact reçu
29 |
30 |
31 |
32 |
33 |
34 |
35 |
Message bien reçu !
36 |
37 |
38 |
39 |
Rappel de vos informations
40 |
Email :
41 |
Message :
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/P3/P3C1/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'laurene.castor@exemple.com',
44 | 'is_enabled' => false,
45 | ],
46 | ];
47 |
--------------------------------------------------------------------------------
/P3/P3C2/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Site de Recettes - Page d'accueil
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Contactez nous
15 |
16 |
17 |
Email
18 |
19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | Votre message
23 |
24 |
25 | Envoyer
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/P3/P3C2/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P3/P3C2/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
--------------------------------------------------------------------------------
/P3/P3C2/index.php:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de recettes - Page d'accueil
14 |
18 |
19 |
20 |
21 |
22 |
23 |
Site de recettes
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P3/P3C2/submit_contact.php:
--------------------------------------------------------------------------------
1 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | Site de Recettes - Contact reçu
29 |
30 |
31 |
32 |
33 |
34 |
35 |
Message bien reçu !
36 |
37 |
38 |
39 |
Rappel de vos informations
40 |
Email :
41 |
Message :
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/P3/P3C2/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'laurene.castor@exemple.com',
44 | 'is_enabled' => false,
45 | ],
46 | ];
47 |
--------------------------------------------------------------------------------
/P3/P3C3/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Site de Recettes - Page d'accueil
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Contactez nous
15 |
16 |
17 |
Email
18 |
19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | Votre message
23 |
24 |
25 |
26 | Votre capture d'écran
27 |
28 |
29 | Envoyer
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/P3/P3C3/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P3/P3C3/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
--------------------------------------------------------------------------------
/P3/P3C3/index.php:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de recettes - Page d'accueil
14 |
18 |
19 |
20 |
21 |
22 |
23 |
Site de recettes
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P3/P3C3/submit_contact.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P3/P3C3/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P3/P3C3/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | ],
9 | [
10 | 'full_name' => 'Mathieu Nebra',
11 | 'email' => 'mathieu.nebra@exemple.com',
12 | 'age' => 34,
13 | ],
14 | [
15 | 'full_name' => 'Laurène Castor',
16 | 'email' => 'laurene.castor@exemple.com',
17 | 'age' => 28,
18 | ],
19 | ];
20 |
21 | $recipes = [
22 | [
23 | 'title' => 'Cassoulet',
24 | 'recipe' => 'Etape 1 : des flageolets !',
25 | 'author' => 'mickael.andrieu@exemple.com',
26 | 'is_enabled' => true,
27 | ],
28 | [
29 | 'title' => 'Couscous',
30 | 'recipe' => 'Etape 1 : de la semoule',
31 | 'author' => 'mickael.andrieu@exemple.com',
32 | 'is_enabled' => false,
33 | ],
34 | [
35 | 'title' => 'Escalope milanaise',
36 | 'recipe' => 'Etape 1 : prenez une belle escalope',
37 | 'author' => 'mathieu.nebra@exemple.com',
38 | 'is_enabled' => true,
39 | ],
40 | [
41 | 'title' => 'Salade Romaine',
42 | 'recipe' => 'Etape 1 : prenez une belle salade',
43 | 'author' => 'laurene.castor@exemple.com',
44 | 'is_enabled' => false,
45 | ],
46 | ];
47 |
--------------------------------------------------------------------------------
/P3/P3C4/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Site de Recettes - Page d'accueil
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Contactez nous
15 |
16 |
17 |
Email
18 |
19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | Votre message
23 |
24 |
25 |
26 | Votre capture d'écran
27 |
28 |
29 | Envoyer
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/P3/P3C4/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P3/P3C4/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
--------------------------------------------------------------------------------
/P3/P3C4/index.php:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de recettes - Page d'accueil
14 |
18 |
19 |
20 |
21 |
22 |
23 |
Site de recettes
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/P3/P3C4/login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
23 | ];
24 | }
25 | }
26 |
27 | if (!isset($loggedUser)) {
28 | $errorMessage = sprintf(
29 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
30 | $postData['email'],
31 | strip_tags($postData['password'])
32 | );
33 | }
34 | }
35 | }
36 | ?>
37 |
38 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
Email
51 |
52 |
L'email utilisé lors de la création de compte.
53 |
54 |
55 | Mot de passe
56 |
57 |
58 | Envoyer
59 |
60 |
61 |
62 |
63 | Bonjour et bienvenue sur le site !
64 |
65 |
66 |
--------------------------------------------------------------------------------
/P3/P3C4/submit_contact.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P3/P3C4/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P3/P3C4/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | 'password' => 'devine',
9 | ],
10 | [
11 | 'full_name' => 'Mathieu Nebra',
12 | 'email' => 'mathieu.nebra@exemple.com',
13 | 'age' => 34,
14 | 'password' => 'MiamMiam',
15 | ],
16 | [
17 | 'full_name' => 'Laurène Castor',
18 | 'email' => 'laurene.castor@exemple.com',
19 | 'age' => 28,
20 | 'password' => 'laCasto28',
21 | ],
22 | ];
23 |
24 | $recipes = [
25 | [
26 | 'title' => 'Cassoulet',
27 | 'recipe' => 'Etape 1 : des flageolets !',
28 | 'author' => 'mickael.andrieu@exemple.com',
29 | 'is_enabled' => true,
30 | ],
31 | [
32 | 'title' => 'Couscous',
33 | 'recipe' => 'Etape 1 : de la semoule',
34 | 'author' => 'mickael.andrieu@exemple.com',
35 | 'is_enabled' => false,
36 | ],
37 | [
38 | 'title' => 'Escalope milanaise',
39 | 'recipe' => 'Etape 1 : prenez une belle escalope',
40 | 'author' => 'mathieu.nebra@exemple.com',
41 | 'is_enabled' => true,
42 | ],
43 | [
44 | 'title' => 'Salade Romaine',
45 | 'recipe' => 'Etape 1 : prenez une belle salade',
46 | 'author' => 'laurene.castor@exemple.com',
47 | 'is_enabled' => false,
48 | ],
49 | ];
50 |
--------------------------------------------------------------------------------
/P3/P3C5/contact.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P3/P3C5/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P3/P3C5/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
--------------------------------------------------------------------------------
/P3/P3C5/index.php:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Site de recettes - Page d'accueil
15 |
19 |
20 |
21 |
22 |
23 |
24 |
Site de recettes
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/P3/P3C5/login.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P3/P3C5/logout.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P3/P3C5/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
25 | 'user_id' => $user['user_id'],
26 | ];
27 | }
28 | }
29 |
30 | if (!isset($_SESSION['LOGGED_USER'])) {
31 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
32 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
33 | $postData['email'],
34 | strip_tags($postData['password'])
35 | );
36 | }
37 | }
38 |
39 | redirectToUrl('index.php');
40 | }
41 |
--------------------------------------------------------------------------------
/P3/P3C5/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P3/P3C5/variables.php:
--------------------------------------------------------------------------------
1 | 'Mickaël Andrieu',
6 | 'email' => 'mickael.andrieu@exemple.com',
7 | 'age' => 34,
8 | 'password' => 'devine',
9 | ],
10 | [
11 | 'full_name' => 'Mathieu Nebra',
12 | 'email' => 'mathieu.nebra@exemple.com',
13 | 'age' => 34,
14 | 'password' => 'MiamMiam',
15 | ],
16 | [
17 | 'full_name' => 'Laurène Castor',
18 | 'email' => 'laurene.castor@exemple.com',
19 | 'age' => 28,
20 | 'password' => 'laCasto28',
21 | ],
22 | ];
23 |
24 | $recipes = [
25 | [
26 | 'title' => 'Cassoulet',
27 | 'recipe' => 'Etape 1 : des flageolets !',
28 | 'author' => 'mickael.andrieu@exemple.com',
29 | 'is_enabled' => true,
30 | ],
31 | [
32 | 'title' => 'Couscous',
33 | 'recipe' => 'Etape 1 : de la semoule',
34 | 'author' => 'mickael.andrieu@exemple.com',
35 | 'is_enabled' => false,
36 | ],
37 | [
38 | 'title' => 'Escalope milanaise',
39 | 'recipe' => 'Etape 1 : prenez une belle escalope',
40 | 'author' => 'mathieu.nebra@exemple.com',
41 | 'is_enabled' => true,
42 | ],
43 | [
44 | 'title' => 'Salade Romaine',
45 | 'recipe' => 'Etape 1 : prenez une belle salade',
46 | 'author' => 'laurene.castor@exemple.com',
47 | 'is_enabled' => false,
48 | ],
49 | ];
50 |
--------------------------------------------------------------------------------
/P4/P4C2/sql/creation_base.sql:
--------------------------------------------------------------------------------
1 | -- Création de la BDD
2 | CREATE DATABASE IF NOT EXISTS `partage_de_recettes`;
3 | USE `partage_de_recettes`;
4 |
5 | -- Création de la table recipes
6 | CREATE TABLE IF NOT EXISTS `recipes` (
7 | `recipe_id` int(11) NOT NULL AUTO_INCREMENT,
8 | `title` varchar(128) NOT NULL,
9 | `recipe` TEXT NOT NULL,
10 | `author` varchar(255) NOT NULL,
11 | `is_enabled` BOOLEAN NOT NULL,
12 | PRIMARY KEY (`recipe_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
15 | -- Création de la table users
16 | CREATE TABLE IF NOT EXISTS `users` (
17 | `user_id` int(11) NOT NULL AUTO_INCREMENT,
18 | `full_name` varchar(64) NOT NULL,
19 | `email` varchar(255) NOT NULL,
20 | `password` varchar(255) NOT NULL,
21 | `age` INT NOT NULL,
22 | PRIMARY KEY (`user_id`)
23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
24 |
25 | delete from `users`;
26 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'devine', 1);
27 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2);
28 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3);
29 |
30 | delete from `recipes`;
31 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 1, "Le cassoulet est une spécialité régionale du Languedoc, à base de haricots secs, généralement blancs, et de viande. À son origine, il était à base de fèves. Le cassoulet tient son nom de la cassole en terre cuite émaillée dite caçòla1 en occitan et fabriquée à Issel.\n", 1, 'Cassoulet');
32 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 0, "Le couscous est d'une part une semoule de blé dur préparée à l'huile d'olive (un des aliments de base traditionnel de la cuisine des pays du Maghreb) et d'autre part, une spécialité culinaire issue de la cuisine berbère, à base de couscous, de légumes, d'épices, d'huile d'olive et de viande (rouge ou de volaille) ou de poisson.", 2, 'Couscous');
33 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('laurene.castor@exemple.com', 0, "La salade César est une recette de cuisine de salade composée de la cuisine américaine, traditionnellement préparée en salle à côté de la table, à base de laitue romaine, œuf dur, croûtons, parmesan et de « sauce César » à base de parmesan râpé, huile d'olive, pâte d'anchois, ail, vinaigre de vin, moutarde, jaune d'œuf et sauce Worcestershire.", 4, 'Salade Romaine');
34 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mathieu.nebra@exemple.com', 1, "L'escalope à la milanaise, ou escalope milanaise est une escalope panée, de viande de veau, traditionnellement prise dans le faux-filet. Historiquement, on la cuit avec du beurre. Elle est généralement servie avec salade ou frites, accompagnée de sauce mayonnaise. On peut y ajouter un filet de jus de citron.\n\nEn Italie, ce mets ne se sert pas avec des pâtes.", 3, 'Escalope milanaise');
35 |
--------------------------------------------------------------------------------
/P4/P4C3/config/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P4/P4C3/databaseconnect.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10 | } catch (Exception $exception) {
11 | die('Erreur : ' . $exception->getMessage());
12 | }
13 |
--------------------------------------------------------------------------------
/P4/P4C3/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P4/P4C3/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
--------------------------------------------------------------------------------
/P4/P4C3/index.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Site de recettes - Page d'accueil
17 |
21 |
22 |
23 |
24 |
25 |
26 |
Site de recettes
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/P4/P4C3/login.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P4/P4C3/logout.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P4/P4C3/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
27 | 'user_id' => $user['user_id'],
28 | ];
29 | }
30 | }
31 |
32 | if (!isset($_SESSION['LOGGED_USER'])) {
33 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
34 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
35 | $postData['email'],
36 | strip_tags($postData['password'])
37 | );
38 | }
39 | }
40 |
41 | redirectToUrl('index.php');
42 | }
43 |
--------------------------------------------------------------------------------
/P4/P4C3/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P4/P4C3/variables.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM users');
5 | $usersStatement->execute();
6 | $users = $usersStatement->fetchAll();
7 |
8 | $recipesStatement = $mysqlClient->prepare('SELECT * FROM recipes WHERE is_enabled is TRUE');
9 | $recipesStatement->execute();
10 | $recipes = $recipesStatement->fetchAll();
11 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/config/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/databaseconnect.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10 | } catch (Exception $exception) {
11 | die('Erreur : ' . $exception->getMessage());
12 | }
13 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/index.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Site de recettes - Page d'accueil
17 |
21 |
22 |
23 |
24 |
25 |
26 |
Site de recettes
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/isConnect.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/logout.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de Recettes - Ajout de recette
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Ajouter une recette
25 |
26 |
27 |
Titre de la recette
28 |
29 |
Choisissez un titre percutant !
30 |
31 |
32 | Description de la recette
33 |
34 |
35 | Envoyer
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_delete.php:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Site de Recettes - Supprimer la recette ?
25 |
29 |
30 |
31 |
32 |
33 |
34 |
Supprimer la recette ?
35 |
36 |
37 | Identifiant de la recette
38 |
39 |
40 |
41 | La suppression est définitive
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_post_create.php:
--------------------------------------------------------------------------------
1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)');
30 | $insertRecipe->execute([
31 | 'title' => $title,
32 | 'recipe' => $recipe,
33 | 'is_enabled' => 1,
34 | 'author' => $_SESSION['LOGGED_USER']['email'],
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
Recette ajoutée avec succès !
57 |
58 |
59 |
60 |
61 |
62 |
Email :
63 |
Recette :
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_post_delete.php:
--------------------------------------------------------------------------------
1 | prepare('DELETE FROM recipes WHERE recipe_id = :id');
22 | $deleteRecipeStatement->execute([
23 | 'id' => (int)$postData['id'],
24 | ]);
25 |
26 | redirectToUrl('index.php');
27 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_post_update.php:
--------------------------------------------------------------------------------
1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id');
31 | $insertRecipeStatement->execute([
32 | 'title' => $title,
33 | 'recipe' => $recipe,
34 | 'id' => $id,
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
Recette modifiée avec succès !
56 |
57 |
58 |
59 |
60 |
61 |
Email :
62 |
Recette :
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_read.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT r.* FROM recipes r WHERE r.recipe_id = :id ');
20 | $retrieveRecipeStatement->execute([
21 | 'id' => (int)$getData['id'],
22 | ]);
23 | $recipe = $retrieveRecipeStatement->fetch();
24 |
25 | if (!$recipe) {
26 | echo('La recette n\'existe pas');
27 | return;
28 | }
29 | ?>
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | Site de Recettes -
38 |
42 |
43 |
44 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/recipes_update.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id');
20 | $retrieveRecipeStatement->execute([
21 | 'id' => (int)$getData['id'],
22 | ]);
23 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC);
24 |
25 | // si la recette n'est pas trouvée, renvoyer un message d'erreur
26 | ?>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Site de Recettes - Edition de recette
35 |
39 |
40 |
41 |
42 |
43 |
44 |
Mettre à jour
45 |
46 |
47 | Identifiant de la recette
48 |
49 |
50 |
51 |
Titre de la recette
52 |
53 |
Choisissez un titre percutant !
54 |
55 |
56 | Description de la recette
57 |
58 |
59 | Envoyer
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/sql/creation_base.sql:
--------------------------------------------------------------------------------
1 | -- Création de la BDD
2 | CREATE DATABASE IF NOT EXISTS `partage_de_recettes`;
3 | USE `partage_de_recettes`;
4 |
5 | -- Création de la table recipes
6 | CREATE TABLE IF NOT EXISTS `recipes` (
7 | `recipe_id` int(11) NOT NULL AUTO_INCREMENT,
8 | `title` varchar(128) NOT NULL,
9 | `recipe` TEXT NOT NULL,
10 | `author` varchar(255) NOT NULL,
11 | `is_enabled` BOOLEAN NOT NULL,
12 | PRIMARY KEY (`recipe_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
15 | -- Création de la table users
16 | CREATE TABLE IF NOT EXISTS `users` (
17 | `user_id` int(11) NOT NULL AUTO_INCREMENT,
18 | `full_name` varchar(64) NOT NULL,
19 | `email` varchar(255) NOT NULL,
20 | `password` varchar(255) NOT NULL,
21 | `age` INT NOT NULL,
22 | PRIMARY KEY (`user_id`)
23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
24 |
25 | delete from `users`;
26 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'devine', 1);
27 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2);
28 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3);
29 |
30 | delete from `recipes`;
31 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 1, "Le cassoulet est une spécialité régionale du Languedoc, à base de haricots secs, généralement blancs, et de viande. À son origine, il était à base de fèves. Le cassoulet tient son nom de la cassole en terre cuite émaillée dite caçòla1 en occitan et fabriquée à Issel.\n", 1, 'Cassoulet');
32 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 0, "Le couscous est d'une part une semoule de blé dur préparée à l'huile d'olive (un des aliments de base traditionnel de la cuisine des pays du Maghreb) et d'autre part, une spécialité culinaire issue de la cuisine berbère, à base de couscous, de légumes, d'épices, d'huile d'olive et de viande (rouge ou de volaille) ou de poisson.", 2, 'Couscous');
33 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('laurene.castor@exemple.com', 0, "La salade César est une recette de cuisine de salade composée de la cuisine américaine, traditionnellement préparée en salle à côté de la table, à base de laitue romaine, œuf dur, croûtons, parmesan et de « sauce César » à base de parmesan râpé, huile d'olive, pâte d'anchois, ail, vinaigre de vin, moutarde, jaune d'œuf et sauce Worcestershire.", 4, 'Salade Romaine');
34 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mathieu.nebra@exemple.com', 1, "L'escalope à la milanaise, ou escalope milanaise est une escalope panée, de viande de veau, traditionnellement prise dans le faux-filet. Historiquement, on la cuit avec du beurre. Elle est généralement servie avec salade ou frites, accompagnée de sauce mayonnaise. On peut y ajouter un filet de jus de citron.\n\nEn Italie, ce mets ne se sert pas avec des pâtes.", 3, 'Escalope milanaise');
35 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/submit_contact.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
27 | 'user_id' => $user['user_id'],
28 | ];
29 | }
30 | }
31 |
32 | if (!isset($_SESSION['LOGGED_USER'])) {
33 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
34 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
35 | $postData['email'],
36 | strip_tags($postData['password'])
37 | );
38 | }
39 | }
40 |
41 | redirectToUrl('index.php');
42 | }
43 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P4/P4C4/EndVersion/variables.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM users');
5 | $usersStatement->execute();
6 | $users = $usersStatement->fetchAll();
7 |
8 | $recipesStatement = $mysqlClient->prepare('SELECT * FROM recipes WHERE is_enabled is TRUE');
9 | $recipesStatement->execute();
10 | $recipes = $recipesStatement->fetchAll();
11 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/config/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/databaseconnect.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10 | } catch (Exception $exception) {
11 | die('Erreur : ' . $exception->getMessage());
12 | }
13 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/index.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Site de recettes - Page d'accueil
17 |
21 |
22 |
23 |
24 |
25 |
26 |
Site de recettes
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/isConnect.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/logout.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
27 | 'user_id' => $user['user_id'],
28 | ];
29 | }
30 | }
31 |
32 | if (!isset($_SESSION['LOGGED_USER'])) {
33 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
34 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
35 | $postData['email'],
36 | strip_tags($postData['password'])
37 | );
38 | }
39 | }
40 |
41 | redirectToUrl('index.php');
42 | }
43 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P4/P4C4/StartVersion/variables.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM users');
5 | $usersStatement->execute();
6 | $users = $usersStatement->fetchAll();
7 |
8 | $recipesStatement = $mysqlClient->prepare('SELECT * FROM recipes WHERE is_enabled is TRUE');
9 | $recipesStatement->execute();
10 | $recipes = $recipesStatement->fetchAll();
11 |
--------------------------------------------------------------------------------
/P4/P4C5/comments_create.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Postez un commentaire
11 |
12 |
13 | Envoyer
14 |
15 |
--------------------------------------------------------------------------------
/P4/P4C5/comments_post_create.php:
--------------------------------------------------------------------------------
1 | prepare('INSERT INTO comments(comment, recipe_id, user_id) VALUES (:comment, :recipe_id, :user_id)');
33 | $insertRecipe->execute([
34 | 'comment' => $comment,
35 | 'recipe_id' => $recipeId,
36 | 'user_id' => $_SESSION['LOGGED_USER']['user_id'],
37 | ]);
38 |
39 | ?>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Site de Recettes - Création de commentaire
48 |
52 |
53 |
54 |
55 |
56 |
57 |
Commentaire ajouté avec succès !
58 |
59 |
60 |
61 |
Votre commentaire :
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/P4/P4C5/config/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P4/P4C5/databaseconnect.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10 | } catch (Exception $exception) {
11 | die('Erreur : ' . $exception->getMessage());
12 | }
13 |
--------------------------------------------------------------------------------
/P4/P4C5/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P4/P4C5/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
--------------------------------------------------------------------------------
/P4/P4C5/index.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Site de recettes - Page d'accueil
17 |
21 |
22 |
23 |
24 |
25 |
26 |
Site de recettes
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/P4/P4C5/isConnect.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P4/P4C5/logout.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de Recettes - Ajout de recette
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Ajouter une recette
25 |
26 |
27 |
Titre de la recette
28 |
29 |
Choisissez un titre percutant !
30 |
31 |
32 | Description de la recette
33 |
34 |
35 | Envoyer
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_delete.php:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Site de Recettes - Supprimer la recette ?
25 |
29 |
30 |
31 |
32 |
33 |
34 |
Supprimer la recette ?
35 |
36 |
37 | Identifiant de la recette
38 |
39 |
40 |
41 | La suppression est définitive
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_post_create.php:
--------------------------------------------------------------------------------
1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)');
30 | $insertRecipe->execute([
31 | 'title' => $title,
32 | 'recipe' => $recipe,
33 | 'is_enabled' => 1,
34 | 'author' => $_SESSION['LOGGED_USER']['email'],
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
Recette ajoutée avec succès !
57 |
58 |
59 |
60 |
61 |
62 |
Email :
63 |
Recette :
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_post_delete.php:
--------------------------------------------------------------------------------
1 | prepare('DELETE FROM recipes WHERE recipe_id = :id');
22 | $deleteRecipeStatement->execute([
23 | 'id' => (int)$postData['id'],
24 | ]);
25 |
26 | redirectToUrl('index.php');
27 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_post_update.php:
--------------------------------------------------------------------------------
1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id');
31 | $insertRecipeStatement->execute([
32 | 'title' => $title,
33 | 'recipe' => $recipe,
34 | 'id' => $id,
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
Recette modifiée avec succès !
56 |
57 |
58 |
59 |
60 |
61 |
Email :
62 |
Recette :
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_read.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT r.*, c.comment_id, c.comment, c.user_id, u.full_name FROM recipes r
20 | LEFT JOIN comments c on c.recipe_id = r.recipe_id
21 | LEFT JOIN users u ON u.user_id = c.user_id
22 | WHERE r.recipe_id = :id ');
23 | $retrieveRecipeWithCommentsStatement->execute([
24 | 'id' => (int)$getData['id'],
25 | ]);
26 | $recipeWithComments = $retrieveRecipeWithCommentsStatement->fetchAll(PDO::FETCH_ASSOC);
27 |
28 | if ($recipeWithComments === []) {
29 | echo('La recette n\'existe pas');
30 | return;
31 | }
32 |
33 | $recipe = [
34 | 'recipe_id' => $recipeWithComments[0]['recipe_id'],
35 | 'title' => $recipeWithComments[0]['title'],
36 | 'recipe' => $recipeWithComments[0]['recipe'],
37 | 'author' => $recipeWithComments[0]['author'],
38 | 'comments' => [],
39 | ];
40 |
41 | foreach ($recipeWithComments as $comment) {
42 | if (!is_null($comment['comment_id'])) {
43 | $recipe['comments'][] = [
44 | 'comment_id' => $comment['comment_id'],
45 | 'comment' => $comment['comment'],
46 | 'user_id' => (int) $comment['user_id'],
47 | 'full_name' => $comment['full_name']
48 | ];
49 | }
50 | }
51 | ?>
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | Site de Recettes -
60 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
78 |
79 |
Commentaires
80 |
81 |
82 |
83 |
87 |
88 |
89 |
90 |
91 |
Aucun commentaire
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/P4/P4C5/recipes_update.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id');
20 | $retrieveRecipeStatement->execute([
21 | 'id' => (int)$getData['id'],
22 | ]);
23 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC);
24 |
25 | // si la recette n'est pas trouvée, renvoyer un message d'erreur
26 | ?>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Site de Recettes - Edition de recette
35 |
39 |
40 |
41 |
42 |
43 |
44 |
Mettre à jour
45 |
46 |
47 | Identifiant de la recette
48 |
49 |
50 |
51 |
Titre de la recette
52 |
53 |
Choisissez un titre percutant !
54 |
55 |
56 | Description de la recette
57 |
58 |
59 | Envoyer
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/P4/P4C5/sql/add_comments.sql:
--------------------------------------------------------------------------------
1 | USE `partage_de_recettes`;
2 |
3 | CREATE TABLE IF NOT EXISTS `comments` (
4 | `comment_id` int(11) NOT NULL AUTO_INCREMENT,
5 | `user_id` int(11) NOT NULL,
6 | `recipe_id` int(11) NOT NULL,
7 | `comment` longtext NOT NULL,
8 | PRIMARY KEY (`comment_id`),
9 | KEY `IDX_5F9E962A9D86650F` (`user_id`),
10 | KEY `IDX_5F9E962A69574A48` (`recipe_id`),
11 | CONSTRAINT `FK_5F9E962A69574A48` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`recipe_id`) ON DELETE CASCADE,
12 | CONSTRAINT `FK_5F9E962A9D86650F` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
--------------------------------------------------------------------------------
/P4/P4C5/sql/creation_base.sql:
--------------------------------------------------------------------------------
1 | -- Création de la BDD
2 | CREATE DATABASE IF NOT EXISTS `partage_de_recettes`;
3 | USE `partage_de_recettes`;
4 |
5 | -- Création de la table recipes
6 | CREATE TABLE IF NOT EXISTS `recipes` (
7 | `recipe_id` int(11) NOT NULL AUTO_INCREMENT,
8 | `title` varchar(128) NOT NULL,
9 | `recipe` TEXT NOT NULL,
10 | `author` varchar(255) NOT NULL,
11 | `is_enabled` BOOLEAN NOT NULL,
12 | PRIMARY KEY (`recipe_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
15 | -- Création de la table users
16 | CREATE TABLE IF NOT EXISTS `users` (
17 | `user_id` int(11) NOT NULL AUTO_INCREMENT,
18 | `full_name` varchar(64) NOT NULL,
19 | `email` varchar(255) NOT NULL,
20 | `password` varchar(255) NOT NULL,
21 | `age` INT NOT NULL,
22 | PRIMARY KEY (`user_id`)
23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
24 |
25 | delete from `users`;
26 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'devine', 1);
27 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2);
28 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3);
29 |
30 | delete from `recipes`;
31 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 1, "Le cassoulet est une spécialité régionale du Languedoc, à base de haricots secs, généralement blancs, et de viande. À son origine, il était à base de fèves. Le cassoulet tient son nom de la cassole en terre cuite émaillée dite caçòla1 en occitan et fabriquée à Issel.\n", 1, 'Cassoulet');
32 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 0, "Le couscous est d'une part une semoule de blé dur préparée à l'huile d'olive (un des aliments de base traditionnel de la cuisine des pays du Maghreb) et d'autre part, une spécialité culinaire issue de la cuisine berbère, à base de couscous, de légumes, d'épices, d'huile d'olive et de viande (rouge ou de volaille) ou de poisson.", 2, 'Couscous');
33 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('laurene.castor@exemple.com', 0, "La salade César est une recette de cuisine de salade composée de la cuisine américaine, traditionnellement préparée en salle à côté de la table, à base de laitue romaine, œuf dur, croûtons, parmesan et de « sauce César » à base de parmesan râpé, huile d'olive, pâte d'anchois, ail, vinaigre de vin, moutarde, jaune d'œuf et sauce Worcestershire.", 4, 'Salade Romaine');
34 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mathieu.nebra@exemple.com', 1, "L'escalope à la milanaise, ou escalope milanaise est une escalope panée, de viande de veau, traditionnellement prise dans le faux-filet. Historiquement, on la cuit avec du beurre. Elle est généralement servie avec salade ou frites, accompagnée de sauce mayonnaise. On peut y ajouter un filet de jus de citron.\n\nEn Italie, ce mets ne se sert pas avec des pâtes.", 3, 'Escalope milanaise');
35 |
--------------------------------------------------------------------------------
/P4/P4C5/submit_contact.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P4/P4C5/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
27 | 'user_id' => $user['user_id'],
28 | ];
29 | }
30 | }
31 |
32 | if (!isset($_SESSION['LOGGED_USER'])) {
33 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
34 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
35 | $postData['email'],
36 | strip_tags($postData['password'])
37 | );
38 | }
39 | }
40 |
41 | redirectToUrl('index.php');
42 | }
43 |
--------------------------------------------------------------------------------
/P4/P4C5/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P4/P4C5/variables.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM users');
5 | $usersStatement->execute();
6 | $users = $usersStatement->fetchAll();
7 |
8 | $recipesStatement = $mysqlClient->prepare('SELECT * FROM recipes WHERE is_enabled is TRUE');
9 | $recipesStatement->execute();
10 | $recipes = $recipesStatement->fetchAll();
11 |
--------------------------------------------------------------------------------
/P4/P4C6/comments_create.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Evaluez la recette (de 1 à 5)
11 |
12 |
13 |
14 | Postez un commentaire
15 |
16 |
17 | Envoyer
18 |
19 |
--------------------------------------------------------------------------------
/P4/P4C6/comments_post_create.php:
--------------------------------------------------------------------------------
1 | 5) {
30 | echo 'La note doit être comprise entre 1 et 5';
31 | return;
32 | }
33 |
34 | if ($comment === '') {
35 | echo 'Le commentaire ne peut pas être vide.';
36 | return;
37 | }
38 |
39 | $insertRecipe = $mysqlClient->prepare('INSERT INTO comments(comment, recipe_id, user_id, review) VALUES (:comment, :recipe_id, :user_id, :review)');
40 | $insertRecipe->execute([
41 | 'comment' => $comment,
42 | 'recipe_id' => $recipeId,
43 | 'user_id' => $_SESSION['LOGGED_USER']['user_id'],
44 | 'review' => $review,
45 | ]);
46 |
47 | ?>
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | Site de Recettes - Création de commentaire
56 |
60 |
61 |
62 |
63 |
64 |
65 |
Commentaire ajouté avec succès !
66 |
67 |
68 |
69 |
Note : / 5
70 |
Votre commentaire :
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/P4/P4C6/config/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Site de Recettes - Page d'accueil
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Contactez nous
17 |
18 |
19 |
Email
20 |
21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | Votre message
25 |
26 |
27 |
28 | Votre capture d'écran
29 |
30 |
31 | Envoyer
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/P4/P4C6/databaseconnect.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10 | } catch (Exception $exception) {
11 | die('Erreur : ' . $exception->getMessage());
12 | }
13 |
--------------------------------------------------------------------------------
/P4/P4C6/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | © 2021 Copyright:
4 |
OpenClassrooms
5 |
6 |
7 |
--------------------------------------------------------------------------------
/P4/P4C6/functions.php:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
--------------------------------------------------------------------------------
/P4/P4C6/index.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Site de recettes - Page d'accueil
17 |
21 |
22 |
23 |
24 |
25 |
26 |
Site de recettes
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/P4/P4C6/isConnect.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
Email
15 |
16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | Mot de passe
20 |
21 |
22 | Envoyer
23 |
24 |
25 |
26 |
27 | Bonjour et bienvenue sur le site !
28 |
29 |
30 |
--------------------------------------------------------------------------------
/P4/P4C6/logout.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Site de Recettes - Ajout de recette
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Ajouter une recette
25 |
26 |
27 |
Titre de la recette
28 |
29 |
Choisissez un titre percutant !
30 |
31 |
32 | Description de la recette
33 |
34 |
35 | Envoyer
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_delete.php:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Site de Recettes - Supprimer la recette ?
25 |
29 |
30 |
31 |
32 |
33 |
34 |
Supprimer la recette ?
35 |
36 |
37 | Identifiant de la recette
38 |
39 |
40 |
41 | La suppression est définitive
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_post_create.php:
--------------------------------------------------------------------------------
1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)');
30 | $insertRecipe->execute([
31 | 'title' => $title,
32 | 'recipe' => $recipe,
33 | 'is_enabled' => 1,
34 | 'author' => $_SESSION['LOGGED_USER']['email'],
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
Recette ajoutée avec succès !
57 |
58 |
59 |
60 |
61 |
62 |
Email :
63 |
Recette :
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_post_delete.php:
--------------------------------------------------------------------------------
1 | prepare('DELETE FROM recipes WHERE recipe_id = :id');
22 | $deleteRecipeStatement->execute([
23 | 'id' => (int)$postData['id'],
24 | ]);
25 |
26 | redirectToUrl('index.php');
27 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_post_update.php:
--------------------------------------------------------------------------------
1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id');
31 | $insertRecipeStatement->execute([
32 | 'title' => $title,
33 | 'recipe' => $recipe,
34 | 'id' => $id,
35 | ]);
36 |
37 | ?>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Site de Recettes - Création de recette
46 |
50 |
51 |
52 |
53 |
54 |
55 |
Recette modifiée avec succès !
56 |
57 |
58 |
59 |
60 |
61 |
Email :
62 |
Recette :
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_read.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT r.*, c.comment_id, c.comment, c.user_id, DATE_FORMAT(c.created_at, "%d/%m/%Y") as comment_date, u.full_name FROM recipes r
20 | LEFT JOIN comments c on c.recipe_id = r.recipe_id
21 | LEFT JOIN users u ON u.user_id = c.user_id
22 | WHERE r.recipe_id = :id
23 | ORDER BY comment_date DESC');
24 | $retrieveRecipeWithCommentsStatement->execute([
25 | 'id' => (int)$getData['id'],
26 | ]);
27 | $recipeWithComments = $retrieveRecipeWithCommentsStatement->fetchAll(PDO::FETCH_ASSOC);
28 |
29 | if ($recipeWithComments === []) {
30 | echo('La recette n\'existe pas');
31 | return;
32 | }
33 | $retrieveAverageRatingStatement = $mysqlClient->prepare('SELECT ROUND(AVG(c.review),1) as rating FROM recipes r LEFT JOIN comments c on r.recipe_id = c.recipe_id WHERE r.recipe_id = :id');
34 | $retrieveAverageRatingStatement->execute([
35 | 'id' => (int)$getData['id'],
36 | ]);
37 | $averageRating = $retrieveAverageRatingStatement->fetch();
38 | ;
39 |
40 | $recipe = [
41 | 'recipe_id' => $recipeWithComments[0]['recipe_id'],
42 | 'title' => $recipeWithComments[0]['title'],
43 | 'recipe' => $recipeWithComments[0]['recipe'],
44 | 'author' => $recipeWithComments[0]['author'],
45 | 'comments' => [],
46 | 'rating' => $averageRating['rating'],
47 | ];
48 |
49 | foreach ($recipeWithComments as $comment) {
50 | if (!is_null($comment['comment_id'])) {
51 | $recipe['comments'][] = [
52 | 'comment_id' => $comment['comment_id'],
53 | 'comment' => $comment['comment'],
54 | 'user_id' => (int) $comment['user_id'],
55 | 'full_name' => $comment['full_name'],
56 | 'created_at' => $comment['comment_date'],
57 | ];
58 | }
59 | }
60 | ?>
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | Site de Recettes -
69 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
92 |
93 |
Commentaires
94 |
95 |
96 |
97 |
102 |
103 |
104 |
105 |
106 |
Aucun commentaire
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/P4/P4C6/recipes_update.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id');
20 | $retrieveRecipeStatement->execute([
21 | 'id' => (int)$getData['id'],
22 | ]);
23 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC);
24 |
25 | // si la recette n'est pas trouvée, renvoyer un message d'erreur
26 | ?>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Site de Recettes - Edition de recette
35 |
39 |
40 |
41 |
42 |
43 |
44 |
Mettre à jour
45 |
46 |
47 | Identifiant de la recette
48 |
49 |
50 |
51 |
Titre de la recette
52 |
53 |
Choisissez un titre percutant !
54 |
55 |
56 | Description de la recette
57 |
58 |
59 | Envoyer
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/P4/P4C6/sql/add_comments.sql:
--------------------------------------------------------------------------------
1 | USE `partage_de_recettes`;
2 |
3 | CREATE TABLE IF NOT EXISTS `comments` (
4 | `comment_id` int(11) NOT NULL AUTO_INCREMENT,
5 | `user_id` int(11) NOT NULL,
6 | `recipe_id` int(11) NOT NULL,
7 | `comment` longtext NOT NULL,
8 | PRIMARY KEY (`comment_id`),
9 | KEY `IDX_5F9E962A9D86650F` (`user_id`),
10 | KEY `IDX_5F9E962A69574A48` (`recipe_id`),
11 | CONSTRAINT `FK_5F9E962A69574A48` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`recipe_id`) ON DELETE CASCADE,
12 | CONSTRAINT `FK_5F9E962A9D86650F` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
--------------------------------------------------------------------------------
/P4/P4C6/sql/creation_base.sql:
--------------------------------------------------------------------------------
1 | -- Création de la BDD
2 | CREATE DATABASE IF NOT EXISTS `partage_de_recettes`;
3 | USE `partage_de_recettes`;
4 |
5 | -- Création de la table recipes
6 | CREATE TABLE IF NOT EXISTS `recipes` (
7 | `recipe_id` int(11) NOT NULL AUTO_INCREMENT,
8 | `title` varchar(128) NOT NULL,
9 | `recipe` TEXT NOT NULL,
10 | `author` varchar(255) NOT NULL,
11 | `is_enabled` BOOLEAN NOT NULL,
12 | PRIMARY KEY (`recipe_id`)
13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
14 |
15 | -- Création de la table users
16 | CREATE TABLE IF NOT EXISTS `users` (
17 | `user_id` int(11) NOT NULL AUTO_INCREMENT,
18 | `full_name` varchar(64) NOT NULL,
19 | `email` varchar(255) NOT NULL,
20 | `password` varchar(255) NOT NULL,
21 | `age` INT NOT NULL,
22 | PRIMARY KEY (`user_id`)
23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
24 |
25 | delete from `users`;
26 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'devine', 1);
27 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2);
28 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3);
29 |
30 | delete from `recipes`;
31 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 1, "Le cassoulet est une spécialité régionale du Languedoc, à base de haricots secs, généralement blancs, et de viande. À son origine, il était à base de fèves. Le cassoulet tient son nom de la cassole en terre cuite émaillée dite caçòla1 en occitan et fabriquée à Issel.\n", 1, 'Cassoulet');
32 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mickael.andrieu@exemple.com', 0, "Le couscous est d'une part une semoule de blé dur préparée à l'huile d'olive (un des aliments de base traditionnel de la cuisine des pays du Maghreb) et d'autre part, une spécialité culinaire issue de la cuisine berbère, à base de couscous, de légumes, d'épices, d'huile d'olive et de viande (rouge ou de volaille) ou de poisson.", 2, 'Couscous');
33 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('laurene.castor@exemple.com', 0, "La salade César est une recette de cuisine de salade composée de la cuisine américaine, traditionnellement préparée en salle à côté de la table, à base de laitue romaine, œuf dur, croûtons, parmesan et de « sauce César » à base de parmesan râpé, huile d'olive, pâte d'anchois, ail, vinaigre de vin, moutarde, jaune d'œuf et sauce Worcestershire.", 4, 'Salade Romaine');
34 | insert into `recipes` (`author`, `is_enabled`, `recipe`, `recipe_id`, `title`) values ('mathieu.nebra@exemple.com', 1, "L'escalope à la milanaise, ou escalope milanaise est une escalope panée, de viande de veau, traditionnellement prise dans le faux-filet. Historiquement, on la cuit avec du beurre. Elle est généralement servie avec salade ou frites, accompagnée de sauce mayonnaise. On peut y ajouter un filet de jus de citron.\n\nEn Italie, ce mets ne se sert pas avec des pâtes.", 3, 'Escalope milanaise');
35 |
--------------------------------------------------------------------------------
/P4/P4C6/sql/improve_comments.sql:
--------------------------------------------------------------------------------
1 | USE `partage_de_recettes`;
2 | ALTER TABLE comments ADD created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
3 | ALTER TABLE comments ADD review INT NOT NULL DEFAULT 3;
4 |
--------------------------------------------------------------------------------
/P4/P4C6/submit_contact.php:
--------------------------------------------------------------------------------
1 | 1000000) {
25 | echo "L'envoi n'a pas pu être effectué, erreur ou image trop volumineuse";
26 | return;
27 | }
28 |
29 | // Testons, si l'extension n'est pas autorisée
30 | $fileInfo = pathinfo($_FILES['screenshot']['name']);
31 | $extension = $fileInfo['extension'];
32 | $allowedExtensions = ['jpg', 'jpeg', 'gif', 'png'];
33 | if (!in_array($extension, $allowedExtensions)) {
34 | echo "L'envoi n'a pas pu être effectué, l'extension {$extension} n'est pas autorisée";
35 | return;
36 | }
37 |
38 | // Testons, si le dossier uploads est manquant
39 | $path = __DIR__ . '/uploads/';
40 | if (!is_dir($path)) {
41 | echo "L'envoi n'a pas pu être effectué, le dossier uploads est manquant";
42 | return;
43 | }
44 |
45 | // On peut valider le fichier et le stocker définitivement
46 | move_uploaded_file($_FILES['screenshot']['tmp_name'], $path . basename($_FILES['screenshot']['name']));
47 | $isFileLoaded = true;
48 | }
49 | ?>
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Site de Recettes - Contact reçu
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Message bien reçu !
65 |
66 |
67 |
68 |
Rappel de vos informations
69 |
Email :
70 |
Message :
71 |
72 |
73 | L'envoi a bien été effectué !
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/P4/P4C6/submit_login.php:
--------------------------------------------------------------------------------
1 | $user['email'],
27 | 'user_id' => $user['user_id'],
28 | ];
29 | }
30 | }
31 |
32 | if (!isset($_SESSION['LOGGED_USER'])) {
33 | $_SESSION['LOGIN_ERROR_MESSAGE'] = sprintf(
34 | 'Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
35 | $postData['email'],
36 | strip_tags($postData['password'])
37 | );
38 | }
39 | }
40 |
41 | redirectToUrl('index.php');
42 | }
43 |
--------------------------------------------------------------------------------
/P4/P4C6/uploads/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/P4/P4C6/variables.php:
--------------------------------------------------------------------------------
1 | prepare('SELECT * FROM users');
5 | $usersStatement->execute();
6 | $users = $usersStatement->fetchAll();
7 |
8 | $recipesStatement = $mysqlClient->prepare('SELECT * FROM recipes WHERE is_enabled is TRUE');
9 | $recipesStatement->execute();
10 | $recipes = $recipesStatement->fetchAll();
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Concevez un site web avec PHP & MySQL
2 |
3 | Ce dépôt git contient toutes les étapes du projet fil rouge du cours "Concevez un site web avec PHP & MySQL" créé par Mathieu Nebra et mis à jour par Mickaël Andrieu et Stéphane Bourse.
4 |
5 | Happy learning !
6 |
--------------------------------------------------------------------------------