summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--accroche.php30
-rw-r--r--accroche.txt1
-rw-r--r--administration.php318
-rw-r--r--articles/a-bout-de-souffle.jpgbin0 -> 443799 bytes
-rw-r--r--articles/acoustic-guitar.pngbin0 -> 111323 bytes
-rw-r--r--articles/ajoutarticle.php103
-rw-r--r--articles/articlesliste.php179
-rw-r--r--articles/atelier-franssmann-mpt-penhars.jpgbin0 -> 687407 bytes
-rw-r--r--articles/baleine-bouchons.jpgbin0 -> 599695 bytes
-rw-r--r--articles/breizh-color.jpgbin0 -> 359249 bytes
-rw-r--r--articles/cafe-philo.jpgbin0 -> 649125 bytes
-rw-r--r--articles/composteur.jpgbin0 -> 56902 bytes
-rw-r--r--articles/emmaus.jpgbin0 -> 73358 bytes
-rw-r--r--articles/fanfare-invisible-manif-climat.jpgbin0 -> 596426 bytes
-rw-r--r--articles/housse-ukulele-reduite.jpgbin0 -> 372151 bytes
-rw-r--r--articles/housse-ukulele.jpgbin0 -> 1298153 bytes
-rw-r--r--articles/installation-stand.jpgbin0 -> 810522 bytes
-rw-r--r--articles/kig-ar-farz.jpgbin0 -> 650173 bytes
-rw-r--r--articles/la-guitare-pour-les-nuls.jpgbin0 -> 104742 bytes
-rw-r--r--articles/lombricomposteur.jpgbin0 -> 915144 bytes
-rw-r--r--articles/mini_a-bout-de-souffle.jpgbin0 -> 15159 bytes
-rw-r--r--articles/mini_acoustic-guitar.pngbin0 -> 26092 bytes
-rw-r--r--articles/mini_atelier-franssmann-mpt-penhars.jpgbin0 -> 20014 bytes
-rw-r--r--articles/mini_baleine-bouchons.jpgbin0 -> 7860 bytes
-rw-r--r--articles/mini_breizh-color.jpgbin0 -> 22504 bytes
-rw-r--r--articles/mini_cafe-philo.jpgbin0 -> 14942 bytes
-rw-r--r--articles/mini_composteur.jpgbin0 -> 14963 bytes
-rw-r--r--articles/mini_emmaus.jpgbin0 -> 22084 bytes
-rw-r--r--articles/mini_fanfare-invisible-manif-climat.jpgbin0 -> 24393 bytes
-rw-r--r--articles/mini_housse-ukulele.jpgbin0 -> 23877 bytes
-rw-r--r--articles/mini_installation-stand.jpgbin0 -> 15192 bytes
-rw-r--r--articles/mini_kig-ar-farz.jpgbin0 -> 16772 bytes
-rw-r--r--articles/mini_la-guitare-pour-les-nuls.jpgbin0 -> 14996 bytes
-rw-r--r--articles/mini_lombricomposteur.jpgbin0 -> 21798 bytes
-rw-r--r--articles/mini_nettoyage-des-bois.jpgbin0 -> 32145 bytes
-rw-r--r--articles/mini_nora-isaac-22-millions-de-vue.jpgbin0 -> 18663 bytes
-rw-r--r--articles/mini_poney.pngbin0 -> 92972 bytes
-rw-r--r--articles/mini_reseau.pngbin0 -> 48413 bytes
-rw-r--r--articles/mini_rouget.jpgbin0 -> 15815 bytes
-rw-r--r--articles/mini_seules-les-betes.jpgbin0 -> 7465 bytes
-rw-r--r--articles/mini_surf.pngbin0 -> 129819 bytes
-rw-r--r--articles/miniatures.php85
-rw-r--r--articles/modifarticle.php111
-rw-r--r--articles/nettoyage-des-bois.jpgbin0 -> 975411 bytes
-rw-r--r--articles/nora-isaac-22-millions-de-vue.jpgbin0 -> 64891 bytes
-rw-r--r--articles/poney.pngbin0 -> 603474 bytes
-rw-r--r--articles/reseau.pngbin0 -> 54714 bytes
-rw-r--r--articles/rouget.jpgbin0 -> 1103824 bytes
-rw-r--r--articles/seules-les-betes.jpgbin0 -> 119608 bytes
-rw-r--r--articles/supprarticle.php131
-rw-r--r--articles/supprconfirmée.php85
-rw-r--r--articles/surf.pngbin0 -> 2810509 bytes
-rw-r--r--blog.css352
-rw-r--r--carton/favicon_sakura.zipbin0 -> 4044 bytes
-rw-r--r--carton/laos/069917-laos-le-mekong-au-coucher-du.jpgbin0 -> 54492 bytes
-rw-r--r--carton/laos/390982_laos_tropiki_palmy_poselenie_derevnya_reka_tuman_x_1680x1050_www.Gde-Fon.com.jpgbin0 -> 746092 bytes
-rw-r--r--carton/laos/770px-Pha_That_Luang_Vientiane_Laos_Wikimedia_Commons.jpgbin0 -> 56158 bytes
-rw-r--r--carton/laos/Sunset-Mekong-river-Vientiane-Laos-600x1024.jpgbin0 -> 160826 bytes
-rw-r--r--carton/laos/Vieng_Xai_Laos02.jpgbin0 -> 3396634 bytes
-rw-r--r--carton/laos/laos-447_960_720.jpgbin0 -> 257775 bytes
-rw-r--r--carton/laos/laos.jpgbin0 -> 408539 bytes
-rw-r--r--carton/laos/mekong.jpgbin0 -> 250419 bytes
-rw-r--r--carton/sakura-cerisiers.jpgbin0 -> 832555 bytes
-rw-r--r--carton/sakura.pngbin0 -> 81306 bytes
-rw-r--r--connexion.php75
-rw-r--r--connexionbase.php10
-rw-r--r--contact-post.php94
-rw-r--r--contact.php90
-rw-r--r--favicon.icobin0 -> 5686 bytes
-rw-r--r--index.php174
-rw-r--r--kiffe.php77
-rw-r--r--logout.php7
-rw-r--r--matomo.php40
-rw-r--r--mdp.php34
-rw-r--r--mekong.jpgbin0 -> 327363 bytes
-rw-r--r--menu.php9
-rw-r--r--minilogo.pngbin0 -> 16281 bytes
-rw-r--r--photoskaty/katy.jpgbin0 -> 37520 bytes
-rw-r--r--photoskaty/listephoto.php110
-rw-r--r--photoskaty/photo.txt1
-rw-r--r--photoskaty/photomodif.php53
-rw-r--r--photoskaty/photoupload.php90
-rw-r--r--photospolo/listephoto.php110
-rw-r--r--photospolo/photo.txt1
-rw-r--r--photospolo/photomodif.php53
-rw-r--r--photospolo/photoupload.php90
-rw-r--r--photospolo/polo.jpgbin0 -> 9064 bytes
-rw-r--r--présentationkaty.php33
-rw-r--r--présentationkaty.txt1
-rw-r--r--présentationpolo.php33
-rw-r--r--présentationpolo.txt1
-rw-r--r--refuser_indexation.txt7
-rw-r--r--réseau.pngbin0 -> 54714 bytes
-rw-r--r--sakura.pngbin0 -> 4686 bytes
-rw-r--r--zingueurs.jpgbin0 -> 13529 bytes
95 files changed, 2588 insertions, 0 deletions
diff --git a/accroche.php b/accroche.php
new file mode 100644
index 0000000..7fd0994
--- /dev/null
+++ b/accroche.php
@@ -0,0 +1,30 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: connexion.php');
19 exit ();
20}
21
22$fichier = fopen('accroche.txt','r+');
23ftruncate($fichier,0); // évite les problèmes quand on change pour un titre plus court
24fputs($fichier, $_POST['accroche']);
25fseek($fichier, 0);
26fclose($fichier);
27
28header('Location: administration.php?modifaccroche=1');
29exit ();
30?>
diff --git a/accroche.txt b/accroche.txt
new file mode 100644
index 0000000..9cc45fa
--- /dev/null
+++ b/accroche.txt
@@ -0,0 +1 @@
Détente, voyages, cuisine, musique \ No newline at end of file
diff --git a/administration.php b/administration.php
new file mode 100644
index 0000000..a059023
--- /dev/null
+++ b/administration.php
@@ -0,0 +1,318 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // = booléen
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: connexion.php');
19 exit ();
20}
21?>
22
23<!DOCTYPE html>
24<html lang="fr" >
25 <head>
26 <meta charset="utf-8" />
27 <title>zone privée</title>
28 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
29 <link rel="stylesheet" href="blog.css" />
30 <meta name="viewport" content="width=device-width" />
31 <meta name="robots" content="noindex" >
32 <style>
33 section
34 {
35 border: 2px #FFBD8D solid;
36 margin: 10px 0px;
37 padding: 10px;
38 width: 960px;
39 display: flex;
40 flex-wrap: wrap;
41 }
42 section img
43 {
44 width: 170px;
45 }
46 </style>
47 <?php include("matomo.php"); ?>
48 </head>
49
50 <body>
51 <div id="bloc_page">
52
53 <header>
54 <h1><img class="sakura" src="sakura.png" alt="sakura" />zone privée<img class="sakura" src="sakura.png" alt="sakura" /></h1>
55 </header>
56
57 <li id="admin" >
58 <p><i>Ne pas oublier de cliquer sur "déconnexion" quand on a fini !</i></p>
59 <p><a href="logout.php" >déconnexion</a></p>
60 </li>
61
62
63 <?php include("connexionbase.php"); ?>
64
65
66 <?php // confirmation d'un changement
67
68 // confirmation et messages d'erreur concernant l'ajout d'un article
69 if (isset($_GET['nouvarticle']))
70 {
71 if ($_GET['nouvarticle'] == 1)
72 {
73 echo ('<i>Erreur d\'envoi: Choisir au moins un titre.</i>');
74 }
75 elseif ($_GET['nouvarticle'] == 2)
76 {
77 echo ('<i>Erreur d\'envoi: Taille limite du fichier de 8 Mo)</i>');
78 }
79 elseif ($_GET['nouvarticle'] == 3)
80 {
81 echo ('<i>Echec de l\'envoi du fichier, il doit être au format "jpg", "png" ou "gif"</i>');
82 }
83 elseif ($_GET['nouvarticle'] == 4)
84 {
85 echo ('<i>Echec de l\'envoi du fichier qui n\'est pas de votre faute, appelez ordipolo</i>');
86 }
87 elseif ($_GET['nouvarticle'] == 5)
88 {
89 echo ('<i>Le nouvel article a bien été ajouté.</i>');
90 }
91 else
92 {}
93 }
94 else
95 {}
96
97 // confirmation et messages d'erreur concernant le modification d'un article
98 if (isset($_GET['nouvarticle']))
99 {
100 if ($_GET['nouvarticle'] == 6)
101 {
102 echo ('<i>L\'article a bien été modifié.</i>');
103 }
104 elseif ($_GET['nouvarticle'] == 7)
105 {
106 echo ('<i>Erreur: pas de fichier sélectionné OU fichier trop lourd (taille limite = 8 Mo)</i>');
107 }
108 else
109 {}
110 }
111 else
112 {}
113
114 // message qui dit qu'on a modifié la phrase d'accroche
115 if (isset ($_GET["modifaccroche"]) AND ($_GET["modifaccroche"]) == 1)
116 {
117 echo '<p><i>la phrase d\'accroche a été modifiée</i></p>';
118 }
119
120 // message qui dit qu'on a modifié la présentation
121 if (isset ($_GET["modifprez"]) AND ($_GET["modifprez"]) == 1)
122 {
123 echo '<p><i>le texte de présentation a été modifié</i></p>';
124 }
125
126 // confirmation et messages d'erreur concernant la photo de la présentation
127 if (isset ($_GET["modifphoto"]) AND ($_GET["modifphoto"]) == 4)
128 {
129 echo '<p><i>la photo de présentation a bien été modifiée</i></p>';
130 }
131 elseif (isset ($_GET["modifphoto"]) AND ($_GET["modifphoto"]) == 1)
132 {
133 echo '<p><i>Erreur. Il n\'y a pas de fichier ou celui-ci est trop lourd (taille maximale de 8 MO).</i></p>';
134 }
135 elseif (isset ($_GET["modifphoto"]) AND ($_GET["modifphoto"]) == 2)
136 {
137 echo '<p><i>Echec de l\'envoi du fichier, il doit être au format "jpg", "png" ou "gif".</i></p>';
138 }
139 elseif (isset ($_GET["modifphoto"]) AND ($_GET["modifphoto"]) == 3)
140 {
141 echo '<p><i>Echec de l\'envoi du fichier qui n\'est pas de votre faute, appelez ordipolo !</i></p>';
142 }
143 else
144 {}
145
146 // message qui dit qu'on a modifié le mot de passe
147 if (isset ($_GET["modifmdp"]) AND ($_GET["modifmdp"]) == 1)
148 {
149 $réponse = $base->query('SELECT * FROM motdepasse');
150 while ($données = $réponse->fetch())
151 {
152 echo '<p><i>le mot de passe a été modifié</br>
153 c\'est maintenant: ' . htmlspecialchars($données['motdepasse']) . '</br>
154 attention de ne pas l\'oublier !!</i></p>';
155 }
156 }
157 ?>
158
159
160 <!-- nouvel article -->
161 <section style="flex-direction: column;" >
162 <p>Ajouter un nouvel article au blog.<br/>
163 - mettre au minimum un titre<br/>
164 - l'ajout d'un texte et/ou d'une image est faculatif</p>
165 <form method="post" action="articles/ajoutarticle.php" enctype="multipart/form-data" >
166 <p><label for="titre" >Titre:</label>
167 <input type="text" name="titre" id="titre" size="50" /></p>
168
169 <p><label>Télécharger une image depuis mon PC / tablette / téléphone:</label><br/>
170 <input type="file" name="photo" id="photo" />
171 <!-- on crée la variable $_FILES["photo"], taille max de 8 MO sinon la photo est refusée par le serveur -->
172 <input type="hidden" name="MAX_FILE_SIZE" value="8000000"></p>
173
174 <p><label for="article" >Ecrire un texte:</label>
175 <textarea name="article" id="article" rows="10" cols="50" ></textarea></p>
176
177 <p><input type="submit" value="VALIDER LE NOUVEL ARTICLE" /></p>
178 </form>
179 </section>
180
181 <section>
182 <p><a href="articles/articlesliste.php" >Modifier ou supprimer un article.</a></p>
183 </section>
184
185
186 <!-- phrase d'accroche-->
187 <section>
188 <form method="post" action="accroche.php" >
189 <label for="accroche" >Modifier la phrase d'accroche:</label><br/>
190 <?php
191 $fichier = fopen('accroche.txt','r');
192 fseek($fichier, 0);
193 $accroche = fgets($fichier);
194 fseek($fichier, 0);
195 fclose($fichier);
196 ?>
197 <input type="text" name="accroche" id="accroche" size="30" value="<?php echo htmlspecialchars($accroche); ?>" />
198 <input type="submit" value="Valider la nouvelle phrase" />
199 </form>
200 </section>
201
202
203 <!-- photos -->
204 <section>
205 <div>
206 <?php
207 // récupérer le nom de la photo sélectionnée
208 $fichier = fopen('photoskaty/photo.txt','r');
209 fseek($fichier, 0);
210 $photokaty = fgets($fichier);
211 fseek($fichier, 0);
212 ?>
213
214 <p>Photo actuelle de Katy:<br/>
215 <a href="photoskaty/listephoto.php" >La changer</a></p>
216 <figure class="photo" >
217 <a href="photoskaty/listephoto.php" ><img src="photoskaty/<?php echo $photokaty; ?>" alt="photo" /></a>
218 </figure>
219 </div>
220
221 <div>
222 <?php
223 // récupérer le nom de la photo sélectionnée
224 $fichier = fopen('photospolo/photo.txt','r');
225 fseek($fichier, 0);
226 $photopolo = fgets($fichier);
227 fseek($fichier, 0);
228 ?>
229
230 <p>Photo actuelle de Polo:<br/>
231 <a href="photospolo/listephoto.php" >La changer</a></p>
232 <figure class="photo" >
233 <a href="photospolo/listephoto.php" ><img src="photospolo/<?php echo $photopolo; ?>" alt="photo" /></a>
234 </figure>
235 </div>
236 </section>
237
238
239 <!-- présentation -->
240 <section>
241 <form method="post" action="présentationkaty.php" >
242 <label for="nouvelleprez" ><p>Modifier présentation de Katy.</p></label>
243 <?php
244 $fichier = fopen('présentationkaty.txt','r');
245 fseek($fichier, 0);
246 ?>
247 <textarea name="nouvelleprez" id="nouvelleprez" rows="5" cols="70" ><?php
248 if ($fichier) // si le fichier disparaît, ne fait pas cramer le PC du visiteur !!
249 {
250 while (!feof($fichier)) // Tant que l'on est pas à la fin du fichier
251 {
252 $présentation = fgets($fichier);
253 echo htmlspecialchars($présentation);
254 }
255 }
256 ?></textarea>
257 <?php
258 fseek($fichier, 0);
259 fclose($fichier);
260 ?>
261 <p><input type="submit" value="Valider le nouveau texte" /></p>
262 </form>
263
264 <form method="post" action="présentationpolo.php" >
265 <label for="nouvelleprez" ><p>Modifier présentation de Polo.</p></label>
266 <?php
267 $fichier = fopen('présentationpolo.txt','r');
268 fseek($fichier, 0);
269 ?>
270 <textarea name="nouvelleprez" id="nouvelleprez" rows="5" cols="70" ><?php
271 if ($fichier) // si le fichier disparaît, ne fait pas cramer le PC du visiteur !!
272 {
273 while (!feof($fichier)) // Tant que l'on est pas à la fin du fichier
274 {
275 $présentation = fgets($fichier);
276 echo htmlspecialchars($présentation);
277 }
278 }
279 ?></textarea>
280 <?php
281 fseek($fichier, 0);
282 fclose($fichier);
283 ?>
284 <p><input type="submit" value="Valider le nouveau texte" /></p>
285 </form>
286 </section>
287
288
289 <!-- mot de passe -->
290 <section>
291 <form method="post" action="mdp.php" >
292 <label for="nouveaumdp" >Modifier le mot de passe de connexion :</label><br/>
293 <input type="password" name="nouveaumdp" id="nouveaumdp" />
294 <input type="submit" value="Valider le nouveau mot de passe" />
295 </form>
296 <?php // message qui dit qu'on a modifié le mot de passe
297 if (isset ($_GET["modifmdp"]) AND ($_GET["modifmdp"]) == 1)
298 {
299 $réponse = $base->query('SELECT * FROM motdepasse');
300 while ($données = $réponse->fetch())
301 {
302 echo '<p><i>le mot de passe a été modifié</br>
303 c\'est maintenant: ' . htmlspecialchars($données['motdepasse']) . '</br>
304 attention de ne pas l\'oublier !!</i></p>';
305 }
306 }
307 ?>
308 </section>
309
310
311 <li id="admin" >
312 <p><i>Ne pas oublier de cliquer sur "déconnexion" quand on a fini !</i></p>
313 <p><a href="logout.php" >déconnexion</a></p>
314 </li>
315
316 </div>
317 </body>
318</html>
diff --git a/articles/a-bout-de-souffle.jpg b/articles/a-bout-de-souffle.jpg
new file mode 100644
index 0000000..591496c
--- /dev/null
+++ b/articles/a-bout-de-souffle.jpg
Binary files differ
diff --git a/articles/acoustic-guitar.png b/articles/acoustic-guitar.png
new file mode 100644
index 0000000..5503dd0
--- /dev/null
+++ b/articles/acoustic-guitar.png
Binary files differ
diff --git a/articles/ajoutarticle.php b/articles/ajoutarticle.php
new file mode 100644
index 0000000..56f63a1
--- /dev/null
+++ b/articles/ajoutarticle.php
@@ -0,0 +1,103 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// récupérer les POST, complèter la base et uploader des photos
28if (isset ($_FILES['photo']) AND $_FILES['photo']['error'] == 1) // fichier trop lourd
29{
30 header('Location: ../administration.php?nouvarticle=2');
31 exit ();
32}
33elseif ($_FILES['photo']['error'] == 0 AND $_POST['titre'] != '') // présence d'un titre
34{
35 // extension du fichier
36 $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
37 $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
38 if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
39 {
40 // on récupère la variable $nom
41 $nom = basename ($_FILES['photo']['name']);
42
43 // vérification et formatage du nom du fichier
44 // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
45 // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
46 $nom = str_replace(
47 array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
48 array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
49 $nom);
50 // minuscules
51 $nom = mb_strtolower($nom, 'UTF-8');
52 $infophoto['extension'] = mb_strtolower($infophoto['extension'], 'UTF-8');
53 // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
54 $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
55
56 // ajout article avec photo
57 if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/articles/' . $nom))
58 // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
59 // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
60 {
61 // nom de la miniature
62 $mini_nom = "mini_" . $nom;
63
64 $requête = $base->prepare('INSERT INTO articles (nomarticle, contenu, nomphoto, miniature) VALUES (?, ?, ?, ?)');
65 $requête->execute(array(
66 $_POST['titre'],
67 $_POST['article'],
68 $nom,
69 $mini_nom));
70
71 // création de la miniature
72 include("miniatures.php");
73
74 header('Location: ../administration.php?nouvarticle=5'); // succès, move_uploaded_file renvoie la valeur TRUE
75 exit ();
76 }
77 else // echec à l'enregistrement, la fonction renvoie FALSE
78 {
79 header('Location: ../administration.php?nouvarticle=4');
80 exit ();
81 }
82 }
83 else // mauvais format
84 {
85 header('Location: ../administration.php?nouvarticle=3');
86 exit ();
87 }
88}
89elseif ($_POST['titre'] != '') // article sans photo
90{
91 $requête = $base->prepare('INSERT INTO articles (nomarticle, contenu) VALUES (?, ?)');
92 $requête->execute(array(
93 $_POST['titre'],
94 $_POST['article']));
95
96 header('Location: ../administration.php?nouvarticle=5');
97 exit ();
98}
99else // pas de titre
100{
101 header('Location: ../administration.php?nouvarticle=1');
102}
103?>
diff --git a/articles/articlesliste.php b/articles/articlesliste.php
new file mode 100644
index 0000000..f56cea7
--- /dev/null
+++ b/articles/articlesliste.php
@@ -0,0 +1,179 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21?>
22
23<!DOCTYPE html>
24<html lang="fr" >
25 <head>
26 <meta charset="utf-8" />
27 <title>modifier, supprimer un article</title>
28 <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico" />
29 <link rel="stylesheet" href="../blog.css" />
30 <meta name="viewport" content="width=device-width" />
31 <style>
32 section
33 {
34 margin: 10px 0px;
35 padding: 10px;
36 width: 960px;
37 }
38 </style>
39 </head>
40
41 <body>
42 <div id="bloc_page">
43
44 <header>
45 <h1><img class="sakura" src="../sakura.png" alt="sakura" />
46 Modifier ou supprimer un article
47 <img class="sakura" src="../sakura.png" alt="sakura" /></h1>
48 </header>
49
50 <li id="admin" >
51 <p><a href="../administration.php" >retour page précédente</a></p>
52 </li>
53
54
55 <!-- connexion à la base de données -->
56 <?php include("../connexionbase.php"); ?>
57
58
59 <?php // message de retour avec des GET venant de supprconfirmée.php
60 if (isset ($_GET['erreursuppr']))
61 {
62 if($_GET['erreursuppr'] == 1)
63 {
64 echo('<p><i>Erreur à la suppression d\'une image ou d\'un article,<br/>
65 si cet avertissement vous semble étrange, contactez ordipolo.</i></p>');
66 }
67 else
68 {}
69 }
70 elseif (isset ($_GET['suppr']))
71 {
72 if($_GET['suppr'] == 1)
73 {
74 echo('<i>L\'image a bien été supprimée !</i>');
75 }
76 elseif($_GET['suppr'] == 2)
77 {
78 echo('<i>L\'article a bien été supprimé !</i>');
79 }
80 else
81 {}
82 }
83 else
84 {}
85 ?>
86
87
88 <?php
89 $réponse = $base->query('SELECT id, nomarticle, contenu, nomphoto, miniature, DATE_FORMAT(dateheure, \'article ajouté le %d/%m/%Y à %Hh%i\')
90 AS date FROM articles ORDER BY id DESC');
91 while ($données = $réponse->fetch())
92 {
93 echo('<section>
94 <article>
95 <p class="dateheure" >' . $données['date'] . '</p>'); // date
96
97 // titre et texte
98 echo('<p><b>Modifier le titre et le texte.</b></p>');
99
100 echo('<form method="post" action="modifarticle.php" >');
101
102 echo('<p><label for="titre" >Titre:</label>
103 <input type="text" name="titre" id="titre" value="'
104 . htmlspecialchars($données['nomarticle']) . '" size="30" /></p>'); // titre
105
106 echo('<p><label for="article" >Texte:</label>
107 <textarea name="article" id="article" rows="10" cols="50" >'
108 . htmlspecialchars($données['contenu']) . '</textarea></p>'); // texte
109
110 echo('<p><input type="hidden" name="ligne" id="ligne" value="'
111 . $données['id'] . '" /></p>'); // numéro de la ligne dans la base
112
113 echo('<p><input type="submit" value="VALIDER LE NOUVEAU TEXTE" /></p>
114 </form>'); // bouton
115
116 // image
117 if ($données['nomphoto'] == '') // pas d'image
118 {
119 echo('<form method="post" action="modifarticle.php" enctype="multipart/form-data" >');
120
121 echo('<p><label><b>Ajouter une image à l\'article depuis mon PC / tablette / téléphone:</b></label><br/>
122 <input type="file" name="photo" id="photo" />
123 <input type="hidden" name="MAX_FILE_SIZE" value="8000000" ></p>'); // nouvelle image
124
125 echo('<p><input type="hidden" name="ligne" id="ligne" value="'
126 . $données['id'] . '" /></p>'); // numéro de la ligne dans la base
127
128 echo('<p><input type="submit" value="VALIDER L\'IMAGE" /></p>
129 </form>'); // bouton
130 }
131 else // y a déjà une image
132 {
133 echo('<form method="post" action="modifarticle.php" enctype="multipart/form-data" >');
134
135 echo('<p><label><b>Choisir une autre image sur mon PC / tablette / téléphone:</b></label><br/>
136 <input type="file" name="photo" id="photo" />
137 <input type="hidden" name="MAX_FILE_SIZE" value="8000000" ></p>'); // nouvelle image
138
139 echo('<div><p>Image actuelle =<img src="' . $données['miniature'] . '" alt="aucune" /></p></div>'); // montrer l'image
140
141 echo('<p><input type="hidden" name="ligne" id="ligne" value="'
142 . $données['id'] . '" /></p>'); // numéro de la ligne dans la base
143
144 echo('<p><input type="submit" value="VALIDER LA NOUVELLE IMAGE" /></p>
145 </form>'); // bouton
146
147 // supprimer l'image
148 // utilisation d'un POST au lieu d'un GET pour ne rien révéler de la base de données
149 echo ('<form method="post" action="supprarticle.php" >
150 <p><label><b>Supprimer l\'image illustrant cet article:</b></label></p>
151 <input type="hidden" name="quoi" value="image" >
152 <input type="hidden" name="ligne" value="' . $données['id'] . '" >
153 <p><input type="submit" value="SUPPRIMER L\'IMAGE" /></p>
154 </form>');
155
156 echo ('<p>Note: pour supprimer uniquement le texte, il suffit que le formulaire "Texte" soit vide et de cliquer sur "VALIDER LE NOUVEAU TEXTE".</p>');
157 }
158
159 //supprimer tout l'article
160 // utilisation d'un POST au lieu d'un GET pour ne rien révéler de la base de données
161 echo('<form method="post" action="supprarticle.php" >
162 <p><label><b>Supprimer l\'article entier:</b></label></p>
163 <input type="hidden" name="quoi" value="article" >
164 <input type="hidden" name="ligne" value="' . $données['id'] . '" >
165 <p><input type="submit" value="SUPPRIMER L\'ARTICLE" /></p>
166 </form>');
167
168 echo('<p><b>Ne rien faire tout compte fait.</b></p>
169 <p><a href="../administration.php" >Retour page précédente</a></p>');
170
171 echo('</article>
172 </section>');
173 }
174 $réponse->closeCursor();
175 ?>
176
177 </div>
178 </body>
179</html>
diff --git a/articles/atelier-franssmann-mpt-penhars.jpg b/articles/atelier-franssmann-mpt-penhars.jpg
new file mode 100644
index 0000000..4a6a83f
--- /dev/null
+++ b/articles/atelier-franssmann-mpt-penhars.jpg
Binary files differ
diff --git a/articles/baleine-bouchons.jpg b/articles/baleine-bouchons.jpg
new file mode 100644
index 0000000..f972330
--- /dev/null
+++ b/articles/baleine-bouchons.jpg
Binary files differ
diff --git a/articles/breizh-color.jpg b/articles/breizh-color.jpg
new file mode 100644
index 0000000..61d6611
--- /dev/null
+++ b/articles/breizh-color.jpg
Binary files differ
diff --git a/articles/cafe-philo.jpg b/articles/cafe-philo.jpg
new file mode 100644
index 0000000..0904644
--- /dev/null
+++ b/articles/cafe-philo.jpg
Binary files differ
diff --git a/articles/composteur.jpg b/articles/composteur.jpg
new file mode 100644
index 0000000..7b700e9
--- /dev/null
+++ b/articles/composteur.jpg
Binary files differ
diff --git a/articles/emmaus.jpg b/articles/emmaus.jpg
new file mode 100644
index 0000000..9cfeb9e
--- /dev/null
+++ b/articles/emmaus.jpg
Binary files differ
diff --git a/articles/fanfare-invisible-manif-climat.jpg b/articles/fanfare-invisible-manif-climat.jpg
new file mode 100644
index 0000000..8642016
--- /dev/null
+++ b/articles/fanfare-invisible-manif-climat.jpg
Binary files differ
diff --git a/articles/housse-ukulele-reduite.jpg b/articles/housse-ukulele-reduite.jpg
new file mode 100644
index 0000000..f8fcd6b
--- /dev/null
+++ b/articles/housse-ukulele-reduite.jpg
Binary files differ
diff --git a/articles/housse-ukulele.jpg b/articles/housse-ukulele.jpg
new file mode 100644
index 0000000..5262b3c
--- /dev/null
+++ b/articles/housse-ukulele.jpg
Binary files differ
diff --git a/articles/installation-stand.jpg b/articles/installation-stand.jpg
new file mode 100644
index 0000000..5b87c56
--- /dev/null
+++ b/articles/installation-stand.jpg
Binary files differ
diff --git a/articles/kig-ar-farz.jpg b/articles/kig-ar-farz.jpg
new file mode 100644
index 0000000..0c94d33
--- /dev/null
+++ b/articles/kig-ar-farz.jpg
Binary files differ
diff --git a/articles/la-guitare-pour-les-nuls.jpg b/articles/la-guitare-pour-les-nuls.jpg
new file mode 100644
index 0000000..e359861
--- /dev/null
+++ b/articles/la-guitare-pour-les-nuls.jpg
Binary files differ
diff --git a/articles/lombricomposteur.jpg b/articles/lombricomposteur.jpg
new file mode 100644
index 0000000..d3bd801
--- /dev/null
+++ b/articles/lombricomposteur.jpg
Binary files differ
diff --git a/articles/mini_a-bout-de-souffle.jpg b/articles/mini_a-bout-de-souffle.jpg
new file mode 100644
index 0000000..e4add77
--- /dev/null
+++ b/articles/mini_a-bout-de-souffle.jpg
Binary files differ
diff --git a/articles/mini_acoustic-guitar.png b/articles/mini_acoustic-guitar.png
new file mode 100644
index 0000000..c330ad4
--- /dev/null
+++ b/articles/mini_acoustic-guitar.png
Binary files differ
diff --git a/articles/mini_atelier-franssmann-mpt-penhars.jpg b/articles/mini_atelier-franssmann-mpt-penhars.jpg
new file mode 100644
index 0000000..e1e03d7
--- /dev/null
+++ b/articles/mini_atelier-franssmann-mpt-penhars.jpg
Binary files differ
diff --git a/articles/mini_baleine-bouchons.jpg b/articles/mini_baleine-bouchons.jpg
new file mode 100644
index 0000000..04354fd
--- /dev/null
+++ b/articles/mini_baleine-bouchons.jpg
Binary files differ
diff --git a/articles/mini_breizh-color.jpg b/articles/mini_breizh-color.jpg
new file mode 100644
index 0000000..d8f820d
--- /dev/null
+++ b/articles/mini_breizh-color.jpg
Binary files differ
diff --git a/articles/mini_cafe-philo.jpg b/articles/mini_cafe-philo.jpg
new file mode 100644
index 0000000..cf2ffa2
--- /dev/null
+++ b/articles/mini_cafe-philo.jpg
Binary files differ
diff --git a/articles/mini_composteur.jpg b/articles/mini_composteur.jpg
new file mode 100644
index 0000000..aa24816
--- /dev/null
+++ b/articles/mini_composteur.jpg
Binary files differ
diff --git a/articles/mini_emmaus.jpg b/articles/mini_emmaus.jpg
new file mode 100644
index 0000000..b183b4f
--- /dev/null
+++ b/articles/mini_emmaus.jpg
Binary files differ
diff --git a/articles/mini_fanfare-invisible-manif-climat.jpg b/articles/mini_fanfare-invisible-manif-climat.jpg
new file mode 100644
index 0000000..69490a8
--- /dev/null
+++ b/articles/mini_fanfare-invisible-manif-climat.jpg
Binary files differ
diff --git a/articles/mini_housse-ukulele.jpg b/articles/mini_housse-ukulele.jpg
new file mode 100644
index 0000000..eec6917
--- /dev/null
+++ b/articles/mini_housse-ukulele.jpg
Binary files differ
diff --git a/articles/mini_installation-stand.jpg b/articles/mini_installation-stand.jpg
new file mode 100644
index 0000000..eeb7ee2
--- /dev/null
+++ b/articles/mini_installation-stand.jpg
Binary files differ
diff --git a/articles/mini_kig-ar-farz.jpg b/articles/mini_kig-ar-farz.jpg
new file mode 100644
index 0000000..b45cda5
--- /dev/null
+++ b/articles/mini_kig-ar-farz.jpg
Binary files differ
diff --git a/articles/mini_la-guitare-pour-les-nuls.jpg b/articles/mini_la-guitare-pour-les-nuls.jpg
new file mode 100644
index 0000000..f8289fc
--- /dev/null
+++ b/articles/mini_la-guitare-pour-les-nuls.jpg
Binary files differ
diff --git a/articles/mini_lombricomposteur.jpg b/articles/mini_lombricomposteur.jpg
new file mode 100644
index 0000000..0fb7bc6
--- /dev/null
+++ b/articles/mini_lombricomposteur.jpg
Binary files differ
diff --git a/articles/mini_nettoyage-des-bois.jpg b/articles/mini_nettoyage-des-bois.jpg
new file mode 100644
index 0000000..1227a78
--- /dev/null
+++ b/articles/mini_nettoyage-des-bois.jpg
Binary files differ
diff --git a/articles/mini_nora-isaac-22-millions-de-vue.jpg b/articles/mini_nora-isaac-22-millions-de-vue.jpg
new file mode 100644
index 0000000..aa6b52c
--- /dev/null
+++ b/articles/mini_nora-isaac-22-millions-de-vue.jpg
Binary files differ
diff --git a/articles/mini_poney.png b/articles/mini_poney.png
new file mode 100644
index 0000000..b6e4413
--- /dev/null
+++ b/articles/mini_poney.png
Binary files differ
diff --git a/articles/mini_reseau.png b/articles/mini_reseau.png
new file mode 100644
index 0000000..5097a1d
--- /dev/null
+++ b/articles/mini_reseau.png
Binary files differ
diff --git a/articles/mini_rouget.jpg b/articles/mini_rouget.jpg
new file mode 100644
index 0000000..1e39f49
--- /dev/null
+++ b/articles/mini_rouget.jpg
Binary files differ
diff --git a/articles/mini_seules-les-betes.jpg b/articles/mini_seules-les-betes.jpg
new file mode 100644
index 0000000..2e50e5b
--- /dev/null
+++ b/articles/mini_seules-les-betes.jpg
Binary files differ
diff --git a/articles/mini_surf.png b/articles/mini_surf.png
new file mode 100644
index 0000000..73d6e9f
--- /dev/null
+++ b/articles/mini_surf.png
Binary files differ
diff --git a/articles/miniatures.php b/articles/miniatures.php
new file mode 100644
index 0000000..48f3525
--- /dev/null
+++ b/articles/miniatures.php
@@ -0,0 +1,85 @@
1<?php
2if ($infophoto['extension'] == 'png' OR $infophoto['extension'] == 'PNG')
3{
4 $source = imagecreatefrompng($nom);
5 $hauteur_source = imagesy($source);
6
7 if ($hauteur_source > 250)
8 {
9 // dimensions des deux images
10 $largeur_source = imagesx($source);
11 $forme = $hauteur_source / $largeur_source; // si image plus haute que large: >1, si plus large: <1
12 $hauteur_destination = 250; // hauteur arbitraire
13 $largeur_destination = 250 / $forme; // largeur proportionnée
14
15 // créer la miniature
16 $destination = imagecreatetruecolor($largeur_destination, 250);
17 imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
18
19 // enregistrer la nouvelle image
20 imagepng($destination, $mini_nom);
21 }
22 else
23 {
24 // enregistrer l'image de départ avec le nom d'une miniature
25 imagepng($source, $mini_nom);
26 }
27}
28elseif ($infophoto['extension'] == 'jpg' OR $infophoto['extension'] == 'jpeg')
29{
30 $source = imagecreatefromjpeg($nom);
31 $hauteur_source = imagesy($source);
32;
33 if ($hauteur_source > 250)
34 {
35 // dimensions des deux images
36 $largeur_source = imagesx($source);
37 $forme = $hauteur_source / $largeur_source; // si image plus haute que large: >1, si plus large: <1
38 $hauteur_destination = 250; // hauteur arbitraire
39 $largeur_destination = 250 / $forme; // largeur proportionnée
40
41 // créer la miniature
42 $destination = imagecreatetruecolor($largeur_destination, 250);
43 imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
44
45 // enregistrer la nouvelle image
46 imagejpeg($destination, $mini_nom);
47 }
48 else
49 {
50 // enregistrer l'image de départ avec le nom d'une miniature
51 imagejpeg($source, $mini_nom);
52 }
53}
54elseif ($infophoto['extension'] == 'gif')
55{
56 $source = imagecreatefromgif($nom);
57 $hauteur_source = imagesy($source);
58
59 if ($hauteur_source > 250)
60 {
61 // dimensions des deux images
62 $largeur_source = imagesx($source);
63 $forme = $hauteur_source / $largeur_source; // si image plus haute que large: >1, si plus large: <1
64 $hauteur_destination = 250; // hauteur arbitraire
65 $largeur_destination = 250 / $forme; // largeur proportionnée
66
67 // créer la miniature
68 $destination = imagecreatetruecolor($largeur_destination, 250);
69 imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
70
71 // enregistrer la nouvelle image
72 imagegif($destination, $mini_nom);
73 }
74 else
75 {
76 // enregistrer l'image de départ avec le nom d'une miniature
77 imagegif($source, $mini_nom);
78 }
79}
80else // echec à l'enregistrement, la fonction renvoie FALSE
81{
82 header('Location: ../administration.php');
83 exit ();
84}
85?>
diff --git a/articles/modifarticle.php b/articles/modifarticle.php
new file mode 100644
index 0000000..e8cc827
--- /dev/null
+++ b/articles/modifarticle.php
@@ -0,0 +1,111 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// récupérer les POST, compléter la base et uploader des photos
28if (isset ($_FILES['photo']))
29{
30 if ($_FILES['photo']['error'] == 0)
31 {
32 // vérification de l'extension
33 $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
34 $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
35 if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
36 {
37 // on récupère la variable $nom
38 $nom = basename ($_FILES['photo']['name']);
39
40 // vérification et formatage du nom du fichier
41 // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
42 // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
43 $nom = str_replace(
44 array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
45 array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
46 $nom);
47 // minuscules
48 $nom = mb_strtolower($nom, 'UTF-8');
49 $infophoto['extension'] = mb_strtolower($infophoto['extension'], 'UTF-8');
50 // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
51 $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
52
53 // modification de l'image
54 if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/articles/' . $nom))
55 // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
56 // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
57 {
58 // nom de la miniature
59 $mini_nom = "mini_" . $nom;
60
61 $requête = $base->prepare('UPDATE articles SET nomphoto = :photo, miniature = :mini WHERE id = :li');
62 $requête->execute(array(
63 'photo' => $nom,
64 'mini' => $mini_nom,
65 'li' => $_POST['ligne']
66 ));
67
68 // création d'une miniature
69 include("miniatures.php");
70
71 header('Location: ../administration.php?nouvarticle=6'); // succès, move_uploaded_file renvoie la valeur TRUE
72 exit ();
73 }
74 else // echec à l'enregistrement, la fonction renvoie FALSE
75 {
76 header('Location: ../administration.php?nouvarticle=4');
77 exit ();
78 }
79 }
80 else // mauvais format
81 {
82 header('Location: ../administration.php?nouvarticle=3');
83 exit ();
84 }
85 }
86 else
87 {
88 header('Location: ../administration.php?nouvarticle=7');
89 exit ();
90 }
91}
92elseif ($_POST['titre'] != '') // il faut au moins mettre un titre
93{
94 // modification du texte
95 echo $_POST['ligne'];
96
97 $requête = $base->prepare('UPDATE articles SET nomarticle = :tit, contenu = :cont WHERE id = :li');
98 $requête->execute(array(
99 'tit' => $_POST['titre'],
100 'cont' => $_POST['article'],
101 'li' => $_POST['ligne']
102 ));
103
104 header('Location: ../administration.php?nouvarticle=6');
105 exit ();
106}
107else // pas de photo ni titre
108{
109 header('Location: ../administration.php?nouvarticle=1');
110}
111?>
diff --git a/articles/nettoyage-des-bois.jpg b/articles/nettoyage-des-bois.jpg
new file mode 100644
index 0000000..bc91586
--- /dev/null
+++ b/articles/nettoyage-des-bois.jpg
Binary files differ
diff --git a/articles/nora-isaac-22-millions-de-vue.jpg b/articles/nora-isaac-22-millions-de-vue.jpg
new file mode 100644
index 0000000..b6595cf
--- /dev/null
+++ b/articles/nora-isaac-22-millions-de-vue.jpg
Binary files differ
diff --git a/articles/poney.png b/articles/poney.png
new file mode 100644
index 0000000..eb3a7fd
--- /dev/null
+++ b/articles/poney.png
Binary files differ
diff --git a/articles/reseau.png b/articles/reseau.png
new file mode 100644
index 0000000..59f36c9
--- /dev/null
+++ b/articles/reseau.png
Binary files differ
diff --git a/articles/rouget.jpg b/articles/rouget.jpg
new file mode 100644
index 0000000..5c581c1
--- /dev/null
+++ b/articles/rouget.jpg
Binary files differ
diff --git a/articles/seules-les-betes.jpg b/articles/seules-les-betes.jpg
new file mode 100644
index 0000000..f85f57f
--- /dev/null
+++ b/articles/seules-les-betes.jpg
Binary files differ
diff --git a/articles/supprarticle.php b/articles/supprarticle.php
new file mode 100644
index 0000000..53b2477
--- /dev/null
+++ b/articles/supprarticle.php
@@ -0,0 +1,131 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21?>
22
23<!DOCTYPE html>
24<html lang="fr" >
25 <head>
26 <meta charset="utf-8" />
27 <title>suppression définitive</title>
28 <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico" />
29 <link rel="stylesheet" href="../blog.css" />
30 <meta name="viewport" content="width=device-width" />
31 <style>
32 section
33 {
34 margin: 10px 0px;
35 padding: 10px;
36 width: 960px;
37 }
38 </style>
39 </head>
40
41 <body>
42 <div id="bloc_page">
43 <header>
44 <h1><img class="sakura" src="../sakura.png" alt="sakura" />
45 Suppression définitive !!
46 <img class="sakura" src="../sakura.png" alt="sakura" /></h1>
47 </header>
48
49 <li id="admin" >
50 <p><a href="articlesliste.php" >retour page précédente</a></p>
51 </li>
52
53 <section>
54
55 <?php
56 // connexion à la base de données
57 include("../connexionbase.php");
58
59 // confirmation suppression de l'image
60 if ($_POST['quoi'] == 'image')
61 {
62 $requête = $base->prepare('SELECT nomarticle, contenu, nomphoto, DATE_FORMAT(dateheure, \'article ajouté le %d/%m/%Y à %Hh%i\')
63 AS date FROM articles WHERE id = :li');
64 $requête->execute(array(
65 'li' => $_POST['ligne']
66 ));
67 while ($données = $requête->fetch())
68 {
69 echo('<p><i>Vous êtes sur le point de supprimer définitivement l\'image liée à cet article.</i></p>');
70 echo('<article><p class="dateheure" >' . $données['date'] . '</p>');
71 echo('<h2>' . htmlspecialchars($données['nomarticle']) . '</h2>');
72 echo('<div class="contenu" >
73 <div><img src="' . $données['nomphoto'] . '" alt="" /></div>');
74 echo('<div class="contenutexte" ><pre>' . htmlspecialchars($données['contenu']) . '</pre></div>
75 </div></article>');
76
77 echo('<p><i><b>Êtes-vous sûr de vouloir supprimer définitivement cette image?<br/>
78 Cliquer sur le bouton ci-dessous pour confirmer:</b></i></p>');
79
80 echo('<form method="post" action="supprconfirmée.php" >
81 <input type="hidden" name="quoi" value="image" >
82 <input type="hidden" name="confirmation" value="oui" >
83 <input type="hidden" name="ligne" value="' . $_POST['ligne'] . '" >
84 <p><input type="submit" value="CONFIRMER" /></p>
85 </form>');
86 }
87 $requête->closeCursor();
88
89 }
90 // confirmation suppression de l'article entier
91 elseif ($_POST['quoi'] == 'article')
92 {
93 $requête = $base->prepare('SELECT nomarticle, contenu, nomphoto, DATE_FORMAT(dateheure, \'article ajouté le %d/%m/%Y à %Hh%i\')
94 AS date FROM articles WHERE id = :li');
95 $requête->execute(array(
96 'li' => $_POST['ligne']
97 ));
98 while ($données = $requête->fetch())
99 {
100 echo('<p><i>Vous êtes sur le point de supprimer définitivement cet article (le texte, l\'image, tout).</i></p>');
101 echo('<article><p class="dateheure" >' . $données['date'] . '</p>');
102 echo('<h2>' . htmlspecialchars($données['nomarticle']) . '</h2>');
103 echo('<div class="contenu" >
104 <div><img src="' . $données['nomphoto'] . '" alt="" /></div>');
105 echo('<div class="contenutexte" ><pre>' . htmlspecialchars($données['contenu']) . '</pre></div>
106 </div></article>');
107
108 echo('<p><i><b>Êtes-vous sûr de vouloir supprimer définitivement cet article?<br/>
109 Cliquer sur le bouton ci-dessous pour confirmer:</b></i></p>');
110
111 echo('<form method="post" action="supprconfirmée.php" >
112 <input type="hidden" name="quoi" value="article" >
113 <input type="hidden" name="confirmation" value="oui" >
114 <input type="hidden" name="ligne" value="' . $_POST['ligne'] . '" >
115 <p><input type="submit" value="CONFIRMER" /></p>
116 </form>');
117 }
118 $requête->closeCursor();
119
120 }
121 else
122 {
123 header('Location: articlesliste.php');
124 exit ();
125 }
126 ?>
127
128 </section>
129 </div>
130 </body>
131</html>
diff --git a/articles/supprconfirmée.php b/articles/supprconfirmée.php
new file mode 100644
index 0000000..0b5c08a
--- /dev/null
+++ b/articles/supprconfirmée.php
@@ -0,0 +1,85 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// supprimer l'image
28if (isset ($_POST['quoi']) AND ($_POST['confirmation']))
29{
30 if ($_POST['quoi'] == 'image' AND $_POST['confirmation'] == 'oui' )
31 {
32 // pour l'image
33 $requête = $base->prepare('SELECT nomphoto, miniature FROM articles WHERE id = :li');
34 $requête->execute(array(
35 'li' => $_POST['ligne']
36 ));
37 while ($données = $requête->fetch())
38 {
39 unlink ($données['nomphoto']);
40 unlink ($données['miniature']);
41 }
42
43 // pour le nom de l'image dans la base de données
44 $requête = $base->prepare('UPDATE articles SET nomphoto = \'\', miniature = \'\' WHERE id = :li');
45 $requête->execute(array(
46 'li' => $_POST['ligne']
47 ));
48
49 header('Location: articlesliste.php?suppr=1');
50 exit ();
51 }
52 elseif ($_POST['quoi'] == 'article' AND $_POST['confirmation'] == 'oui' )
53 {
54 // pour l'image
55 $requête = $base->prepare('SELECT nomphoto, miniature FROM articles WHERE id = :li');
56 $requête->execute(array(
57 'li' => $_POST['ligne']
58 ));
59 while ($données = $requête->fetch())
60 {
61 unlink ($données['nomphoto']);
62 unlink ($données['miniature']);
63 }
64
65 // pour la ligne dans la base de données
66 $requête = $base->prepare('DELETE FROM articles WHERE id = :li');
67 $requête->execute(array(
68 'li' => $_POST['ligne']
69 ));
70
71 header('Location: articlesliste.php?suppr=2');
72 exit ();
73 }
74 else
75 {
76 header('Location: articlesliste.php?erreursuppr=1');
77 exit ();
78 }
79}
80else
81{
82 header('Location: articlesliste.php?erreursuppr=1');
83 exit ();
84}
85?>
diff --git a/articles/surf.png b/articles/surf.png
new file mode 100644
index 0000000..eb6c2df
--- /dev/null
+++ b/articles/surf.png
Binary files differ
diff --git a/blog.css b/blog.css
new file mode 100644
index 0000000..0f698a7
--- /dev/null
+++ b/blog.css
@@ -0,0 +1,352 @@
1body
2{
3 /* vire une bande de la couleur du fond au dessus */
4 margin: 0px;
5 /* violet lavande */
6 background-color: #FFEDED;
7 /* marron */
8 color: #661D17;
9 word-wrap: break-word; /* coupe un mot plus long que ce que permet le bloc qui le contient */
10 font-family: sans-serif;
11}
12
13#bloc_page
14{
15 max-width: 980px;
16 margin: auto;
17}
18
19header
20{
21 text-align: center;
22 margin: 0px;
23 /* jaune citron */
24 background-color: #FFFCC2;
25}
26
27img
28{
29 /* supprime la bande en dessous de l'image, <img /> est considérée comme une balise inline et par défaut,
30 le navigateur applique un «vertical-align: baseline;» à cause des g, p, q qui peuvent dépasser en dessous d'un texte */
31 vertical-align: middle;
32 /* image dans le bon sens en regardant les données EXIF */
33 image-orientation: from-image;
34}
35
36p
37{
38 margin: 10px;
39}
40
41i
42{
43 color: red;
44}
45
46h1
47{
48 margin: 0px;
49 font-size: xx-large;
50 font-weight: normal;
51 /* orange curcuma */
52 color: #FC5900;
53
54}
55
56.sakura
57{
58 margin: 15px;
59}
60
61nav
62{
63 width: 100%;
64 padding-top: 5px;
65 padding-bottom: 5px;
66 border-top: 1px purple solid;
67 border-bottom: 1px purple solid;
68 //font-size: large;
69}
70
71h3
72{
73 margin: 0px;
74 padding: 10px 10px 10px 40px;
75 text-align: left;
76}
77
78ul
79{
80 /* annule les marges par défaut */
81 margin: 0px;
82 padding-left: 0px;
83}
84
85li
86{
87 padding: 1px;
88 margin: 10px 20px;
89 text-transform: uppercase;
90 display: inline;
91}
92
93ul li
94{
95 display: inline-block;
96}
97
98li a
99{
100 text-decoration: none;
101}
102
103a
104{
105 color: purple;
106 text-decoration: none;
107}
108
109a:hover
110{
111 /* orange curcuma */
112 color: #FC5900;
113 //text-decoration: underline;
114}
115
116#admin
117{
118 margin: 20px;
119 border: 2px violet solid;
120 display: flex;
121 justify-content: flex-end;
122}
123
124.corps
125{
126 /* jaune citron */
127 background-color: #FFFCC2;
128 display: flex;
129 justify-content: space-between;
130}
131
132article
133{
134 /* rose saumon */
135 border: #FFBD8D 2px solid;
136 margin: 0px 0px 20px 0px;
137 padding: 1px;
138 min-height: 336px;
139 /* violet lavande */
140 background-color: #FFEDED;
141}
142
143h2
144{
145 font-size: x-large;
146 margin: 10px;
147 font-weight: normal;
148}
149
150figure
151{
152 display: flex;
153 width: 180%;
154}
155
156figcaption
157{
158 margin: 10px;
159}
160
161.dateheure
162{
163 font-size: small;
164 font-style: italic;
165}
166
167section img
168{
169 max-width: 300px;
170 max-height: 300px;
171 margin: 0px 10px;
172 float: left;
173}
174
175.contenutexte
176{
177 margin: 10px;
178}
179
180h4
181{
182 /* orange curcuma */
183 color: #FC5900;
184 font-size: large;
185 margin: 20px 0px 0px 0px;
186 text-transform: uppercase;
187 display: inline-block;
188}
189
190
191/* colonne de droite */
192aside
193{
194 text-align: center;
195 width: 200px;
196 display:flex;
197 flex-wrap: wrap;
198 /* quand disposition horizontale*/
199 justify-content: space-around;
200 align-items: flex-start;
201
202}
203
204.aside
205{
206 display:flex;
207 flex-wrap: wrap;
208 justify-content: center;
209}
210
211aside p
212{
213 width: 180px;
214}
215
216.prez
217{
218 display: inline-block;
219}
220
221pre
222{
223 font-family: sans-serif;
224 white-space: pre-wrap;
225 margin: 0px;
226}
227
228aside pre
229{
230 width: 180px;
231}
232
233
234/* pied de page */
235footer
236{
237 display: flex;
238 flex-wrap: wrap;
239 justify-content: space-between;
240}
241
242
243/* grands écrans */
244@media all and (min-width: 980px) /* bloc_page = 980px, aside = 200px, section = 740px et 20 de marge de chaque côté*/
245{
246 section
247 {
248 margin: 20px;
249 width: 740px;
250 }
251}
252
253
254@media all and (min-width: 780px)
255{
256 aside
257 {
258 justify-content: space-around;
259 }
260}
261
262/* petits écrans */
263@media all and (max-width: 979px)
264{
265 #bloc_page
266 {
267 max-width: 780px;
268 }
269
270 #banderole
271 {
272 width: 780px;
273 }
274
275 #bloc_page
276 {
277 max-width: 780px;
278 }
279
280 section /* bloc_page = 780px, aside = 200px, section = 560px et 10 de marge de chaque côté*/
281 {
282 margin: 10px;
283 width: 560px;
284 }
285
286 figcaption
287 {
288 width: 250px;
289 }
290}
291
292
293/* tablettes */
294@media all and (max-width: 779px)
295{
296 #bloc_page
297 {
298 max-width: 580px;
299 }
300
301 #banderole
302 {
303 width: 580px;
304 }
305
306 .corps
307 {
308 flex-wrap: wrap;
309 }
310
311 aside
312 {
313 width: auto;
314 }
315}
316
317@media all and (max-width: 579px)
318{
319 header
320 {
321 width: auto;
322 }
323
324 figure
325 {
326 flex-wrap: wrap;
327 }
328
329 .sakura
330 {
331 display: none;
332 }
333}
334
335/* téléphones */
336@media all and (max-width: 429px)
337{
338 #banderole
339 {
340 width: 429px;
341 }
342
343 .sakura
344 {
345 display: none;
346 }
347
348 figure
349 {
350 flex-wrap: wrap;
351 }
352}
diff --git a/carton/favicon_sakura.zip b/carton/favicon_sakura.zip
new file mode 100644
index 0000000..c246412
--- /dev/null
+++ b/carton/favicon_sakura.zip
Binary files differ
diff --git a/carton/laos/069917-laos-le-mekong-au-coucher-du.jpg b/carton/laos/069917-laos-le-mekong-au-coucher-du.jpg
new file mode 100644
index 0000000..631398a
--- /dev/null
+++ b/carton/laos/069917-laos-le-mekong-au-coucher-du.jpg
Binary files differ
diff --git a/carton/laos/390982_laos_tropiki_palmy_poselenie_derevnya_reka_tuman_x_1680x1050_www.Gde-Fon.com.jpg b/carton/laos/390982_laos_tropiki_palmy_poselenie_derevnya_reka_tuman_x_1680x1050_www.Gde-Fon.com.jpg
new file mode 100644
index 0000000..e7aeb19
--- /dev/null
+++ b/carton/laos/390982_laos_tropiki_palmy_poselenie_derevnya_reka_tuman_x_1680x1050_www.Gde-Fon.com.jpg
Binary files differ
diff --git a/carton/laos/770px-Pha_That_Luang_Vientiane_Laos_Wikimedia_Commons.jpg b/carton/laos/770px-Pha_That_Luang_Vientiane_Laos_Wikimedia_Commons.jpg
new file mode 100644
index 0000000..8bb454d
--- /dev/null
+++ b/carton/laos/770px-Pha_That_Luang_Vientiane_Laos_Wikimedia_Commons.jpg
Binary files differ
diff --git a/carton/laos/Sunset-Mekong-river-Vientiane-Laos-600x1024.jpg b/carton/laos/Sunset-Mekong-river-Vientiane-Laos-600x1024.jpg
new file mode 100644
index 0000000..af7ef56
--- /dev/null
+++ b/carton/laos/Sunset-Mekong-river-Vientiane-Laos-600x1024.jpg
Binary files differ
diff --git a/carton/laos/Vieng_Xai_Laos02.jpg b/carton/laos/Vieng_Xai_Laos02.jpg
new file mode 100644
index 0000000..a80fc59
--- /dev/null
+++ b/carton/laos/Vieng_Xai_Laos02.jpg
Binary files differ
diff --git a/carton/laos/laos-447_960_720.jpg b/carton/laos/laos-447_960_720.jpg
new file mode 100644
index 0000000..14dcc3c
--- /dev/null
+++ b/carton/laos/laos-447_960_720.jpg
Binary files differ
diff --git a/carton/laos/laos.jpg b/carton/laos/laos.jpg
new file mode 100644
index 0000000..dc2bbca
--- /dev/null
+++ b/carton/laos/laos.jpg
Binary files differ
diff --git a/carton/laos/mekong.jpg b/carton/laos/mekong.jpg
new file mode 100644
index 0000000..cca39dc
--- /dev/null
+++ b/carton/laos/mekong.jpg
Binary files differ
diff --git a/carton/sakura-cerisiers.jpg b/carton/sakura-cerisiers.jpg
new file mode 100644
index 0000000..d830b0b
--- /dev/null
+++ b/carton/sakura-cerisiers.jpg
Binary files differ
diff --git a/carton/sakura.png b/carton/sakura.png
new file mode 100644
index 0000000..bf8416c
--- /dev/null
+++ b/carton/sakura.png
Binary files differ
diff --git a/connexion.php b/connexion.php
new file mode 100644
index 0000000..daf8248
--- /dev/null
+++ b/connexion.php
@@ -0,0 +1,75 @@
1<?php
2session_start();
3$_SESSION['mdpvalide'] = 0;
4?>
5
6<!DOCTYPE html>
7<html lang="fr" >
8 <head>
9 <meta charset="utf-8" />
10 <title>connexion</title>
11 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
12 <link rel="stylesheet" href="blog.css" />
13 <meta name="viewport" content="width=device-width" />
14 <meta name="robots" content="noindex" >
15 <?php include("matomo.php"); ?>
16 </head>
17
18 <body>
19 <div id="bloc_page">
20
21 <h1>Accès protégé à la zone privée</h1>
22
23 <?php // connexion à la base de données
24 include("connexionbase.php"); ?>
25
26 <?php
27 $réponse = $base->query('SELECT * FROM motdepasse');
28 while ($données = $réponse->fetch())
29 {
30 $motdepasse = $données['motdepasse'];
31 }
32
33 // le bon mot de passe a été tapé
34 if (isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] == $motdepasse)
35 {
36 $_SESSION['mdpvalide'] = 1;
37 header('Location: administration.php');
38 exit ();
39 }
40
41
42 // un mauvais mot de passe a été tapé
43 elseif (isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] != $motdepasse)
44 {
45 ?>
46 <form method="post" action="connexion.php" >
47 <label for="motdepasse" >Mot de passe:</label>
48 <input type="password" name="motdepasse" id="motdepasse" />
49 <input type="submit" value="Valider" />
50 </form>
51 <p><i>mauvais mot de passe</i></p>
52 <?php
53 }
54
55
56 // ce qui apparaît la première fois (pas de post à récupérer)
57 else
58 {
59 ?>
60 <form method="post" action="connexion.php" >
61 <label for="motdepasse" >Mot de passe:</label>
62 <input type="password" name="motdepasse" id="motdepasse" />
63 <input type="submit" value="Valider" />
64 </form>
65 <?php
66 }
67 ?>
68
69 <p><i>Ne pas oublier de cliquer sur "déconnexion" quand on a fini !</i></p>
70
71 <li><a href="index.php" >retour au blog</a></li>
72
73 </div>
74 </body>
75</html>
diff --git a/connexionbase.php b/connexionbase.php
new file mode 100644
index 0000000..3e1d309
--- /dev/null
+++ b/connexionbase.php
@@ -0,0 +1,10 @@
1<?php
2try
3{
4 $base = new PDO('mysql:host=localhost;dbname=lelionetlecolibri;charset=utf8', 'root', 'qsdfgh');
5}
6catch (Exception $e)
7{
8 die('Erreur : ' . $e->getMessage()); // message d'erreur si connexion impossible
9}
10?>
diff --git a/contact-post.php b/contact-post.php
new file mode 100644
index 0000000..fc7f5f3
--- /dev/null
+++ b/contact-post.php
@@ -0,0 +1,94 @@
1<?php
2session_start();
3$_SESSION['adresse'] = $_POST['adresse'];
4$_SESSION['contenu'] = $_POST['contenu'];
5
6if (isset($_POST['captcha']))
7{
8 if ($_POST['captcha'] == 5)
9 {
10 if (isset ($_POST['adresse']) AND isset ($_POST['contenu']))
11 {
12 if ($_POST['adresse'] != '' AND $_POST['contenu'] != '')
13 {
14 // convertir les caractères spéciaux en leur équivalent HTML
15 $adresse = $_POST['adresse'];
16 $contenu = $_POST['contenu'];
17
18 if (filter_var($adresse, FILTER_VALIDATE_EMAIL))
19 {
20 $destinataire = 'blog@ordipolo.fr';
21 $sujet = 'message de ' . htmlspecialchars($adresse) . ' envoyé depuis le blog';
22
23 // On filtre les serveurs qui rencontrent des bogues.
24 /*if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $destinataire))
25 {
26 $passage_ligne = "\r\n";
27 }
28 else
29 {
30 $passage_ligne = "\n";
31 }*/
32 $passage_ligne = "\r\n";
33
34 $contenu = htmlspecialchars($contenu);
35
36 echo $passage_ligne;
37
38 // En-tête
39 //$boundary = "-----=" . md5(rand());
40
41 $header = 'From: siteweb <' . $adresse . '>' . $passage_ligne; // expéditeur
42 $header .= 'Reply-to: ' . $adresse . ' <' . $adresse . '>' . $passage_ligne; // réponse
43 $header .= 'Return-path : ' . $adresse . ' <' . $adresse . '>' . $passage_ligne; // retour en cas d'erreur
44 $header .= 'MIME-Version: 1.0' . $passage_ligne;
45 $header .= 'Content-type: text/plain; charset=utf-8 boundary=\"' . $boundary . '\"' . $passage_ligne;
46
47 // message
48 //$message = $passage_ligne."--".$boundary.$passage_ligne;
49 //$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
50 $message .= $passage_ligne . $contenu . $passage_ligne;
51 //$message .= $passage_ligne."--".$boundary.$passage_ligne;
52
53 echo $destinataire;
54 echo "<br/>";
55 echo $sujet;
56 echo "<br/>";
57 echo $message;
58 echo "<br/>";
59 echo $header;
60
61 // Envoi
62 mail($destinataire, $sujet, $message, $header);
63
64 // envoi réussi, on peut nettoyer
65 unset ($_SESSION['adresse']);
66 unset ($_SESSION['contenu']);
67
68 header('Location: contact.php?erreur=0');
69 }
70 else
71 {
72 header('Location: contact.php?erreur=1');
73 }
74 }
75 else
76 {
77 header('Location: contact.php?erreur=1');
78 }
79 }
80 else
81 {
82 header('Location: contact.php?erreur=1');
83 }
84 }
85 else
86 {
87 header('Location: contact.php?erreur=2');
88 }
89}
90else
91{
92 header('Location: contact.php?erreur=2');
93}
94?>
diff --git a/contact.php b/contact.php
new file mode 100644
index 0000000..76a97f0
--- /dev/null
+++ b/contact.php
@@ -0,0 +1,90 @@
1<?php
2session_start();
3if(isset($_SESSION['contenu']))
4{
5 $contenu = $_SESSION['contenu'];
6}
7else
8{$contenu = '';}
9if(isset($_SESSION['adresse']))
10{
11 $adresse = $_SESSION['adresse'];
12}
13else
14{$adresse = '';}
15?>
16<!DOCTYPE html>
17<html lang="fr" >
18 <head>
19 <meta http-equiv="Content-Type" content="text/html" />
20 <meta charset="utf-8" />
21 <title>Contacter le lion et le colibri</title>
22 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
23 <meta name="description" content="Contacter le lion et le colibri." >
24 <link rel="stylesheet" href="blog.css" />
25 <meta name="viewport" content="width=device-width" />
26 <style>
27 .corps
28 {
29 flex-direction: column;
30 }
31 </style>
32 <?php include("matomo.php"); ?>
33 </head>
34
35 <body>
36 <div id="bloc_page">
37 <!-- photo banderole et titre -->
38 <header>
39 <h1><img class="sakura" src="sakura.png" alt="sakura" />Nous écrire<img class="sakura" src="sakura.png" alt="sakura" /></h1>
40
41 <?php include ("menu.php"); ?>
42 </header>
43
44 <div class="corps" >
45 <form method="post" action="contact-post.php" >
46 <p><label for="email" >Votre adresse électronique : </label><br/>
47 <input required type="email" id="email" name="adresse" size="30" value="<?= $adresse ?>" /></p>
48 <p><label for="message" >Votre message :</label><br/>
49 <textarea required id="message" name="contenu" cols="60" rows="10"><?= $contenu ?></textarea></p>
50
51 <!-- captcha anti-spam -->
52 <p>Montrez que vous n'êtes pas un robot.<br/>
53 <label for="captcha" >Combien font 3 plus 2?</label>
54 <input required type="text" id="captcha" name="captcha" size="1" /></p>
55
56 <p><input type="submit" name="submit" value="Envoyer votre message" /></p>
57
58 <p><?php
59 // messages d'erreur
60 if (isset($_GET['erreur']))
61 {
62 if ($_GET['erreur'] == 2)
63 {
64 echo ('<i>Veuillez donner le résultat de l\'addition s\'il vous plaît..</i>');
65 }
66 else if ($_GET['erreur'] == 1)
67 {
68 echo ('<i>Erreur d\'envoi: Veuillez indiquer une adresse e-mail valide et écrire un message.</i>');
69 }
70 elseif ($_GET['erreur'] == 0)
71 {
72 echo ('<i>Votre message à bien été envoyé.</i>');
73 }
74 else
75 {}
76 }
77 else
78 {}
79 ?></p>
80 </form>
81
82 <ul>
83 <li id="admin" >
84 <p><a href="index.php" >Retour au blog</a></p>
85 </li>
86 </ul>
87 </div>
88 </div>
89 </body>
90</html>
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..1d13b9b
--- /dev/null
+++ b/favicon.ico
Binary files differ
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..011325d
--- /dev/null
+++ b/index.php
@@ -0,0 +1,174 @@
1<?php
2session_start();
3?>
4
5<!DOCTYPE html>
6<html lang="fr" >
7 <head>
8 <meta charset="utf-8" />
9 <title>Le lion et le colibri - Blog</title>
10 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
11 <meta name="description" content="Blog de Katy et Paul à Quimper et ailleurs. Voyages en Bretagne ou à l’autre bout du monde, musiques.
12 Rencontrer d’autres cultures et changer son regard. Nature, paysages, lecture, détente, rêve." >
13 <link rel="stylesheet" href="blog.css" />
14 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
15 <?php include("matomo.php"); ?>
16 </head>
17
18 <body>
19 <div id="bloc_page">
20 <!-- photo banderole et titre -->
21 <header>
22 <!-- la photo fait 980*276 pixels -->
23 <img id="banderole" src="mekong.jpg" alt="banderole de l'en-tête du site" />
24
25 <!-- titre entre les fleurs -->
26 <h1><img class="sakura" src="sakura.png" alt="sakura" />Le lion et le colibri<img class="sakura" src="sakura.png" alt="sakura" /></h1>
27
28 <?php include ("menu.php"); ?>
29
30 <!-- phrase d'accroche -->
31 <?php
32 $fichier = fopen('accroche.txt','r');
33 fseek($fichier, 0);
34 $accroche = fgets($fichier);
35 fseek($fichier, 0);
36 ?>
37 <h3><?php echo $accroche; ?></h3>
38 <?php
39 fclose($fichier);
40 ?>
41 </header>
42
43 <!-- partie principale de la page, divisée en deux colonnes -->
44 <div class="corps" >
45
46
47 <?php include ("connexionbase.php"); ?>
48
49 <!-- articles -->
50 <section>
51 <!-- modèle d'article en html pur
52 <article>
53 <p class="dateheure" >article ajouté tel jour, tel mois, telle année à telle heure</p>
54 <h2>"titre de l'article"</h2>
55 <div><a><img src="" alt="illustration de l'article" /></a></div>
56 <div class="contenutexte" ><pre>"contenu de l'article"</pre></div>
57 </article> -->
58
59 <?php
60 $réponse = $base->query('SELECT nomarticle, contenu, nomphoto, miniature, DATE_FORMAT(dateheure, \'article ajouté le %d/%m/%Y à %Hh%i\')
61 AS date FROM articles ORDER BY id DESC');
62 while ($données = $réponse->fetch())
63 {
64 echo('<article><p class="dateheure" >' . $données['date'] . '</p>');
65 echo('<h2>' . htmlspecialchars($données['nomarticle']) . '</h2>');
66
67 if($données['nomphoto'] != '')
68 {
69 echo('<div><a href="articles/' . $données['nomphoto'] . '">
70 <img src="articles/' . $données['miniature'] . '" alt="" /></a></div>');
71 }
72 else{}
73
74 // détecter les URL et les rendre cliquables
75 // la protection contre les faille XSS va poser problème, on l'utilise avant d'avoir à ajouter les balises <a>
76 $données['contenu'] = htmlspecialchars($données['contenu']);
77 $données['contenu'] = preg_replace('#(https?|ftp|ssh|mailto)://[a-z0-9\/:%_+.,\#?!@&=-]+(\.[a-z]{2,4})+[/|?]?[a-z0-9\/:%_+.,\#?!@&=-]*#i', '<a href="$0" >$0</a>', $données['contenu']);
78 echo('<div class="contenutexte" ><pre>' . $données['contenu'] . '</pre></div>
79 </article>');
80 }
81 $réponse->closeCursor();
82 ?>
83
84 </section>
85
86 <!-- une colonne à droite avec photos, présentation et hyperliens -->
87 <aside>
88 <div class="aside" >
89 <div>
90 <h4>le colibri</h4>
91 <?php
92 // récupérer le nom de la photo
93 $fichier = fopen('photoskaty/photo.txt','r');
94 fseek($fichier, 0);
95 $photokaty = fgets($fichier);
96 fseek($fichier, 0);
97 ?>
98 <figure>
99 <img src="photoskaty/<?php echo $photokaty; ?>" alt="photo" />
100 </figure>
101 <?php
102 $fichier = fopen('présentationkaty.txt','r');
103 fseek($fichier, 0);
104 if ($fichier) // si le fichier disparaît, ne fait pas cramer le PC du visiteur !!
105 {
106
107 echo '<pre class="prez" >';
108 while (!feof($fichier)) // Tant que l'on est pas à la fin du fichier
109 {
110 $présentation = fgets($fichier);
111 echo $présentation;
112 }
113 echo '</pre>';
114
115 }
116 fseek($fichier, 0);
117 fclose($fichier);
118 ?>
119 </div>
120
121 <div>
122 <h4>le lion</h4>
123 <?php
124 $fichier = fopen('photospolo/photo.txt','r');
125 fseek($fichier, 0);
126 $photopolo = fgets($fichier);
127 fseek($fichier, 0);
128 ?>
129 <figure>
130 <img src="photospolo/<?php echo $photopolo; ?>" alt="photo" />
131 </figure>
132 <?php
133 $fichier = fopen('présentationpolo.txt','r');
134 fseek($fichier, 0);
135 if ($fichier) // si le fichier disparaît, ne fait pas cramer le PC du visiteur !!
136 {
137
138 echo '<pre class="prez" >';
139 while (!feof($fichier)) // Tant que l'on est pas à la fin du fichier
140 {
141 $présentation = fgets($fichier);
142 echo $présentation;
143 }
144 echo '</pre>';
145
146 }
147 fseek($fichier, 0);
148 fclose($fichier);
149 ?>
150 </div>
151 </div>
152 </aside>
153
154 </div>
155
156 <footer>
157 <div style="margin: 20px;" >
158 <p>Ce site vous plait? C'est moi-même qui l'ai entièrement codé et qui l'héberge.</p>
159 </div>
160
161 <ul>
162 <li id="admin" >
163 <p><a href="administration.php" >=> accès zone privée</a></p>
164 </li>
165 </ul>
166
167 </footer>
168
169 <div style="margin: 10px;" >
170 <li><a href="index.php" >^^ Revenir en haut de la page. ^^</a></li>
171 </div>
172 </div>
173 </body>
174</html>
diff --git a/kiffe.php b/kiffe.php
new file mode 100644
index 0000000..fa40417
--- /dev/null
+++ b/kiffe.php
@@ -0,0 +1,77 @@
1<?php
2session_start();
3?>
4
5<!DOCTYPE html>
6<html lang="fr" >
7 <head>
8 <meta charset="utf-8" />
9 <title>On aime</title>
10 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
11 <meta name="description" content="Autres sites." >
12 <link rel="stylesheet" href="blog.css" />
13 <meta name="viewport" content="width=device-width" />
14 <style>
15 .corps
16 {
17 flex-direction: column;
18 }
19 </style>
20 <?php include("matomo.php"); ?>
21 </head>
22
23 <body>
24 <div id="bloc_page">
25 <!-- photo banderole et titre -->
26 <header>
27 <h1><img class="sakura" src="sakura.png" alt="sakura" />On aime<img class="sakura" src="sakura.png" alt="sakura" /></h1>
28
29 <?php include ("menu.php"); ?>
30 </header>
31
32 <div class="corps" >
33 <div>
34 <a href="http://zingueurs-band.over-blog.com" >
35 <h2>Le Zingueur's Band</h2>
36 </a>
37 <div style="display: flex;" >
38 <p>la fanfare de Quimper</p>
39 <a href="http://zingueurs-band.over-blog.com" >
40 <img src="zingueurs.jpg" alt="logo zingueurs" />
41 </a>
42 </div>
43 </div>
44
45 <div>
46 <a href="https://reseaumoulinvert.fr" >
47 <h2>Réseau d'échanges de savoirs</h2>
48 </a>
49 <div style="display: flex;" >
50 <p>de la maison de quartier du moulin vert</p>
51 <a href="https://reseaumoulinvert.fr" >
52 <img src="réseau.png" alt="RERS moulin vert" />
53 </a>
54 </div>
55 </div>
56
57 <div>
58 <a href="https://ordipolo.fr" >
59 <h2>Ordipolo</h2>
60 </a>
61 <div style="display: flex;" >
62 <p>dépannage informatique</p>
63 <a href="https://ordipolo.fr">
64 <img src="minilogo.png" alt="ordipolo" />
65 </a>
66 </div>
67 </div>
68
69 <ul>
70 <li id="admin" >
71 <p><a href="index.php" >Retour au blog</a></p>
72 </li>
73 </ul>
74 </div>
75 </div>
76 </body>
77</html>
diff --git a/logout.php b/logout.php
new file mode 100644
index 0000000..d454339
--- /dev/null
+++ b/logout.php
@@ -0,0 +1,7 @@
1<?php
2// effet du bouton déconnexion
3session_start();
4$_SESSION['motdepasse'] = 0;
5session_destroy();
6header('Location: index.php');
7?>
diff --git a/matomo.php b/matomo.php
new file mode 100644
index 0000000..e746361
--- /dev/null
+++ b/matomo.php
@@ -0,0 +1,40 @@
1<?php
2$mode = 'prod';
3
4if($mode == 'dev')
5{
6 $cookies = 'localhost';
7 $domain = 'localhost/ordipolo';
8 $server = 'localhost/matomo';
9}
10elseif($mode == 'prod')
11{
12 $cookies = 'ordipolo.fr';
13 $domain = 'ordipolo.fr';
14 $server = 'matomo.ordipolo.fr';
15}
16else
17{
18 echo "mode incorrect dans le fichier matomo.php";
19}
20?>
21
22<!-- Matomo -->
23<script>
24 var _paq = window._paq = window._paq || [];
25 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
26 _paq.push(["setCookieDomain", "*.<?= $cookies ?>"]);
27 _paq.push(["setDomains", ["*.<?= $domain ?>"]]);
28 _paq.push(["disableCookies"]);
29 _paq.push(['trackPageView']);
30 _paq.push(['enableLinkTracking']);
31 (function() {
32 var u="//<?= $server ?>/";
33 _paq.push(['setTrackerUrl', u+'matomo.php']);
34 _paq.push(['setSiteId', '1']);
35 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
36 g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
37 })();
38</script>
39<noscript><p><img referrerpolicy="no-referrer-when-downgrade" src="//<?= $server ?>/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></p></noscript>
40<!-- End Matomo Code -->
diff --git a/mdp.php b/mdp.php
new file mode 100644
index 0000000..fca7375
--- /dev/null
+++ b/mdp.php
@@ -0,0 +1,34 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("connexionbase.php");
25
26
27// modification du mot de passe
28$requête = $base->prepare('UPDATE motdepasse SET motdepasse = :mdp');
29$requête->execute(array('mdp' => $_POST['nouveaumdp']));
30
31
32header('Location: administration.php?modifmdp=1');
33exit ();
34?>
diff --git a/mekong.jpg b/mekong.jpg
new file mode 100644
index 0000000..ee8db41
--- /dev/null
+++ b/mekong.jpg
Binary files differ
diff --git a/menu.php b/menu.php
new file mode 100644
index 0000000..ca19e91
--- /dev/null
+++ b/menu.php
@@ -0,0 +1,9 @@
1<!-- menu -->
2 <nav>
3 <ul>
4 <li><a href="index.php" >Blog</a></li>
5 <!-- <li><a href="" >galerie de photos</a></li> -->
6 <li><a href="kiffe.php" >On aime aussi</a></li>
7 <li><a href="contact.php" >Contact</a></li>
8 </ul>
9 </nav>
diff --git a/minilogo.png b/minilogo.png
new file mode 100644
index 0000000..507d4ed
--- /dev/null
+++ b/minilogo.png
Binary files differ
diff --git a/photoskaty/katy.jpg b/photoskaty/katy.jpg
new file mode 100644
index 0000000..97bbcca
--- /dev/null
+++ b/photoskaty/katy.jpg
Binary files differ
diff --git a/photoskaty/listephoto.php b/photoskaty/listephoto.php
new file mode 100644
index 0000000..64cec01
--- /dev/null
+++ b/photoskaty/listephoto.php
@@ -0,0 +1,110 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21?>
22
23<!DOCTYPE html>
24<html lang="fr" >
25 <head>
26 <meta charset="utf-8" />
27 <title>photos de katy</title>
28 <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico" />
29 <link rel="stylesheet" href="../blog.css" />
30 <meta name="viewport" content="width=device-width" />
31 <style>
32 section
33 {
34 border: 2px #FFBD8D solid;
35 margin: 10px 0px;
36 padding: 10px;
37 }
38 @media all and (min-width: 980px)
39 {
40 section
41 {
42 width: 960px;
43 }
44 }
45 section img
46 {
47 width: 170px;
48 padding: 0px 10px;
49 }
50 #listephoto
51 {
52 display: flex;
53 flex-wrap: wrap;
54 }
55 </style>
56 </head>
57
58 <body>
59 <div id="bloc_page">
60
61 <header>
62 <h1><img class="sakura" src="../sakura.png" alt="sakura" />photos de katy<img class="sakura" src="../sakura.png" alt="sakura" /></h1>
63 </header>
64
65 <li id="admin" >
66 <p><a href="../administration.php" >retour page précédente</a></p>
67 </li>
68
69 <!-- connexion à la base de données -->
70 <?php include("../connexionbase.php"); ?>
71
72 <section>
73 <p>Choisir une photo parmi celles déjà sur le serveur:</p>
74
75 <div id="listephoto" >
76 <?php
77 // afficher la table des noms des photos
78 $réponse = $base->query('SELECT * FROM photoskaty');
79 while ($données = $réponse->fetch())
80 {
81 echo('<div><a href="photomodif.php?id=' . $données['id'] . '" ><img src="' . $données['nomphoto'] . '" alt="photo" /></a>');
82 echo('<a href="photomodif.php?id=' . $données['id'] . '" ><p>' . $données['nomphoto'] . '</p></a></div>');
83 }
84
85 $réponse->closeCursor();
86 ?>
87 </div>
88
89 </section>
90
91 <section>
92 <!-- formulaire upload nouvelle photo -->
93 <form method="post" action="photoupload.php" enctype="multipart/form-data" >
94 <p>Télécharger une nouvelle photo depuis mon PC / tablette / téléphone.</p>
95 <input type="file" name="photo" id="photo" />
96 <!-- on crée la variable $_FILES["photo"], taille max de 2 MO sinon la photo est refusée par le serveur -->
97 <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
98 <input type="submit" value="Télécharger le fichier" />
99 </form>
100
101 <p>Attention: taille maximale de 2 MO !</p>
102 </section>
103
104 <li id="admin" >
105 <p><i>Ne pas oublier de cliquer sur "déconnexion" quand on a fini !</i></p>
106 <p><a href="../logout.php" >déconnexion</a></p>
107 </li>
108
109 </body>
110</html>
diff --git a/photoskaty/photo.txt b/photoskaty/photo.txt
new file mode 100644
index 0000000..ad4280d
--- /dev/null
+++ b/photoskaty/photo.txt
@@ -0,0 +1 @@
katy.jpg \ No newline at end of file
diff --git a/photoskaty/photomodif.php b/photoskaty/photomodif.php
new file mode 100644
index 0000000..07b4e80
--- /dev/null
+++ b/photoskaty/photomodif.php
@@ -0,0 +1,53 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// modifier la photo sélectionnée
28if (isset ($_GET['id']))
29{
30 // choix de la ligne en fonction de son id
31 $requête = $base->prepare('SELECT * FROM photoskaty WHERE id = :numero');
32 $requête->execute(array('numero' => $_GET['id']));
33
34 while ($données = $requête->fetch())
35 {
36 $nom = $données['nomphoto'];
37 }
38
39 $requête->closeCursor();
40
41 $fichier = fopen('photo.txt','r+');
42 ftruncate($fichier,0); // évite les problèmes quand on change pour un titre plus court
43 fputs($fichier, $nom);
44 fseek($fichier, 0);
45 fclose($fichier);
46
47 header('Location: ../administration.php?modifphoto=4');
48 exit ();
49}
50else
51{}
52
53?>
diff --git a/photoskaty/photoupload.php b/photoskaty/photoupload.php
new file mode 100644
index 0000000..c3a2079
--- /dev/null
+++ b/photoskaty/photoupload.php
@@ -0,0 +1,90 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// test de l'envoi du fichier au serveur
28// erreur = 1 si la taille du fichier dépasse de 2 MO, limite modifiable à la ligne upload_max_filesize du fichier php.ini
29if (isset ($_FILES['photo']) AND $_FILES['photo']['error'] == 0)
30{
31 // vérification de l'extension
32 $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
33 $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
34 if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
35 {
36 // on récupère la variable $nom
37 $nom = basename ($_FILES['photo']['name']);
38
39 // vérification et formatage du nom du fichier
40 // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
41 // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
42 $nom = str_replace(
43 array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
44 array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
45 $nom);
46 $nom = mb_strtolower($nom, 'UTF-8');
47 // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
48 $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
49
50 // enfin on enregistre le fichier
51 if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/photospolo/' . $nom))
52 // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
53 // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
54 {
55 // envoi du nom de la photo dans la base de données
56 echo $nom;
57 $requête = $base->prepare('INSERT INTO photospolo (nomphoto) VALUES (:nom)');
58 $requête->execute(array('nom' => $nom));
59
60 $requête->closeCursor();
61
62 // changer le nom de la photo sélectionnée dans le fichier photo.txt
63 $fichier = fopen('photo.txt','r+');
64 ftruncate($fichier,0); // évite les problèmes quand on change pour un nom plus court
65 fputs($fichier, $nom);
66 fseek($fichier, 0);
67 fclose($fichier);
68
69 header('Location: ../administration.php?modifphoto=4'); // succès, move_uploaded_file renvoie la valeur TRUE
70 exit ();
71 }
72 else // echec à l'enregistrement, la fonction renvoie FALSE
73 {
74 header('Location: ../administration.php?modifphoto=3');
75 exit ();
76 }
77 }
78 else // mauvais format
79 {
80 header('Location: ../administration.php?modifphoto=2');
81 exit ();
82 }
83}
84else // mauvaise taille
85{
86 header('Location: ../administration.php?modifphoto=1');
87 exit ();
88}
89
90?>
diff --git a/photospolo/listephoto.php b/photospolo/listephoto.php
new file mode 100644
index 0000000..a2026db
--- /dev/null
+++ b/photospolo/listephoto.php
@@ -0,0 +1,110 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21?>
22
23<!DOCTYPE html>
24<html lang="fr" >
25 <head>
26 <meta charset="utf-8" />
27 <title>photos de polo</title>
28 <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico" />
29 <link rel="stylesheet" href="../blog.css" />
30 <meta name="viewport" content="width=device-width" />
31 <style>
32 section
33 {
34 border: 2px #FFBD8D solid;
35 margin: 10px 0px;
36 padding: 10px;
37 }
38 @media all and (min-width: 980px)
39 {
40 section
41 {
42 width: 960px;
43 }
44 }
45 section img
46 {
47 width: 170px;
48 padding: 0px 10px;
49 }
50 #listephoto
51 {
52 display: flex;
53 flex-wrap: wrap;
54 }
55 </style>
56 </head>
57
58 <body>
59 <div id="bloc_page">
60
61 <header>
62 <h1><img class="sakura" src="../sakura.png" alt="sakura" />photos de polo<img class="sakura" src="../sakura.png" alt="sakura" /></h1>
63 </header>
64
65 <li id="admin" >
66 <p><a href="../administration.php" >retour page précédente</a></p>
67 </li>
68
69 <!-- connexion à la base de données -->
70 <?php include("../connexionbase.php"); ?>
71
72 <section>
73 <p>Choisir une photo parmi celles déjà sur le serveur:</p>
74
75 <div id="listephoto" >
76 <?php
77 // afficher la table des noms des photos
78 $réponse = $base->query('SELECT * FROM photospolo');
79 while ($données = $réponse->fetch())
80 {
81 echo('<div><a href="photomodif.php?id=' . $données['id'] . '" ><img src="' . $données['nomphoto'] . '" alt="photo" /></a>');
82 echo('<a href="photomodif.php?id=' . $données['id'] . '" ><p>' . $données['nomphoto'] . '</p></a></div>');
83 }
84
85 $réponse->closeCursor();
86 ?>
87 </div>
88
89 </section>
90
91 <section>
92 <!-- formulaire upload nouvelle photo -->
93 <form method="post" action="photoupload.php" enctype="multipart/form-data" >
94 <p>Télécharger une nouvelle photo depuis mon PC / tablette / téléphone.</p>
95 <input type="file" name="photo" id="photo" />
96 <!-- on crée la variable $_FILES["photo"], taille max de 2 MO sinon la photo est refusée par le serveur -->
97 <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
98 <input type="submit" value="Télécharger le fichier" />
99 </form>
100
101 <p>Attention: taille maximale de 2 MO !</p>
102 </section>
103
104 <li id="admin" >
105 <p><i>Ne pas oublier de cliquer sur "déconnexion" quand on a fini !</i></p>
106 <p><a href="../logout.php" >déconnexion</a></p>
107 </li>
108
109 </body>
110</html>
diff --git a/photospolo/photo.txt b/photospolo/photo.txt
new file mode 100644
index 0000000..23c7e3a
--- /dev/null
+++ b/photospolo/photo.txt
@@ -0,0 +1 @@
polo.jpg \ No newline at end of file
diff --git a/photospolo/photomodif.php b/photospolo/photomodif.php
new file mode 100644
index 0000000..9be46c0
--- /dev/null
+++ b/photospolo/photomodif.php
@@ -0,0 +1,53 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// modifier la photo sélectionnée
28if (isset ($_GET['id']))
29{
30 // choix de la ligne en fonction de son id
31 $requête = $base->prepare('SELECT * FROM photospolo WHERE id = :numero');
32 $requête->execute(array('numero' => $_GET['id']));
33
34 while ($données = $requête->fetch())
35 {
36 $nom = $données['nomphoto'];
37 }
38
39 $requête->closeCursor();
40
41 $fichier = fopen('photo.txt','r+');
42 ftruncate($fichier,0); // évite les problèmes quand on change pour un titre plus court
43 fputs($fichier, $nom);
44 fseek($fichier, 0);
45 fclose($fichier);
46
47 header('Location: ../administration.php?modifphoto=4');
48 exit ();
49}
50else
51{}
52
53?>
diff --git a/photospolo/photoupload.php b/photospolo/photoupload.php
new file mode 100644
index 0000000..c3a2079
--- /dev/null
+++ b/photospolo/photoupload.php
@@ -0,0 +1,90 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: ../connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: ../connexion.php');
19 exit ();
20}
21
22
23// connexion à la base de données
24include("../connexionbase.php");
25
26
27// test de l'envoi du fichier au serveur
28// erreur = 1 si la taille du fichier dépasse de 2 MO, limite modifiable à la ligne upload_max_filesize du fichier php.ini
29if (isset ($_FILES['photo']) AND $_FILES['photo']['error'] == 0)
30{
31 // vérification de l'extension
32 $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
33 $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
34 if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
35 {
36 // on récupère la variable $nom
37 $nom = basename ($_FILES['photo']['name']);
38
39 // vérification et formatage du nom du fichier
40 // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
41 // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
42 $nom = str_replace(
43 array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
44 array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
45 $nom);
46 $nom = mb_strtolower($nom, 'UTF-8');
47 // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
48 $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
49
50 // enfin on enregistre le fichier
51 if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/photospolo/' . $nom))
52 // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
53 // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
54 {
55 // envoi du nom de la photo dans la base de données
56 echo $nom;
57 $requête = $base->prepare('INSERT INTO photospolo (nomphoto) VALUES (:nom)');
58 $requête->execute(array('nom' => $nom));
59
60 $requête->closeCursor();
61
62 // changer le nom de la photo sélectionnée dans le fichier photo.txt
63 $fichier = fopen('photo.txt','r+');
64 ftruncate($fichier,0); // évite les problèmes quand on change pour un nom plus court
65 fputs($fichier, $nom);
66 fseek($fichier, 0);
67 fclose($fichier);
68
69 header('Location: ../administration.php?modifphoto=4'); // succès, move_uploaded_file renvoie la valeur TRUE
70 exit ();
71 }
72 else // echec à l'enregistrement, la fonction renvoie FALSE
73 {
74 header('Location: ../administration.php?modifphoto=3');
75 exit ();
76 }
77 }
78 else // mauvais format
79 {
80 header('Location: ../administration.php?modifphoto=2');
81 exit ();
82 }
83}
84else // mauvaise taille
85{
86 header('Location: ../administration.php?modifphoto=1');
87 exit ();
88}
89
90?>
diff --git a/photospolo/polo.jpg b/photospolo/polo.jpg
new file mode 100644
index 0000000..6d9ccb6
--- /dev/null
+++ b/photospolo/polo.jpg
Binary files differ
diff --git a/présentationkaty.php b/présentationkaty.php
new file mode 100644
index 0000000..c641a63
--- /dev/null
+++ b/présentationkaty.php
@@ -0,0 +1,33 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: connexion.php');
19 exit ();
20}
21
22// attention le fichier ne doit pas être ouvert et modifié avec un éditeur de texte qui ajoute
23// automatiquement un passage à la ligne à la fin du fichier si il n'y en pas
24// le contenu du fichier doit être exactement le mot de passe, sinon connexion impossible !!
25$fichier = fopen('présentationkaty.txt','r+');
26ftruncate($fichier,0);
27fwrite($fichier, $_POST['nouvelleprez']);
28fseek($fichier, 0);
29fclose($fichier);
30
31header('Location: administration.php?modifprez=1');
32exit ();
33?>
diff --git a/présentationkaty.txt b/présentationkaty.txt
new file mode 100644
index 0000000..01bc800
--- /dev/null
+++ b/présentationkaty.txt
@@ -0,0 +1 @@
J'aime le sport, la cuisine, la musique, les langues et les cultures du monde entier. \ No newline at end of file
diff --git a/présentationpolo.php b/présentationpolo.php
new file mode 100644
index 0000000..d97c8db
--- /dev/null
+++ b/présentationpolo.php
@@ -0,0 +1,33 @@
1<?php
2// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1
3
4session_start();
5if (isset ($_SESSION["mdpvalide"]))
6{
7 if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
8 {} // dans ce cas on fait rien et on laisse php lire la suite
9 else
10 {
11 header('Location: connexion.php');
12 exit ();
13 // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
14 }
15}
16else
17{
18 header('Location: connexion.php');
19 exit ();
20}
21
22// attention le fichier ne doit pas être ouvert et modifié avec un éditeur de texte qui ajoute
23// automatiquement un passage à la ligne à la fin du fichier si il n'y en pas
24// le contenu du fichier doit être exactement le mot de passe, sinon connexion impossible !!
25$fichier = fopen('présentationpolo.txt','r+');
26ftruncate($fichier,0);
27fwrite($fichier, $_POST['nouvelleprez']);
28fseek($fichier, 0);
29fclose($fichier);
30
31header('Location: administration.php?modifprez=1');
32exit ();
33?>
diff --git a/présentationpolo.txt b/présentationpolo.txt
new file mode 100644
index 0000000..8fd77f6
--- /dev/null
+++ b/présentationpolo.txt
@@ -0,0 +1 @@
Musique jazz, blues, bouffe, couture, bricolage (un peu) et informatique (beaucoup), mais toujours en autodidaxie et en dilettante. \ No newline at end of file
diff --git a/refuser_indexation.txt b/refuser_indexation.txt
new file mode 100644
index 0000000..4bb2c2e
--- /dev/null
+++ b/refuser_indexation.txt
@@ -0,0 +1,7 @@
1Certains fichiers ne doivent pas être indexés par les moteurs de recherche.
2
3Cette ligne a été ajoutée dans:
4connexion.php
5administration.php
6
7<meta name="robots" content="noindex" >
diff --git a/réseau.png b/réseau.png
new file mode 100644
index 0000000..59f36c9
--- /dev/null
+++ b/réseau.png
Binary files differ
diff --git a/sakura.png b/sakura.png
new file mode 100644
index 0000000..923cbe3
--- /dev/null
+++ b/sakura.png
Binary files differ
diff --git a/zingueurs.jpg b/zingueurs.jpg
new file mode 100644
index 0000000..fc54450
--- /dev/null
+++ b/zingueurs.jpg
Binary files differ