-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreateArticle.php
198 lines (158 loc) · 6.88 KB
/
createArticle.php
1
2
3
4
5
6
7
8
9
10
11
12
13
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<?php
session_start();
require_once 'assets/class/DbConnect.php';
require_once 'assets/class/User.php';
require_once 'assets/class/Article.php';
$db = new DbConnect();
$user = new User($db);
$article = new Article($db);
// verify if user is mode or admin
if (!$user->isUserMode()) {
header('Location: index.php');
}
//check if form is submitted
if (isset($_POST['create'])) {
//valider les data côté serveur
$title = trim(strip_tags($_POST['title']));
$description = trim($_POST['description']);
$categorie = trim(strip_tags($_POST['categorie']));
$errorMsg = '';
//Vérifie que les champs ne sont pas vides
if (empty($title) || empty($description) || empty($categorie)) {
var_dump($_POST);
//message d'erreur si un des champs est vide
$errorMsg = "Tous les champs sont requis.";
} else {
//Si tous les champs sont remplis, vérifie si une img est uploadée et procède en conséquence
if (isset($_FILES['image']) && !empty($_FILES['image']['name']) && $_FILES['image']['error'] == 0) {
//Récupère le nom de l'image et son chemin temporaire
$fileName = $_FILES['image']['name'];
$fileTmpName = $_FILES['image']['tmp_name'];
// vérifir le type de fichier téléchargé
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['image']['tmp_name']);
$tmp_name = $_FILES['image']['tmp_name'];
$name = basename($_FILES['image']['name']);
$allowedTypes = [
'image/jpeg',
'image/jpg',
'image/png',
'image/gif'
];
//Vérifie que le fichier téléchargé ne dépasse pas 4MB
if (in_array($mimeType, $allowedTypes) && $_FILES['image']['size'] <= 4000000) {
// $fileName = time() . '-' . $_FILES['image']['name'];
move_uploaded_file($tmp_name, "assets/uploads/$fileName");
//insère data dans la bdd
try {
$insert = $article->createArticle($title, $description, $categorie, $fileName);
//si la data est insérée afficher message de succès et redirection
if ($insert == "ok") {
$_SESSION['success'] = "Article créé avec succès !";
header('Location: blog.php');
} else {
$errorMsg = "Erreur lors de la création de l'article.";
}
} catch (PDOException $e) {
echo $e->getMessage();
}
} else {
$errorMsg = "Veuillez sélectionner une image valide.";
}
} else {
$errorMsg = "Veuillez sélectionner une image.";
}
}
}
?>
<!------------ <!DOCTYPE html> ------------>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Create Article</title>
<!-- favicon -->
<link rel="shortcut icon" type="image/png" href="/blog-js/assets/img/favicon.png"/>
<!-- CSS -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<!-- FONT -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bellota:wght@300&family=Libre+Franklin:wght@100&family=Oswald:wght@300&display=swap" rel="stylesheet">
<!-- JQuery -->
<script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
<!-- JS -->
<script src="assets/js/menu.js"></script>
<script>
function previewImage(event) {
console.log('previewImage() function called')
let input = event.target;
let preview = document.createElement('img');
preview.setAttribute('id', 'preview');
// ajouter l'image à la suite de l'input
input.parentNode.insertBefore(preview, input.nextSibling);
if (input.files && input.files[0]) {
let reader = new FileReader();
reader.onload = function(e) {
preview.src = e.target.result;
preview.style.display = 'block';
console.log(preview);
};
reader.readAsDataURL(input.files[0]);
}
}
</script>
</head>
<body id="create">
<?php
include 'includes/header.php';
$categories = $article->getCategories();
?>
<wrapper>
<main>
<div class="container">
<h1 class="title" data-aos="fade-in">Créer un article</h1>
<!-- Affiche les messages d'erreur et de succès -->
<?php
if (isset($errorMsg)) {
echo '<p class="error">' . $errorMsg;
echo '</p>';
} elseif (isset($successMsg)) {
echo '<p class="success">' . $successMsg;
echo '</p>';
}
?>
<form method="post" enctype="multipart/form-data" data-aos="zoom-in">
<div>
<label for="title">Title</label>
<input type="text" name="title" id="title" required>
<label for="description">Description</label>
<textarea name="description" id="description" cols="30" rows="10"></textarea>
<div class="rowcenter">
<label for="category">Catégorie</label>
<select name="categorie" id="category">
<?php foreach ($categories as $category) : ?>
<option value="<?= $category['id'] ?>"><?= $category['categorie'] ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="colcenter">
<label for="image">Télécharger une image</label>
<input type="file" id="image" name="image" accept="img/*" onchange="previewImage(event)">
</div>
<input type="submit" value="Publier" name="create" class="btn" onclick="ajouter()">
</form>
</div>
</main>
<div class="push"></div>
</wrapper>
<!-- Animations AOS -->
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script>
AOS.init();
</script>
</body>
</html>