├── 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 |
19 |
20 | 21 | 22 |
Nous ne revendrons pas votre email.
23 |
24 |
25 | 26 | 27 |
28 | 29 |
30 |
31 |
32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P2/P2C7/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P2/P2C7/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 17 |
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 | 18 | 19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | 23 | 24 |
25 | 26 |
27 |
28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /P3/P3C1/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C1/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 17 |
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 | 18 | 19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | 23 | 24 |
25 | 26 |
27 |
28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /P3/P3C2/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C2/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 17 |
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 | 18 | 19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C3/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C3/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 17 |
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 | 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 | 18 | 19 |
Nous ne revendrons pas votre email.
20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C4/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C4/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 17 |
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 | 48 | 49 |
50 | 51 | 52 |
L'email utilisé lors de la création de compte.
53 |
54 |
55 | 56 | 57 |
58 | 59 |
60 | 61 | 62 | 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 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 32 |
33 |
34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /P3/P3C5/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C5/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 22 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 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 | 7 | -------------------------------------------------------------------------------- /P4/P4C3/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 22 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 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 | 7 | -------------------------------------------------------------------------------- /P4/P4C4/EndVersion/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 25 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 28 | 29 |
Choisissez un titre percutant !
30 |
31 |
32 | 33 | 34 |
35 | 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 | 38 | 39 |
40 | 41 | 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 - <?php echo($recipe['title']); ?> 38 | 42 | 43 | 44 |
45 | 46 | 47 |

48 |
49 |
50 | 51 |
52 | 55 |
56 |
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 | 48 | 49 |
50 |
51 | 52 | 53 |
Choisissez un titre percutant !
54 |
55 |
56 | 57 | 58 |
59 | 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 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 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 | 7 | -------------------------------------------------------------------------------- /P4/P4C4/StartVersion/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 25 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 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 | 11 | 12 |
13 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 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 | 7 | -------------------------------------------------------------------------------- /P4/P4C5/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 25 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 28 | 29 |
Choisissez un titre percutant !
30 |
31 |
32 | 33 | 34 |
35 | 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 | 38 | 39 |
40 | 41 | 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 - <?php echo($recipe['title']); ?> 60 | 64 | 65 | 66 |
67 | 68 | 69 |

70 |
71 |
72 | 73 |
74 | 77 |
78 |
79 |

Commentaires

80 | 81 |
82 | 83 |
84 |

85 | () 86 |
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 | 48 | 49 |
50 |
51 | 52 | 53 |
Choisissez un titre percutant !
54 |
55 |
56 | 57 | 58 |
59 | 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 | 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 | 11 | 12 |
13 |
14 | 15 | 16 |
17 | 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 | 20 | 21 |
Nous ne revendrons pas votre email.
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 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 | 7 | -------------------------------------------------------------------------------- /P4/P4C6/functions.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | Site de recettes 4 | 7 | 25 |
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 | 12 | 13 |
14 | 15 | 16 |
L'email utilisé lors de la création de compte.
17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 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 | 28 | 29 |
Choisissez un titre percutant !
30 |
31 |
32 | 33 | 34 |
35 | 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 | 38 | 39 |
40 | 41 | 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 - <?php echo($recipe['title']); ?> 69 | 73 | 74 | 75 |
76 | 77 | 78 |

79 |
80 |
81 | 82 |
83 | 91 |
92 |
93 |

Commentaires

94 | 95 |
96 | 97 |
98 |

99 |

100 | () 101 |
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 | 48 | 49 |
50 |
51 | 52 | 53 |
Choisissez un titre percutant !
54 |
55 |
56 | 57 | 58 |
59 | 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 | 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 | --------------------------------------------------------------------------------