├── P1 ├── index.php └── variables.php ├── P2 ├── P2C1.php ├── P2C2.php ├── P2C3.php ├── P2C4.php ├── P2C5.php ├── P2C5_corrige.php ├── P2C6 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ └── variables.php ├── ex.php ├── ex10.php ├── ex11.php ├── ex2.php ├── ex3.php ├── ex4.php ├── ex5.php ├── ex6.php ├── ex7.php ├── ex8.php └── ex9.php ├── P3 ├── P3C1 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── submit_contact.php │ └── variables.php ├── P3C2 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── submit_contact.php │ └── variables.php ├── P3C3-upload │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── submit_contact.php │ └── variables.php ├── P3C3 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── submit_contact.php │ └── variables.php ├── P3C4 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── submit_contact.php │ └── variables.php └── P3C5 │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── submit_contact.php │ ├── variables.php │ └── viewed_pages.php ├── P4 ├── P4C2 │ └── sql │ │ └── creation_base.sql ├── P4C3 │ ├── compteur.txt │ ├── config │ │ └── mysql.php │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── sql │ │ └── creation_base.sql │ ├── submit_contact.php │ ├── variables.php │ └── viewed_pages.php ├── P4C4 │ ├── compteur.txt │ ├── config │ │ ├── mysql.php │ │ └── user.php │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── recipes │ │ ├── create.php │ │ ├── delete.php │ │ ├── post_create.php │ │ ├── post_delete.php │ │ ├── post_update.php │ │ ├── read.php │ │ └── update.php │ ├── sql │ │ └── creation_base.sql │ ├── submit_contact.php │ ├── variables.php │ └── viewed_pages.php ├── P4C5 │ ├── comments │ │ ├── create.php │ │ └── post_create.php │ ├── compteur.txt │ ├── config │ │ ├── mysql.php │ │ └── user.php │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── recipes │ │ ├── create.php │ │ ├── delete.php │ │ ├── post_create.php │ │ ├── post_delete.php │ │ ├── post_update.php │ │ ├── read.php │ │ └── update.php │ ├── sql │ │ ├── add_comments.sql │ │ └── creation_base.sql │ ├── submit_contact.php │ ├── variables.php │ └── viewed_pages.php └── P4C6 │ ├── comments │ ├── create.php │ └── post_create.php │ ├── compteur.txt │ ├── config │ ├── mysql.php │ └── user.php │ ├── contact.php │ ├── footer.php │ ├── functions.php │ ├── header.php │ ├── home.php │ ├── login.php │ ├── recipes │ ├── create.php │ ├── delete.php │ ├── post_create.php │ ├── post_delete.php │ ├── post_update.php │ ├── read.php │ └── update.php │ ├── sql │ ├── add_comments.sql │ ├── creation_base.sql │ └── improve_comments.sql │ ├── submit_contact.php │ ├── variables.php │ └── viewed_pages.php └── README.md /P1/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /P2/P2C1.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 22 | 'email' => 'mickael.andrieu@exemple.com', 23 | 'age' => 34, 24 | ], 25 | [ 26 | 'full_name' => 'Mathieu Nebra', 27 | 'email' => 'mathieu.nebra@exemple.com', 28 | 'age' => 34, 29 | ], 30 | [ 31 | 'full_name' => 'Laurène Castor', 32 | 'email' => 'laurene.castor@exemple.com', 33 | 'age' => 28, 34 | ], 35 | ]; 36 | 37 | $recipes = [ 38 | [ 39 | 'title' => 'Cassoulet', 40 | 'recipe' => '', 41 | 'author' => 'mickael.andrieu@exemple.com', 42 | 'enabled' => true, 43 | ], 44 | [ 45 | 'title' => 'Couscous', 46 | 'recipe' => '', 47 | 'author' => 'mickael.andrieu@exemple.com', 48 | 'enabled' => false, 49 | ], 50 | [ 51 | 'title' => 'Escalope milanaise', 52 | 'recipe' => '', 53 | 'author' => 'mathieu.nebra@exemple.com', 54 | 'enabled' => true, 55 | ], 56 | [ 57 | 'title' => 'Salade Romaine', 58 | 'recipe' => '', 59 | 'author' => 'laurene.castor@exemple.com', 60 | 'enabled' => false, 61 | ], 62 | ]; 63 | 64 | var_dump($users, $recipes); 65 | -------------------------------------------------------------------------------- /P2/P2C2.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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; 47 | 48 | /** 49 | * On introduit les boucles une première fois en P2C2, 50 | * en même temps que les tableaux (et on y revient en détail en P2C3). 51 | * 52 | */ 53 | /*foreach ($recipes as $recipe) { 54 | if ($recipe['is_enabled']) { 55 | echo($recipe['title'] . ': ✅' . PHP_EOL); 56 | } else { 57 | echo($recipe['title'] . ': ❌ ' . PHP_EOL); 58 | } 59 | }*/ 60 | 61 | $lines = 3; // nombre d'utilisateurs dans le tableau 62 | $counter = 0; 63 | 64 | while ($counter < $lines) { 65 | echo $users[$counter]['full_name'] . ' ' . $users[$counter]['email'] . '
'; 66 | $counter++; 67 | } -------------------------------------------------------------------------------- /P2/P2C3.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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; 47 | 48 | function display_recipe(array $recipe) : string 49 | { 50 | $recipe_content = ''; 51 | 52 | if ($recipe['is_enabled']) { 53 | $recipe_content = '
'; 54 | $recipe_content .= '

' . $recipe['title'] . '

'; 55 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 56 | $recipe_content .= '' . $recipe['author'] . ''; 57 | $recipe_content .= '
'; 58 | } 59 | 60 | return $recipe_content; 61 | } 62 | 63 | $html = ''; 64 | foreach($recipes as $recipe) { 65 | $html .= display_recipe($recipe); 66 | } 67 | ?> 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | Affichage des recipes 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /P2/P2C4.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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; 47 | 48 | function displayAuthor(string $authorEmail, array $users) : string 49 | { 50 | for ($i = 0; $i < count($users); $i++) { 51 | $author = $users[$i]; 52 | if ($authorEmail === $author['email']) { 53 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 54 | } 55 | } 56 | } 57 | 58 | function isValidRecipe(array $recipe) : bool 59 | { 60 | if (array_key_exists('is_enabled', $recipe)) { 61 | $isEnabled = $recipe['is_enabled']; 62 | } else { 63 | $isEnabled = false; 64 | } 65 | 66 | return $isEnabled; 67 | } 68 | 69 | function getRecipes(array $recipes) : array 70 | { 71 | $valid_recipes = []; 72 | 73 | foreach($recipes as $recipe) { 74 | if (isValidRecipe($recipe)) { 75 | $valid_recipes[] = $recipe; 76 | } 77 | } 78 | 79 | return $valid_recipes; 80 | } 81 | 82 | ?> 83 | 84 | 85 | 86 | 87 | 88 | 89 | Recettes de cuisine 90 | 94 | 95 | 96 |
97 |

Liste des recettes de cuisine

98 | 99 | 100 |
101 |

102 |
103 | 104 |
105 | 106 |
107 | 108 | 109 | -------------------------------------------------------------------------------- /P2/P2C5.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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enablad' => false, 45 | ], 46 | ]; 47 | 48 | function display_recipe(array $recipe) : string 49 | { 50 | $recipe_content = ''; 51 | 52 | if ($recipe['is_enabled']) { 53 | $recipe_content = '
'; 54 | $recipe_content .= '

' . $recipe['title'] . '

'; 55 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 56 | $recipe_content .= '' . $recipe['author'] . ''; 57 | $recipe_content .= '
'; 58 | } 59 | 60 | return $recipe; 61 | } 62 | 63 | function display_author(string $authorEmail, array $users) : string 64 | { 65 | for ($i = 0; $i < count($users); $i++) { 66 | $author = $users[$i]; 67 | if ($authorEmail === $author['email']) { 68 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 69 | } 70 | } 71 | } 72 | 73 | function get_recipes(array $recipes) : array 74 | { 75 | $valid_recipes = []; 76 | 77 | foreach($recipes as $recipe) { 78 | if ($recipe['is_enabled']) { 79 | $valid_recipes[] = $recipe; 80 | } 81 | } 82 | 83 | return $valid_recipes; 84 | } 85 | 86 | ?> 87 | 88 | 89 | 90 | 91 | 92 | 93 | Site de Recettes 94 | 98 | 99 | 100 |
101 |

Site de Recettes !

102 | 103 | 104 |
105 |

106 |
107 | 108 |
109 | 110 |
111 | 112 | 113 | -------------------------------------------------------------------------------- /P2/P2C5_corrige.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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieunebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; 47 | 48 | function display_recipe(array $recipe) : string 49 | { 50 | $recipe_content = ''; 51 | 52 | if ($recipe['is_enabled']) { 53 | $recipe_content = '
'; 54 | $recipe_content .= '

' . $recipe['title'] . '

'; 55 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 56 | $recipe_content .= '' . $recipe['author'] . ''; 57 | $recipe_content .= '
'; 58 | } 59 | 60 | return $recipe; 61 | } 62 | 63 | function display_author(string $authorEmail, array $users) : string 64 | { 65 | for ($i = 0; $i < count($users); $i++) { 66 | $author = $users[$i]; 67 | if ($authorEmail === $author['email']) { 68 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 69 | } 70 | } 71 | } 72 | 73 | function get_recipes(array $recipes) : array 74 | { 75 | $valid_recipes = []; 76 | 77 | foreach($recipes as $recipe) { 78 | if ($recipe['is_enabled']) { 79 | $valid_recipes[] = $recipe; 80 | } 81 | } 82 | 83 | return $valid_recipes; 84 | } 85 | 86 | ?> 87 | 88 | 89 | 90 | 91 | 92 | 93 | Site de Recettes 94 | 98 | 99 | 100 |
101 |

Site de Recettes !

102 | 103 | 104 |
105 |

106 |
107 | 108 |
109 | 110 |
111 | 112 | 113 | -------------------------------------------------------------------------------- /P2/P2C6/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 | -------------------------------------------------------------------------------- /P2/P2C6/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P2/P2C6/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function displayAuthor(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function getRecipes(array $recipes) : array 29 | { 30 | $valid_recipes = []; 31 | 32 | foreach($recipes as $recipe) { 33 | if ($recipe['is_enabled']) { 34 | $valid_recipes[] = $recipe; 35 | } 36 | } 37 | 38 | return $valid_recipes; 39 | } 40 | -------------------------------------------------------------------------------- /P2/P2C6/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P2/P2C6/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Site de recettes - Page d'accueil 8 | 12 | 13 | 14 |
15 | 16 | 17 |

Site de recettes

18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |

31 |
32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /P2/P2C6/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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; -------------------------------------------------------------------------------- /P2/ex.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Affichage des recipes 18 | 19 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /P2/ex10.php: -------------------------------------------------------------------------------- 1 | 'Salade Romaine', 4 | 'recipe' => 'Etape 1 : Lavez la salade ; Etape 2 : euh ...', 5 | 'author' => 'laurene.castor@exemple.com', 6 | ]; 7 | 8 | echo sprintf( 9 | '%s par "%s" : %s', 10 | $recipe['title'], 11 | $recipe['author'], 12 | $recipe['recipe'] 13 | ); -------------------------------------------------------------------------------- /P2/ex11.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Mon super site 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 25 | 26 |
27 | 28 | 29 | 30 |
31 |

Mon super site

32 | 33 |

34 | Bienvenue sur mon super site !
35 | Vous allez adorer ici, c'est un site génial qui va parler de... euh... Je cherche encore un peu le thème de mon site. :-D 36 |

37 |
38 | 39 | 40 | 41 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /P2/ex2.php: -------------------------------------------------------------------------------- 1 | 'Cassoulet', 6 | 'recipe' => '', 7 | 'author' => 'mickael.andrieu@exemple.com', 8 | 'is_enabled' => true, 9 | ], 10 | [ 11 | 'title' => 'Couscous', 12 | 'recipe' => '', 13 | 'author' => 'mickael.andrieu@exemple.com', 14 | 'is_enabled' => false, 15 | ], 16 | ]; 17 | 18 | echo '
';
19 | print_r($recipes);
20 | echo '
'; -------------------------------------------------------------------------------- /P2/ex3.php: -------------------------------------------------------------------------------- 1 | 'Salade Romaine', 4 | 'recipe' => 'Etape 1 : Lavez la salade ; Etape 2 : euh ...', 5 | 'author' => 'laurene.castor@exemple.com', 6 | ]; 7 | 8 | foreach($recipe as $property => $propertyValue) 9 | { 10 | echo '[' . $property . '] vaut ' . $propertyValue . PHP_EOL; 11 | } -------------------------------------------------------------------------------- /P2/ex4.php: -------------------------------------------------------------------------------- 1 | 'Salade Romaine', 4 | 'recipe' => 'Etape 1 : Lavez la salade ; Etape 2 : euh ...', 5 | 'author' => 'laurene.castor@exemple.com', 6 | ]; 7 | 8 | if (array_key_exists('title', $recipe)) 9 | { 10 | echo 'La clé "title" se trouve dans la recette !'; 11 | } 12 | 13 | if (array_key_exists('commentaires', $recipe)) 14 | { 15 | echo 'La clé "commentaires" se trouve dans la recette !'; 16 | } -------------------------------------------------------------------------------- /P2/ex5.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 | -------------------------------------------------------------------------------- /P2/ex8.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 | -------------------------------------------------------------------------------- /P3/P3C1/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C1/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C1/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C1/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Site de Recettes - Page d'accueil 8 | 12 | 13 | 14 |
15 | 16 | 17 |

Site de Recettes !

18 | 19 | 20 | 21 |
22 |

23 |
24 | 25 |
26 | 27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /P3/P3C1/submit_contact.php: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | Site de Recettes - Contact reçu 27 | 31 | 32 | 33 |
34 | 35 | 36 |

Message bien reçu !

37 | 38 |
39 | 40 |
41 |
Rappel de vos informations
42 |

Email :

43 |

Message :

44 |
45 |
-------------------------------------------------------------------------------- /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' => '', 25 | 'author' => 'mickael.andrieu@exemple.com', 26 | 'is_enabled' => true, 27 | ], 28 | [ 29 | 'title' => 'Couscous', 30 | 'recipe' => '', 31 | 'author' => 'mickael.andrieu@exemple.com', 32 | 'is_enabled' => false, 33 | ], 34 | [ 35 | 'title' => 'Escalope milanaise', 36 | 'recipe' => '', 37 | 'author' => 'mathieu.nebra@exemple.com', 38 | 'is_enabled' => true, 39 | ], 40 | [ 41 | 'title' => 'Salade Romaine', 42 | 'recipe' => '', 43 | 'author' => 'laurene.castor@exemple.com', 44 | 'is_enabled' => false, 45 | ], 46 | ]; 47 | 48 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 49 | $limit = (int) $_GET['limit']; 50 | } else { 51 | $limit = 100; 52 | } 53 | -------------------------------------------------------------------------------- /P3/P3C2/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C2/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C2/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C2/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C2/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Site de Recettes - Page d'accueil 8 | 12 | 13 | 14 |
15 | 16 | 17 |

Site de Recettes !

18 | 19 | 20 | 21 |
22 |

23 |
24 | 25 |
26 | 27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /P3/P3C2/submit_contact.php: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Site de Recettes - Contact reçu 23 | 27 | 28 | 29 |
30 | 31 | 32 |

Message bien reçu !

33 | 34 |
35 | 36 |
37 |
Rappel de vos informations
38 |

Email :

39 |

Message :

40 |
41 |
42 |
43 | 44 | -------------------------------------------------------------------------------- /P3/P3C2/variables.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 6 | 'email' => 'mickael.andrieu@exemple.com', 7 | 'password' => 'abc123', 8 | 'age' => 34, 9 | ], 10 | [ 11 | 'full_name' => 'Mathieu Nebra', 12 | 'email' => 'mathieu.nebra@exemple.com', 13 | 'password' => 'foo123', 14 | 'age' => 34, 15 | ], 16 | [ 17 | 'full_name' => 'Laurène Castor', 18 | 'email' => 'laurene.castor@exemple.com', 19 | 'password' => 'bar123', 20 | 'age' => 28, 21 | ], 22 | ]; 23 | 24 | $recipes = [ 25 | [ 26 | 'title' => 'Cassoulet', 27 | 'recipe' => '', 28 | 'author' => 'mickael.andrieu@exemple.com', 29 | 'is_enabled' => true, 30 | ], 31 | [ 32 | 'title' => 'Couscous', 33 | 'recipe' => '', 34 | 'author' => 'mickael.andrieu@exemple.com', 35 | 'is_enabled' => false, 36 | ], 37 | [ 38 | 'title' => 'Escalope milanaise', 39 | 'recipe' => '', 40 | 'author' => 'mathieu.nebra@exemple.com', 41 | 'is_enabled' => true, 42 | ], 43 | [ 44 | 'title' => 'Salade Romaine', 45 | 'recipe' => '', 46 | 'author' => 'laurene.castor@exemple.com', 47 | 'is_enabled' => false, 48 | ], 49 | ]; 50 | 51 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 52 | $limit = (int) $_GET['limit']; 53 | } else { 54 | $limit = 100; 55 | } 56 | -------------------------------------------------------------------------------- /P3/P3C3-upload/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 |
30 | 31 | 32 |
33 | 34 |
35 |
36 |
37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /P3/P3C3-upload/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C3-upload/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C3-upload/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C3-upload/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Site de Recettes - Page d'accueil 8 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |

Site de Recettes !

22 | 23 | 24 | 25 |
26 |

27 |
28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /P3/P3C3-upload/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | } else { 15 | /** 16 | * @TODO Formateur : le cours doit expliquer la fonction sprintf 17 | * (+ lien vers la doc FR) 18 | */ 19 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 20 | $postData['email'], 21 | $postData['password'] 22 | ); 23 | } 24 | } 25 | } 26 | ?> 27 | 28 | 29 |
30 | 31 | 34 | 35 |
36 | 37 | 38 |
L'email utilisé lors de la création de compte.
39 |
40 |
41 | 42 | 43 |
44 | 45 |
46 | 47 | 50 | -------------------------------------------------------------------------------- /P3/P3C3-upload/submit_contact.php: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Site de Recettes - Contact reçu 23 | 27 | 28 | 29 |
30 | 31 | 32 |

Message bien reçu !

33 | 34 |
35 | 36 |
37 |
Rappel de vos informations
38 |

Email :

39 |

Message :

40 |
41 |
-------------------------------------------------------------------------------- /P3/P3C3-upload/variables.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 6 | 'email' => 'mickael.andrieu@exemple.com', 7 | 'age' => 34, 8 | 'password' => 'S3cr3t', 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' => '', 28 | 'author' => 'mickael.andrieu@exemple.com', 29 | 'is_enabled' => true, 30 | ], 31 | [ 32 | 'title' => 'Couscous', 33 | 'recipe' => '', 34 | 'author' => 'mickael.andrieu@exemple.com', 35 | 'is_enabled' => false, 36 | ], 37 | [ 38 | 'title' => 'Escalope milanaise', 39 | 'recipe' => '', 40 | 'author' => 'mathieu.nebra@exemple.com', 41 | 'is_enabled' => true, 42 | ], 43 | [ 44 | 'title' => 'Salade Romaine', 45 | 'recipe' => '', 46 | 'author' => 'laurene.castor@exemple.com', 47 | 'is_enabled' => false, 48 | ], 49 | ]; 50 | 51 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 52 | $limit = (int) $_GET['limit']; 53 | } else { 54 | $limit = 100; 55 | } 56 | -------------------------------------------------------------------------------- /P3/P3C3/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C3/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C3/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C3/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C3/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Site de Recettes - Page d'accueil 8 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |

Site de Recettes !

22 | 23 | 24 | 25 |
26 |

27 |
28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /P3/P3C3/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | } else { 15 | /** 16 | * @TODO Formateur : le cours doit expliquer la fonction sprintf 17 | * (+ lien vers la doc FR) 18 | */ 19 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 20 | $postData['email'], 21 | $postData['password'] 22 | ); 23 | } 24 | } 25 | } 26 | ?> 27 | 28 | 29 |
30 | 31 | 34 | 35 |
36 | 37 | 38 |
L'email utilisé lors de la création de compte.
39 |
40 |
41 | 42 | 43 |
44 | 45 |
46 | 47 | 50 | -------------------------------------------------------------------------------- /P3/P3C3/submit_contact.php: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Site de Recettes - Contact reçu 23 | 27 | 28 | 29 |
30 | 31 | 32 |

Message bien reçu !

33 | 34 |
35 | 36 |
37 |
Rappel de vos informations
38 |

Email :

39 |

Message :

40 |
41 |
-------------------------------------------------------------------------------- /P3/P3C3/variables.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 6 | 'email' => 'mickael.andrieu@exemple.com', 7 | 'age' => 34, 8 | 'password' => 'S3cr3t', 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' => '', 28 | 'author' => 'mickael.andrieu@exemple.com', 29 | 'is_enabled' => true, 30 | ], 31 | [ 32 | 'title' => 'Couscous', 33 | 'recipe' => '', 34 | 'author' => 'mickael.andrieu@exemple.com', 35 | 'is_enabled' => false, 36 | ], 37 | [ 38 | 'title' => 'Escalope milanaise', 39 | 'recipe' => '', 40 | 'author' => 'mathieu.nebra@exemple.com', 41 | 'is_enabled' => true, 42 | ], 43 | [ 44 | 'title' => 'Salade Romaine', 45 | 'recipe' => '', 46 | 'author' => 'laurene.castor@exemple.com', 47 | 'is_enabled' => false, 48 | ], 49 | ]; 50 | 51 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 52 | $limit = (int) $_GET['limit']; 53 | } else { 54 | $limit = 100; 55 | } 56 | -------------------------------------------------------------------------------- /P3/P3C4/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C4/footer.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /P3/P3C4/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C4/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C4/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Site de Recettes - Page d'accueil 10 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |

Site de Recettes !

39 | 40 | 41 |
42 |

43 |
44 | 45 |
46 | 47 |
48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /P3/P3C4/login.php: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 |
22 | 23 | 26 | 27 |
28 | 29 | 30 |
L'email utilisé lors de la création de compte.
31 |
32 |
33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 46 | -------------------------------------------------------------------------------- /P3/P3C4/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Contact reçu 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
-------------------------------------------------------------------------------- /P3/P3C4/variables.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 6 | 'email' => 'user@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' => '', 28 | 'author' => 'mickael.andrieu@exemple.com', 29 | 'is_enabled' => true, 30 | ], 31 | [ 32 | 'title' => 'Couscous', 33 | 'recipe' => '', 34 | 'author' => 'mickael.andrieu@exemple.com', 35 | 'is_enabled' => false, 36 | ], 37 | [ 38 | 'title' => 'Escalope milanaise', 39 | 'recipe' => '', 40 | 'author' => 'mathieu.nebra@exemple.com', 41 | 'is_enabled' => true, 42 | ], 43 | [ 44 | 'title' => 'Salade Romaine', 45 | 'recipe' => '', 46 | 'author' => 'laurene.castor@exemple.com', 47 | 'is_enabled' => false, 48 | ], 49 | ]; 50 | 51 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 52 | $limit = (int) $_GET['limit']; 53 | } else { 54 | $limit = 100; 55 | } 56 | -------------------------------------------------------------------------------- /P3/P3C5/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C5/footer.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /P3/P3C5/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | if ($recipe['is_enabled']) { 39 | $valid_recipes[] = $recipe; 40 | $counter++; 41 | } 42 | } 43 | 44 | return $valid_recipes; 45 | } 46 | -------------------------------------------------------------------------------- /P3/P3C5/header.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /P3/P3C5/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

Site de Recettes !

23 | 24 | 25 | 26 |
27 |

28 |
29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P3/P3C5/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | 15 | /** 16 | * Cookie qui expire dans un an 17 | */ 18 | setcookie( 19 | 'LOGGED_USER', 20 | $loggedUser['email'], 21 | [ 22 | 'expires' => time() + 365*24*3600, 23 | 'secure' => true, 24 | 'httponly' => true, 25 | ] 26 | ); 27 | 28 | $_SESSION['LOGGED_USER'] = $loggedUser['email']; 29 | } else { 30 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 31 | $postData['email'], 32 | $postData['password'] 33 | ); 34 | } 35 | } 36 | } 37 | 38 | // Si le cookie est présent 39 | if (isset($_COOKIE['LOGGED_USER'])) { 40 | $loggedUser = [ 41 | 'email' => $_COOKIE['LOGGED_USER'], 42 | ]; 43 | } 44 | 45 | if (isset($_SESSION['LOGGED_USER'])) { 46 | $loggedUser = [ 47 | 'email' => $_SESSION['LOGGED_USER'], 48 | ]; 49 | } 50 | ?> 51 | 52 | 53 |
54 | 55 | 58 | 59 |
60 | 61 | 62 |
L'email utilisé lors de la création de compte.
63 |
64 |
65 | 66 | 67 |
68 | 69 |
70 | 71 | 74 | -------------------------------------------------------------------------------- /P3/P3C5/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Contact reçu 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
-------------------------------------------------------------------------------- /P3/P3C5/variables.php: -------------------------------------------------------------------------------- 1 | 'Mickaël Andrieu', 6 | 'email' => 'mickael.andrieu@exemple.com', 7 | 'age' => 34, 8 | 'password' => 'S3cr3t', 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' => '', 28 | 'author' => 'mickael.andrieu@exemple.com', 29 | 'is_enabled' => true, 30 | ], 31 | [ 32 | 'title' => 'Couscous', 33 | 'recipe' => '', 34 | 'author' => 'mickael.andrieu@exemple.com', 35 | 'is_enabled' => false, 36 | ], 37 | [ 38 | 'title' => 'Escalope milanaise', 39 | 'recipe' => '', 40 | 'author' => 'mathieu.nebra@exemple.com', 41 | 'is_enabled' => true, 42 | ], 43 | [ 44 | 'title' => 'Salade Romaine', 45 | 'recipe' => '', 46 | 'author' => 'laurene.castor@exemple.com', 47 | 'is_enabled' => false, 48 | ], 49 | ]; 50 | 51 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 52 | $limit = (int) $_GET['limit']; 53 | } else { 54 | $limit = 100; 55 | } 56 | -------------------------------------------------------------------------------- /P3/P3C5/viewed_pages.php: -------------------------------------------------------------------------------- 1 | Cette page a été vue ' . $viewedPages . ' fois !

'); 13 | ?> -------------------------------------------------------------------------------- /P4/P4C2/sql/creation_base.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `we_love_food`; 2 | CREATE TABLE `we_love_food`.`users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `full_name` VARCHAR(64) NOT NULL , `email` VARCHAR(512) NOT NULL , `password` VARCHAR(512) NOT NULL , `age` INT NOT NULL , PRIMARY KEY (`user_id`)) ENGINE = MyISAM; 3 | CREATE TABLE `we_love_food`.`recipes` ( `recipe_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(128) NOT NULL , `recipe` TEXT NOT NULL , `author` VARCHAR(512) NOT NULL , `is_enabled` BOOLEAN NOT NULL , PRIMARY KEY (`recipe_id`)) ENGINE = MyISAM; -------------------------------------------------------------------------------- /P4/P4C3/compteur.txt: -------------------------------------------------------------------------------- 1 | 65 -------------------------------------------------------------------------------- /P4/P4C3/config/mysql.php: -------------------------------------------------------------------------------- 1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 | } catch(Exception $exception) { 17 | die('Erreur : '.$exception->getMessage()); 18 | } 19 | -------------------------------------------------------------------------------- /P4/P4C3/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P4/P4C3/footer.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /P4/P4C3/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | $valid_recipes[] = $recipe; 39 | $counter++; 40 | } 41 | 42 | return $valid_recipes; 43 | } 44 | -------------------------------------------------------------------------------- /P4/P4C3/header.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /P4/P4C3/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

Site de Recettes !

23 | 24 | 25 | 26 |
27 |

28 |
29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P4/P4C3/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | 15 | /** 16 | * Cookie qui expire dans un an 17 | */ 18 | setcookie( 19 | 'LOGGED_USER', 20 | $loggedUser['email'], 21 | [ 22 | 'expires' => time() + 365*24*3600, 23 | 'secure' => true, 24 | 'httponly' => true, 25 | ] 26 | ); 27 | 28 | $_SESSION['LOGGED_USER'] = $loggedUser['email']; 29 | } else { 30 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 31 | $postData['email'], 32 | $postData['password'] 33 | ); 34 | } 35 | } 36 | } 37 | 38 | // Si le cookie est présent 39 | if (isset($_COOKIE['LOGGED_USER'])) { 40 | $loggedUser = [ 41 | 'email' => $_COOKIE['LOGGED_USER'], 42 | ]; 43 | } 44 | 45 | if (isset($_SESSION['LOGGED_USER'])) { 46 | $loggedUser = [ 47 | 'email' => $_SESSION['LOGGED_USER'], 48 | ]; 49 | } 50 | ?> 51 | 52 | 53 |
54 | 55 | 58 | 59 |
60 | 61 | 62 |
L'email utilisé lors de la création de compte.
63 |
64 |
65 | 66 | 67 |
68 | 69 |
70 | 71 | 74 | -------------------------------------------------------------------------------- /P4/P4C3/sql/creation_base.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `we_love_food`; 2 | CREATE TABLE `we_love_food`.`users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `full_name` VARCHAR(64) NOT NULL , `email` VARCHAR(512) NOT NULL , `password` VARCHAR(512) NOT NULL , `age` INT NOT NULL , PRIMARY KEY (`user_id`)) ENGINE = MyISAM; 3 | CREATE TABLE `we_love_food`.`recipes` ( `recipe_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(128) NOT NULL , `recipe` TEXT NOT NULL , `author` VARCHAR(512) NOT NULL , `is_enabled` BOOLEAN NOT NULL , PRIMARY KEY (`recipe_id`)) ENGINE = MyISAM; 4 | 5 | 6 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'S3cr3t', 1); 7 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2); 8 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3); 9 | ; 10 | 11 | 12 | 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'); 13 | 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'); 14 | 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'); 15 | 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'); -------------------------------------------------------------------------------- /P4/P4C3/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Contact reçu 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
-------------------------------------------------------------------------------- /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 | 12 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 13 | $limit = (int) $_GET['limit']; 14 | } else { 15 | $limit = 100; 16 | } 17 | -------------------------------------------------------------------------------- /P4/P4C3/viewed_pages.php: -------------------------------------------------------------------------------- 1 | Cette page a été vue ' . $pages_vues . ' fois !

'); 13 | ?> -------------------------------------------------------------------------------- /P4/P4C4/compteur.txt: -------------------------------------------------------------------------------- 1 | 229 -------------------------------------------------------------------------------- /P4/P4C4/config/mysql.php: -------------------------------------------------------------------------------- 1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 | } catch(Exception $exception) { 17 | die('Erreur : '.$exception->getMessage()); 18 | } 19 | -------------------------------------------------------------------------------- /P4/P4C4/config/user.php: -------------------------------------------------------------------------------- 1 | $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 7 | ]; 8 | } else { 9 | throw new Exception('Il faut être authentifié pour ajouter des recettes'); 10 | } 11 | -------------------------------------------------------------------------------- /P4/P4C4/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P4/P4C4/footer.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /P4/P4C4/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | } 27 | 28 | function get_recipes(array $recipes, int $limit) : array 29 | { 30 | $valid_recipes = []; 31 | $counter = 0; 32 | 33 | foreach($recipes as $recipe) { 34 | if ($counter == $limit) { 35 | return $valid_recipes; 36 | } 37 | 38 | $valid_recipes[] = $recipe; 39 | $counter++; 40 | } 41 | 42 | return $valid_recipes; 43 | } 44 | -------------------------------------------------------------------------------- /P4/P4C4/header.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /P4/P4C4/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

Site de Recettes !

23 | 24 | 25 | 26 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /P4/P4C4/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | 15 | /** 16 | * Cookie qui expire dans un an 17 | */ 18 | setcookie( 19 | 'LOGGED_USER', 20 | $loggedUser['email'], 21 | [ 22 | 'expires' => time() + 365*24*3600, 23 | 'secure' => true, 24 | 'httponly' => true, 25 | ] 26 | ); 27 | 28 | $_SESSION['LOGGED_USER'] = $loggedUser['email']; 29 | } else { 30 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 31 | $postData['email'], 32 | $postData['password'] 33 | ); 34 | } 35 | } 36 | } 37 | 38 | // Si le cookie ou la session sont présentes 39 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 40 | $loggedUser = [ 41 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 42 | ]; 43 | } 44 | ?> 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 | 56 |
L'email utilisé lors de la création de compte.
57 |
58 |
59 | 60 | 61 |
62 | 63 |
64 | 65 | 68 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/create.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Site de Recettes - Ajout de recette 13 | 17 | 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 | 43 | 44 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/delete.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Site de Recettes - Supprimer la recette ? 15 | 19 | 20 | 21 |
22 | 23 | 24 |

Supprimer la recette ?

25 |
26 |
27 | 28 | 29 |
30 | 31 | 32 |
33 |
34 |
35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/post_create.php: -------------------------------------------------------------------------------- 1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)'); 23 | $insertRecipe->execute([ 24 | 'title' => $title, 25 | 'recipe' => $recipe, 26 | 'is_enabled' => 1, 27 | 'author' => $loggedUser['email'], 28 | ]); 29 | 30 | ?> 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Site de Recettes - Création de recette 39 | 43 | 44 | 45 |
46 | 47 | 48 | 49 |

Recette ajoutée avec succès !

50 | 51 |
52 | 53 |
54 |
55 |

Email :

56 |

Recette :

57 |
58 |
59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/post_delete.php: -------------------------------------------------------------------------------- 1 | prepare('DELETE FROM recipes WHERE recipe_id = :id'); 17 | $deleteRecipeStatement->execute([ 18 | 'id' => $id, 19 | ]); 20 | 21 | header('Location: '.$rootUrl.'home.php'); 22 | ?> 23 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/post_update.php: -------------------------------------------------------------------------------- 1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id'); 25 | $insertRecipeStatement->execute([ 26 | 'title' => $title, 27 | 'recipe' => $recipe, 28 | 'id' => $id, 29 | ]); 30 | 31 | ?> 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Site de Recettes - Création de recette 40 | 44 | 45 | 46 |
47 | 48 | 49 |

Recette modifiée avec succès !

50 | 51 |
52 | 53 |
54 |
55 |

Email :

56 |

Recette :

57 |
58 |
59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/read.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id'); 18 | $retrieveRecipeStatement->execute([ 19 | 'id' => $recipeId, 20 | ]); 21 | 22 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC); 23 | 24 | ?> 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | Site de Recettes - <?php echo($recipe['title']); ?> 33 | 37 | 38 | 39 |
40 | 41 | 42 |

43 |
44 |
45 | 46 |
47 | 50 |
51 |
52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /P4/P4C4/recipes/update.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id'); 15 | $retrieveRecipeStatement->execute([ 16 | 'id' => $getData['id'], 17 | ]); 18 | 19 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC); 20 | 21 | // si la recette n'est pas trouvée, renvoyer un message d'erreur 22 | ?> 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Site de Recettes - Edition de recette 31 | 35 | 36 | 37 |
38 | 39 | 40 |

Mettre à jour

41 |
42 |
43 | 44 | 45 |
46 |
47 | 48 | 49 |
Choisissez un titre percutant !
50 |
51 |
52 | 53 | 56 |
57 | 58 |
59 |
60 |
61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /P4/P4C4/sql/creation_base.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `we_love_food`; 2 | CREATE TABLE `we_love_food`.`users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `full_name` VARCHAR(64) NOT NULL , `email` VARCHAR(512) NOT NULL , `password` VARCHAR(512) NOT NULL , `age` INT NOT NULL , PRIMARY KEY (`user_id`)) ENGINE = MyISAM; 3 | CREATE TABLE `we_love_food`.`recipes` ( `recipe_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(128) NOT NULL , `recipe` TEXT NOT NULL , `author` VARCHAR(512) NOT NULL , `is_enabled` BOOLEAN NOT NULL , PRIMARY KEY (`recipe_id`)) ENGINE = MyISAM; 4 | 5 | 6 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'S3cr3t', 1); 7 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2); 8 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3); 9 | ; 10 | 11 | 12 | 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'); 13 | 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'); 14 | 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'); 15 | 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'); -------------------------------------------------------------------------------- /P4/P4C4/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Page d'accueil 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /P4/P4C4/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 | 12 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 13 | $limit = (int) $_GET['limit']; 14 | } else { 15 | $limit = 100; 16 | } 17 | 18 | // Si le cookie est présent 19 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 20 | $loggedUser = [ 21 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 22 | ]; 23 | } 24 | 25 | $rootPath = $_SERVER['DOCUMENT_ROOT']; 26 | $rootUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; -------------------------------------------------------------------------------- /P4/P4C4/viewed_pages.php: -------------------------------------------------------------------------------- 1 | Cette page a été vue ' . $pages_vues . ' fois !

'); 13 | ?> -------------------------------------------------------------------------------- /P4/P4C5/comments/create.php: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | 14 |
15 | 16 |
17 | -------------------------------------------------------------------------------- /P4/P4C5/comments/post_create.php: -------------------------------------------------------------------------------- 1 | prepare('INSERT INTO comments(comment, recipe_id, user_id) VALUES (:comment, :recipe_id, :user_id)'); 30 | $insertRecipe->execute([ 31 | 'comment' => $comment, 32 | 'recipe_id' => $recipeId, 33 | 'user_id' => retrieve_id_from_user_mail($loggedUser['email'], $users), 34 | ]); 35 | 36 | ?> 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Site de Recettes - Création de commentaire 45 | 49 | 50 | 51 |
52 | 53 | 54 |

Commentaire ajouté avec succès !

55 | 56 |
57 | 58 |
59 |

Votre commentaire :

60 |
61 |
62 |
63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /P4/P4C5/compteur.txt: -------------------------------------------------------------------------------- 1 | 248 -------------------------------------------------------------------------------- /P4/P4C5/config/mysql.php: -------------------------------------------------------------------------------- 1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 | } catch(Exception $exception) { 17 | die('Erreur : '.$exception->getMessage()); 18 | } 19 | -------------------------------------------------------------------------------- /P4/P4C5/config/user.php: -------------------------------------------------------------------------------- 1 | $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 7 | ]; 8 | } else { 9 | throw new Exception('Il faut être authentifié pour ajouter des recettes'); 10 | } 11 | -------------------------------------------------------------------------------- /P4/P4C5/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P4/P4C5/footer.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /P4/P4C5/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | 27 | return 'Non trouvé.'; 28 | } 29 | 30 | function display_user(int $userId, array $users) : string 31 | { 32 | for ($i = 0; $i < count($users); $i++) { 33 | $user = $users[$i]; 34 | if ($userId === (int) $user['user_id']) { 35 | return $user['full_name'] . '(' . $user['age'] . ' ans)'; 36 | } 37 | } 38 | 39 | return 'Non trouvé.'; 40 | } 41 | 42 | function retrieve_id_from_user_mail(string $userEmail, array $users) : int 43 | { 44 | for ($i = 0; $i < count($users); $i++) { 45 | $user = $users[$i]; 46 | if ($userEmail === $user['email']) { 47 | return $user['user_id']; 48 | } 49 | } 50 | 51 | return 0; 52 | } 53 | 54 | function get_recipes(array $recipes, int $limit) : array 55 | { 56 | $valid_recipes = []; 57 | $counter = 0; 58 | 59 | foreach($recipes as $recipe) { 60 | if ($counter == $limit) { 61 | return $valid_recipes; 62 | } 63 | 64 | $valid_recipes[] = $recipe; 65 | $counter++; 66 | } 67 | 68 | return $valid_recipes; 69 | } 70 | -------------------------------------------------------------------------------- /P4/P4C5/header.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /P4/P4C5/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

Site de Recettes !

23 | 24 | 25 | 26 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /P4/P4C5/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | 15 | /** 16 | * Cookie qui expire dans un an 17 | */ 18 | setcookie( 19 | 'LOGGED_USER', 20 | $loggedUser['email'], 21 | [ 22 | 'expires' => time() + 365*24*3600, 23 | 'secure' => true, 24 | 'httponly' => true, 25 | ] 26 | ); 27 | 28 | $_SESSION['LOGGED_USER'] = $loggedUser['email']; 29 | } else { 30 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 31 | $postData['email'], 32 | $postData['password'] 33 | ); 34 | } 35 | } 36 | } 37 | 38 | // Si le cookie ou la session sont présentes 39 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 40 | $loggedUser = [ 41 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 42 | ]; 43 | } 44 | ?> 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 | 56 |
L'email utilisé lors de la création de compte.
57 |
58 |
59 | 60 | 61 |
62 | 63 |
64 | 65 | 68 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/create.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Site de Recettes - Ajout de recette 13 | 17 | 18 | 19 |
20 | 21 | 22 |

Ajouter une recette

23 |
24 |
25 | 26 | 27 |
Choisissez un titre percutant !
28 |
29 |
30 | 31 | 32 |
33 | 34 |
35 |
36 |
37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/delete.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Site de Recettes - Supprimer la recette ? 16 | 20 | 21 | 22 |
23 | 24 | 25 |

Supprimer la recette ?

26 |
27 |
28 | 29 | 30 |
31 | 32 | 33 |
34 |
35 |
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/post_create.php: -------------------------------------------------------------------------------- 1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)'); 23 | $insertRecipe->execute([ 24 | 'title' => $title, 25 | 'recipe' => $recipe, 26 | 'author' => $loggedUser['email'], 27 | 'is_enabled' => 1, 28 | ]); 29 | 30 | ?> 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Site de Recettes - Création de recette 39 | 43 | 44 | 45 |
46 | 47 | 48 |

Recette ajoutée avec succès !

49 | 50 |
51 | 52 |
53 |
54 |

Email :

55 |

Recette :

56 |
57 |
58 |
59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/post_delete.php: -------------------------------------------------------------------------------- 1 | prepare('DELETE FROM recipes WHERE recipe_id = :id'); 19 | $deleteRecipeStatement->execute([ 20 | 'id' => $id, 21 | ]); 22 | 23 | header('Location: '.$rootUrl.'home.php'); 24 | ?> 25 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/post_update.php: -------------------------------------------------------------------------------- 1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id'); 25 | $insertRecipeStatement->execute([ 26 | 'title' => $title, 27 | 'recipe' => $recipe, 28 | 'id' => $id, 29 | ]); 30 | 31 | ?> 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Site de Recettes - Création de recette 40 | 44 | 45 | 46 |
47 | 48 | 49 |

Recette modifiée avec succès !

50 | 51 |
52 | 53 |
54 |
55 |

Email :

56 |

Recette :

57 |
58 |
59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/read.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT * FROM recipes r LEFT JOIN comments c on r.recipe_id = c.recipe_id WHERE r.recipe_id = :id '); 18 | $retrieveRecipeWithCommentsStatement->execute([ 19 | 'id' => $recipeId, 20 | ]); 21 | 22 | $recipeWithComments = $retrieveRecipeWithCommentsStatement->fetchAll(PDO::FETCH_ASSOC); 23 | 24 | $recipe = [ 25 | 'recipe_id' => $recipeWithComments[0]['recipe_id'], 26 | 'title' => $recipeWithComments[0]['title'], 27 | 'recipe' => $recipeWithComments[0]['recipe'], 28 | 'author' => $recipeWithComments[0]['author'], 29 | 'comments' => [], 30 | ]; 31 | 32 | foreach($recipeWithComments as $comment) { 33 | if (!is_null($comment['comment_id'])) { 34 | $recipe['comments'][] = [ 35 | 'comment_id' => $comment['comment_id'], 36 | 'comment' => $comment['comment'], 37 | 'user_id' => (int) $comment['user_id'], 38 | ]; 39 | } 40 | } 41 | ?> 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Site de Recettes - <?php echo($recipe['title']); ?> 50 | 54 | 55 | 56 |
57 | 58 | 59 |

60 |
61 |
62 | 63 |
64 | 67 |
68 | 69 | 0): ?> 70 |
71 |

Commentaires

72 |
73 | 74 |
75 |

76 | () 77 |
78 | 79 |
80 | 81 |
82 | 83 | 84 | 85 |
86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /P4/P4C5/recipes/update.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id'); 15 | $retrieveRecipeStatement->execute([ 16 | 'id' => $getData['id'], 17 | ]); 18 | 19 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC); 20 | ?> 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Site de Recettes - Edition de recette 29 | 33 | 34 | 35 |
36 | 37 | 38 |

Mettre à jour

39 |
40 |
41 | 42 | 43 |
44 |
45 | 46 | 47 |
Choisissez un titre percutant !
48 |
49 |
50 | 51 | 54 |
55 | 56 |
57 |
58 |
59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /P4/P4C5/sql/add_comments.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `we_love_food`.`comments` ( `comment_id` INT NOT NULL AUTO_INCREMENT , `user_id` INT NOT NULL, `recipe_id` INT NOT NULL, `comment` TEXT NOT NULL , PRIMARY KEY (`comment_id`), FOREIGN KEY (`user_id`) REFERENCES users(`user_id`), FOREIGN KEY (`recipe_id`) REFERENCES recipes(`recipe_id`)) ENGINE = MyISAM; 2 | -------------------------------------------------------------------------------- /P4/P4C5/sql/creation_base.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `we_love_food`; 2 | CREATE TABLE `we_love_food`.`users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `full_name` VARCHAR(64) NOT NULL , `email` VARCHAR(512) NOT NULL , `password` VARCHAR(512) NOT NULL , `age` INT NOT NULL , PRIMARY KEY (`user_id`)) ENGINE = MyISAM; 3 | CREATE TABLE `we_love_food`.`recipes` ( `recipe_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(128) NOT NULL , `recipe` TEXT NOT NULL , `author` VARCHAR(512) NOT NULL , `is_enabled` BOOLEAN NOT NULL , PRIMARY KEY (`recipe_id`)) ENGINE = MyISAM; 4 | 5 | 6 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'S3cr3t', 1); 7 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2); 8 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3); 9 | ; 10 | 11 | 12 | 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'); 13 | 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'); 14 | 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'); 15 | 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'); -------------------------------------------------------------------------------- /P4/P4C5/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Page d'accueil 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /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 | 12 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 13 | $limit = (int) $_GET['limit']; 14 | } else { 15 | $limit = 100; 16 | } 17 | 18 | // Si le cookie est présent 19 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 20 | $loggedUser = [ 21 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 22 | ]; 23 | } 24 | 25 | $rootPath = $_SERVER['DOCUMENT_ROOT']; 26 | $rootUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; -------------------------------------------------------------------------------- /P4/P4C5/viewed_pages.php: -------------------------------------------------------------------------------- 1 | Cette page a été vue ' . $pages_vues . ' fois !

'); 13 | ?> -------------------------------------------------------------------------------- /P4/P4C6/comments/create.php: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 | 20 |
21 | -------------------------------------------------------------------------------- /P4/P4C6/comments/post_create.php: -------------------------------------------------------------------------------- 1 | prepare('INSERT INTO comments(comment, recipe_id, user_id, review) VALUES (:comment, :recipe_id, :user_id, :review)'); 33 | $insertRecipe->execute([ 34 | 'comment' => $comment, 35 | 'recipe_id' => $recipeId, 36 | 'user_id' => retrieve_id_from_user_mail($loggedUser['email'], $users), 37 | 'review' => (int) $review, 38 | ]); 39 | 40 | ?> 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | Site de Recettes - Création de commentaire 49 | 53 | 54 | 55 |
56 | 57 | 58 |

Commentaire ajouté avec succès !

59 | 60 |
61 | 62 |
63 |

Note : / 5

64 |

Votre commentaire :

65 |
66 |
67 |
68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /P4/P4C6/compteur.txt: -------------------------------------------------------------------------------- 1 | 319 -------------------------------------------------------------------------------- /P4/P4C6/config/mysql.php: -------------------------------------------------------------------------------- 1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 | } catch(Exception $exception) { 17 | die('Erreur : '.$exception->getMessage()); 18 | } 19 | -------------------------------------------------------------------------------- /P4/P4C6/config/user.php: -------------------------------------------------------------------------------- 1 | $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 7 | ]; 8 | } else { 9 | throw new Exception('Il faut être authentifié pour ajouter des recettes'); 10 | } 11 | -------------------------------------------------------------------------------- /P4/P4C6/contact.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 |

Contactez nous

19 |
20 |
21 | 22 | 23 |
Nous ne revendrons pas votre email.
24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /P4/P4C6/footer.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /P4/P4C6/functions.php: -------------------------------------------------------------------------------- 1 | '; 9 | $recipe_content .= '

' . $recipe['title'] . '

'; 10 | $recipe_content .= '
' . $recipe['recipe'] . '
'; 11 | $recipe_content .= '' . $recipe['author'] . ''; 12 | $recipe_content .= ''; 13 | } 14 | 15 | return $recipe_content; 16 | } 17 | 18 | function display_author(string $authorEmail, array $users) : string 19 | { 20 | for ($i = 0; $i < count($users); $i++) { 21 | $author = $users[$i]; 22 | if ($authorEmail === $author['email']) { 23 | return $author['full_name'] . '(' . $author['age'] . ' ans)'; 24 | } 25 | } 26 | 27 | return 'Non trouvé.'; 28 | } 29 | 30 | function display_user(int $userId, array $users) : string 31 | { 32 | for ($i = 0; $i < count($users); $i++) { 33 | $user = $users[$i]; 34 | if ($userId === (int) $user['user_id']) { 35 | return $user['full_name'] . '(' . $user['age'] . ' ans)'; 36 | } 37 | } 38 | 39 | return 'Non trouvé.'; 40 | } 41 | 42 | function retrieve_id_from_user_mail(string $userEmail, array $users) : int 43 | { 44 | for ($i = 0; $i < count($users); $i++) { 45 | $user = $users[$i]; 46 | if ($userEmail === $user['email']) { 47 | return $user['user_id']; 48 | } 49 | } 50 | 51 | return 0; 52 | } 53 | 54 | function get_recipes(array $recipes, int $limit) : array 55 | { 56 | $valid_recipes = []; 57 | $counter = 0; 58 | 59 | foreach($recipes as $recipe) { 60 | if ($counter == $limit) { 61 | return $valid_recipes; 62 | } 63 | 64 | $valid_recipes[] = $recipe; 65 | $counter++; 66 | } 67 | 68 | return $valid_recipes; 69 | } 70 | -------------------------------------------------------------------------------- /P4/P4C6/header.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /P4/P4C6/home.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Site de Recettes - Page d'accueil 9 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |

Site de Recettes !

23 | 24 | 25 | 26 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /P4/P4C6/login.php: -------------------------------------------------------------------------------- 1 | $user['email'], 13 | ]; 14 | 15 | /** 16 | * Cookie qui expire dans un an 17 | */ 18 | setcookie( 19 | 'LOGGED_USER', 20 | $loggedUser['email'], 21 | [ 22 | 'expires' => time() + 365*24*3600, 23 | 'secure' => true, 24 | 'httponly' => true, 25 | ] 26 | ); 27 | 28 | $_SESSION['LOGGED_USER'] = $loggedUser['email']; 29 | } else { 30 | $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', 31 | $postData['email'], 32 | $postData['password'] 33 | ); 34 | } 35 | } 36 | } 37 | 38 | // Si le cookie ou la session sont présentes 39 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 40 | $loggedUser = [ 41 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 42 | ]; 43 | } 44 | ?> 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 | 56 |
L'email utilisé lors de la création de compte.
57 |
58 |
59 | 60 | 61 |
62 | 63 |
64 | 65 | 68 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/create.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Site de Recettes - Ajout de recette 13 | 17 | 18 | 19 |
20 | 21 | 22 |

Ajouter une recette

23 |
24 |
25 | 26 | 27 |
Choisissez un titre percutant !
28 |
29 |
30 | 31 | 32 |
33 | 34 |
35 |
36 |
37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/delete.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Site de Recettes - Supprimer la recette ? 16 | 20 | 21 | 22 |
23 | 24 | 25 |

Supprimer la recette ?

26 |
27 |
28 | 29 | 30 |
31 | 32 | 33 |
34 |
35 |
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/post_create.php: -------------------------------------------------------------------------------- 1 | prepare('INSERT INTO recipes(title, recipe, author, is_enabled) VALUES (:title, :recipe, :author, :is_enabled)'); 23 | $insertRecipe->execute([ 24 | 'title' => $title, 25 | 'recipe' => $recipe, 26 | 'author' => $loggedUser['email'], 27 | 'is_enabled' => 1, 28 | ]); 29 | 30 | ?> 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Site de Recettes - Création de recette 39 | 43 | 44 | 45 |
46 | 47 | 48 |

Recette ajoutée avec succès !

49 | 50 |
51 | 52 |
53 |
54 |

Email :

55 |

Recette :

56 |
57 |
58 |
59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/post_delete.php: -------------------------------------------------------------------------------- 1 | prepare('DELETE FROM recipes WHERE recipe_id = :id'); 19 | $deleteRecipeStatement->execute([ 20 | 'id' => $id, 21 | ]); 22 | 23 | header('Location: '.$rootUrl.'home.php'); 24 | ?> 25 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/post_update.php: -------------------------------------------------------------------------------- 1 | prepare('UPDATE recipes SET title = :title, recipe = :recipe WHERE recipe_id = :id'); 25 | $insertRecipeStatement->execute([ 26 | 'title' => $title, 27 | 'recipe' => $recipe, 28 | 'id' => $id, 29 | ]); 30 | 31 | ?> 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Site de Recettes - Création de recette 40 | 44 | 45 | 46 |
47 | 48 | 49 |

Recette modifiée avec succès !

50 | 51 |
52 | 53 |
54 |
55 |

Email :

56 |

Recette :

57 |
58 |
59 |
60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/read.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT *, DATE_FORMAT(c.created_at, "%d/%m/%Y") as comment_date FROM recipes r LEFT JOIN comments c on r.recipe_id = c.recipe_id WHERE r.recipe_id = :id'); 18 | $retrieveRecipeWithCommentsStatement->execute([ 19 | 'id' => $recipeId, 20 | ]); 21 | 22 | $recipeWithComments = $retrieveRecipeWithCommentsStatement->fetchAll(PDO::FETCH_ASSOC); 23 | 24 | $averageRatingStatment = $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'); 25 | $averageRatingStatment->execute([ 26 | 'id' => $recipeId, 27 | ]); 28 | 29 | $averageRating = $averageRatingStatment->fetch(PDO::FETCH_ASSOC); 30 | 31 | $recipe = [ 32 | 'recipe_id' => $recipeWithComments[0]['recipe_id'], 33 | 'title' => $recipeWithComments[0]['title'], 34 | 'recipe' => $recipeWithComments[0]['recipe'], 35 | 'author' => $recipeWithComments[0]['author'], 36 | 'comments' => [], 37 | 'rating' => $averageRating['rating'], 38 | ]; 39 | 40 | foreach($recipeWithComments as $comment) { 41 | if (!is_null($comment['comment_id'])) { 42 | $recipe['comments'][] = [ 43 | 'comment_id' => $comment['comment_id'], 44 | 'comment' => $comment['comment'], 45 | 'user_id' => (int) $comment['user_id'], 46 | 'created_at' => $comment['comment_date'], 47 | ]; 48 | } 49 | } 50 | ?> 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Site de Recettes - <?php echo($recipe['title']); ?> 59 | 63 | 64 | 65 |
66 | 67 | 68 |

69 |
70 |
71 | 72 |
73 | 77 |
78 | 79 | 0): ?> 80 |
81 |

Commentaires

82 |
83 | 84 |
85 |

86 |

87 | () 88 |
89 | 90 |
91 | 92 |
93 | 94 | 95 | 96 |
97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /P4/P4C6/recipes/update.php: -------------------------------------------------------------------------------- 1 | prepare('SELECT * FROM recipes WHERE recipe_id = :id'); 15 | $retrieveRecipeStatement->execute([ 16 | 'id' => $getData['id'], 17 | ]); 18 | 19 | $recipe = $retrieveRecipeStatement->fetch(PDO::FETCH_ASSOC); 20 | ?> 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Site de Recettes - Edition de recette 29 | 33 | 34 | 35 |
36 | 37 | 38 |

Mettre à jour

39 |
40 |
41 | 42 | 43 |
44 |
45 | 46 | 47 |
Choisissez un titre percutant !
48 |
49 |
50 | 51 | 54 |
55 | 56 |
57 |
58 |
59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /P4/P4C6/sql/add_comments.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `we_love_food`.`comments` ( `comment_id` INT NOT NULL AUTO_INCREMENT , `user_id` INT NOT NULL, `recipe_id` INT NOT NULL, `comment` TEXT NOT NULL , PRIMARY KEY (`comment_id`), FOREIGN KEY (`user_id`) REFERENCES users(`user_id`), FOREIGN KEY (`recipe_id`) REFERENCES recipes(`recipe_id`)) ENGINE = MyISAM; 2 | -------------------------------------------------------------------------------- /P4/P4C6/sql/creation_base.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `we_love_food`; 2 | CREATE TABLE `we_love_food`.`users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `full_name` VARCHAR(64) NOT NULL , `email` VARCHAR(512) NOT NULL , `password` VARCHAR(512) NOT NULL , `age` INT NOT NULL , PRIMARY KEY (`user_id`)) ENGINE = MyISAM; 3 | CREATE TABLE `we_love_food`.`recipes` ( `recipe_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(128) NOT NULL , `recipe` TEXT NOT NULL , `author` VARCHAR(512) NOT NULL , `is_enabled` BOOLEAN NOT NULL , PRIMARY KEY (`recipe_id`)) ENGINE = MyISAM; 4 | 5 | 6 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mickael.andrieu@exemple.com', 'Mickaël Andrieu', 'S3cr3t', 1); 7 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (34, 'mathieu.nebra@exemple.com', 'Mathieu Nebra', 'MiamMiam', 2); 8 | insert into `users` (`age`, `email`, `full_name`, `password`, `user_id`) values (28, 'laurene.castor@exemple.com', 'Laurène Castor', 'laCasto28', 3); 9 | ; 10 | 11 | 12 | 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'); 13 | 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'); 14 | 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'); 15 | 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'); -------------------------------------------------------------------------------- /P4/P4C6/sql/improve_comments.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE comments ADD created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; 2 | ALTER TABLE comments ADD review INT NOT NULL DEFAULT 3; -------------------------------------------------------------------------------- /P4/P4C6/submit_contact.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Site de Recettes - Page d'accueil 24 | 28 | 29 | 30 |
31 | 32 | 33 |

Message bien reçu !

34 | 35 |
36 | 37 |
38 |
Rappel de vos informations
39 |

Email :

40 |

Message :

41 |
42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /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 | 12 | if(isset($_GET['limit']) && is_numeric($_GET['limit'])) { 13 | $limit = (int) $_GET['limit']; 14 | } else { 15 | $limit = 100; 16 | } 17 | 18 | // Si le cookie est présent 19 | if (isset($_COOKIE['LOGGED_USER']) || isset($_SESSION['LOGGED_USER'])) { 20 | $loggedUser = [ 21 | 'email' => $_COOKIE['LOGGED_USER'] ?? $_SESSION['LOGGED_USER'], 22 | ]; 23 | } 24 | 25 | $rootPath = $_SERVER['DOCUMENT_ROOT']; 26 | $rootUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; -------------------------------------------------------------------------------- /P4/P4C6/viewed_pages.php: -------------------------------------------------------------------------------- 1 | Cette page a été vue ' . $pages_vues . ' fois !

'); 13 | ?> -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Concevez un site web avec PHP & MySQL 2 | 3 | Ce dépôt git contient tous les exemples de cours et les projets/exercices 4 | du cours "Concevez un site web avec PHP & MySQL" créé par Mathieu Nebra et enrichi par Mickaël Andrieu. 5 | 6 | Le projet est contribuable mais sa mise à jour **n'implique pas** de mise à jour du cours en ligne, il faudra vous rapprocher des équipes pédagogiques d'OpenClassrooms pour cela. 7 | 8 | Happy learning ! --------------------------------------------------------------------------------