diff options
-rw-r--r-- | contact-post.php | 96 | ||||
-rw-r--r-- | contact.php | 101 | ||||
-rw-r--r-- | detecteur.js | 30 | ||||
-rw-r--r-- | images/SAP.png | bin | 0 -> 142628 bytes | |||
-rw-r--r-- | images/contact.png | bin | 0 -> 2882 bytes | |||
-rw-r--r-- | images/favicon.ico | bin | 0 -> 5686 bytes | |||
-rw-r--r-- | images/favicon.png | bin | 0 -> 928 bytes | |||
-rw-r--r-- | images/logo-reparacteurs.jpg | bin | 0 -> 5611 bytes | |||
-rw-r--r-- | images/logo.png | bin | 0 -> 81428 bytes | |||
-rw-r--r-- | images/moi.jpg | bin | 0 -> 9064 bytes | |||
-rw-r--r-- | images/oneline.jpg | bin | 0 -> 53096 bytes | |||
-rw-r--r-- | images/ordipolo.png | bin | 0 -> 57420 bytes | |||
-rw-r--r-- | images/sakura.png | bin | 0 -> 4686 bytes | |||
-rw-r--r-- | index.php | 230 | ||||
-rw-r--r-- | infos.php | 71 | ||||
-rw-r--r-- | julian/formule.png | bin | 0 -> 11011 bytes | |||
-rw-r--r-- | julian/maths.html | 32 | ||||
-rw-r--r-- | julian/polygones.png | bin | 0 -> 10340 bytes | |||
-rw-r--r-- | kiffe.php | 80 | ||||
-rw-r--r-- | menu.php | 8 | ||||
-rw-r--r-- | ordipolo.css | 308 | ||||
-rw-r--r-- | refuser_indexation.txt | 6 | ||||
-rw-r--r-- | stats.php | 90 | ||||
-rw-r--r-- | visites.php | 84 |
24 files changed, 1136 insertions, 0 deletions
diff --git a/contact-post.php b/contact-post.php new file mode 100644 index 0000000..6d6f19d --- /dev/null +++ b/contact-post.php | |||
@@ -0,0 +1,96 @@ | |||
1 | <?php | ||
2 | session_start(); // pour reremplir le formulaire en cas d'échec à l'envoi | ||
3 | $_SESSION['adresse'] = $_POST['adresse']; | ||
4 | $_SESSION['contenu'] = $_POST['contenu']; | ||
5 | |||
6 | if (isset($_POST['captcha'])) | ||
7 | { | ||
8 | if ($_POST['captcha'] == 21) | ||
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 = htmlentities($_POST['adresse']); | ||
16 | $adresse = $_POST['adresse']; | ||
17 | //$contenu = htmlentities($_POST['contenu']); | ||
18 | $contenu = $_POST['contenu']; | ||
19 | |||
20 | if (filter_var($adresse, FILTER_VALIDATE_EMAIL)) | ||
21 | { | ||
22 | $destinataire = 'contact@ordipolo.fr'; | ||
23 | $sujet = 'message de ' . htmlspecialchars($adresse) . ' envoyé depuis le site'; | ||
24 | |||
25 | // On filtre les serveurs qui rencontrent des bogues. | ||
26 | /*if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $destinataire)) | ||
27 | { | ||
28 | $passage_ligne = "\r\n"; | ||
29 | } | ||
30 | else | ||
31 | { | ||
32 | $passage_ligne = "\n"; | ||
33 | }*/ | ||
34 | $passage_ligne = "\r\n"; | ||
35 | |||
36 | //$contenu = htmlspecialchars($contenu); | ||
37 | |||
38 | echo $passage_ligne; | ||
39 | |||
40 | // En-tête | ||
41 | //$boundary = "-----=" . md5(rand()); | ||
42 | |||
43 | $header = 'From: siteweb <' . $adresse . '>' . $passage_ligne; // expéditeur | ||
44 | $header .= 'Reply-to: ' . $adresse . ' <' . $adresse . '>' . $passage_ligne; // réponse | ||
45 | $header .= 'Return-path : ' . $adresse . ' <' . $adresse . '>' . $passage_ligne; // retour en cas d'erreur | ||
46 | $header .= 'MIME-Version: 1.0' . $passage_ligne; | ||
47 | $header .= 'Content-type: text/plain; charset=utf-8 boundary=\"' . $boundary . '\"' . $passage_ligne; | ||
48 | |||
49 | // message | ||
50 | //$message = $passage_ligne."--".$boundary.$passage_ligne; | ||
51 | //$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne; | ||
52 | $message .= $passage_ligne . $contenu . $passage_ligne; | ||
53 | //$message .= $passage_ligne."--".$boundary.$passage_ligne; | ||
54 | |||
55 | echo $destinataire; | ||
56 | echo "<br/>"; | ||
57 | echo $sujet; | ||
58 | echo "<br/>"; | ||
59 | echo $message; | ||
60 | echo "<br/>"; | ||
61 | echo $header; | ||
62 | |||
63 | // Envoi | ||
64 | mail($destinataire, $sujet, $message, $header); | ||
65 | |||
66 | // envoi réussi, on peut nettoyer | ||
67 | unset ($_SESSION['adresse']); | ||
68 | unset ($_SESSION['contenu']); | ||
69 | |||
70 | header('Location: contact.php?erreur=0'); | ||
71 | } | ||
72 | else | ||
73 | { | ||
74 | header('Location: contact.php?erreur=1'); | ||
75 | } | ||
76 | } | ||
77 | else | ||
78 | { | ||
79 | header('Location: contact.php?erreur=1'); | ||
80 | } | ||
81 | } | ||
82 | else | ||
83 | { | ||
84 | header('Location: contact.php?erreur=1'); | ||
85 | } | ||
86 | } | ||
87 | else | ||
88 | { | ||
89 | header('Location: contact.php?erreur=2'); | ||
90 | } | ||
91 | } | ||
92 | else | ||
93 | { | ||
94 | header('Location: contact.php?erreur=2'); | ||
95 | } | ||
96 | ?> | ||
diff --git a/contact.php b/contact.php new file mode 100644 index 0000000..3eeaf83 --- /dev/null +++ b/contact.php | |||
@@ -0,0 +1,101 @@ | |||
1 | <?php | ||
2 | // reremplir le formulaire en cas d'échec à l'envoi | ||
3 | session_start(); | ||
4 | if(isset($_SESSION['contenu'])) | ||
5 | { | ||
6 | $contenu = $_SESSION['contenu']; | ||
7 | } | ||
8 | else | ||
9 | { | ||
10 | $contenu = ''; | ||
11 | } | ||
12 | if(isset($_SESSION['adresse'])) | ||
13 | { | ||
14 | $adresse = $_SESSION['adresse']; | ||
15 | } | ||
16 | else | ||
17 | { | ||
18 | $adresse = ''; | ||
19 | } | ||
20 | ?> | ||
21 | <!DOCTYPE html> | ||
22 | <html lang="fr" > | ||
23 | <head> | ||
24 | <!-- pour pouvoir envoyer un mail html, l'en-tête content-type doit être présente --> | ||
25 | <meta http-equiv="Content-Type" content="text/html" /> | ||
26 | <meta charset="utf-8" /> | ||
27 | <title>Contacter Ordipolo</title> | ||
28 | <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" /> | ||
29 | <link rel="icon" type="image/png" href="images/favicon.png" > | ||
30 | <link rel="stylesheet" href="ordipolo.css" /> | ||
31 | <meta name="description" content="Contacter Ordipolo." /> | ||
32 | <meta name="viewport" content="width=device-width" /> | ||
33 | <style> | ||
34 | i{color: red;} /* messages d'erreur */ | ||
35 | article p{margin: 0px;} | ||
36 | article{margin-bottom: 20px;} | ||
37 | @media screen and (max-width: 750px){aside{display: none;}} | ||
38 | </style> | ||
39 | </head> | ||
40 | |||
41 | <body> | ||
42 | <div id="bloc_page" > | ||
43 | <header> | ||
44 | <?php $actuelle = "contact"; ?> | ||
45 | <?php include ("menu.php"); ?> | ||
46 | |||
47 | <p><a href="index.php" > | ||
48 | <img id="logohaut" src="images/logo.png" alt="ordipolo" /> | ||
49 | <img id="logotitre" src="images/ordipolo.png" alt="ordipolo" /></a></p> | ||
50 | </header> | ||
51 | |||
52 | <section> | ||
53 | <aside> | ||
54 | <p><img class="photo" src="images/moi.jpg" alt="ordipolo dépannage informatique" /></p> | ||
55 | <p>Paul Jusot</p> | ||
56 | <p><img src="images/contact.png" alt="un problème d'affichage, rechargez la page" /></p> | ||
57 | </aside> | ||
58 | |||
59 | <article> | ||
60 | <form method="post" action="contact-post.php" > | ||
61 | <p><label for="email" >Votre adresse électronique (du type: machin@bidule.fr) : </label><br/> | ||
62 | <input required type="email" id="email" name="adresse" size="30" value="<?= $adresse ?>" /></p> | ||
63 | <p><label for="message" >Votre message :</label><br/> | ||
64 | <textarea required id="message" name="contenu" cols="60" rows="12"><?= $contenu ?></textarea></p> | ||
65 | |||
66 | <!-- captcha anti-spam --> | ||
67 | <p>Montrez que vous n'êtes pas un robot.<br/> | ||
68 | <label for="captcha" >Combien fait 3 multiplié par 7</label> | ||
69 | <input required type="text" id="captcha" name="captcha" size="1" /></p> | ||
70 | |||
71 | <p><input type="submit" name="submit" value="Envoyer votre message" /></p> | ||
72 | |||
73 | <?php | ||
74 | // messages d'erreur | ||
75 | if (isset($_GET['erreur'])) | ||
76 | { | ||
77 | if ($_GET['erreur'] == 2) | ||
78 | { | ||
79 | echo ('<i>Veuillez donner le résultat de l\'opération s\'il vous plaît..</i>'); | ||
80 | } | ||
81 | else if ($_GET['erreur'] == 1) | ||
82 | { | ||
83 | echo ('<i>Erreur d\'envoi: Veuillez indiquer une adresse e-mail valide et écrire un message.</i>'); | ||
84 | } | ||
85 | elseif ($_GET['erreur'] == 0) | ||
86 | { | ||
87 | echo ('<i>Votre message à bien été envoyé.</i>'); | ||
88 | } | ||
89 | else | ||
90 | {} | ||
91 | } | ||
92 | else | ||
93 | {} | ||
94 | ?> | ||
95 | </form> | ||
96 | </article> | ||
97 | </section> | ||
98 | </div> | ||
99 | </body> | ||
100 | <script src="detecteur.js"></script> | ||
101 | </html> | ||
diff --git a/detecteur.js b/detecteur.js new file mode 100644 index 0000000..3f74cb1 --- /dev/null +++ b/detecteur.js | |||
@@ -0,0 +1,30 @@ | |||
1 | // détection | ||
2 | function initUI_setListener() { | ||
3 | // {once: true} interrompt l'écoute après une première détection | ||
4 | // ne détecte pas les visiteurs en mode texte | ||
5 | document.body.addEventListener("mousemove", initUI_handle, {once: true}); // mouvements de souris | ||
6 | document.body.addEventListener("touchmove", initUI_handle, {once: true}); // contact écran tactile | ||
7 | console.log('attach'); | ||
8 | } | ||
9 | |||
10 | // action | ||
11 | function initUI_handle() { | ||
12 | //Retirer les event au listener, inutile en théorie | ||
13 | document.body.removeEventListener("mousemove", initUI_handle, true); | ||
14 | document.body.removeEventListener("touchmove", initUI_handle, true); | ||
15 | console.log('detach'); | ||
16 | |||
17 | // optionnel: infos supplémentaires dans l'URL | ||
18 | //~ var params='page_id=10'; | ||
19 | //~ var width = document.documentElement.clientWidth; | ||
20 | //~ var height = document.documentElement.clientHeight; | ||
21 | //~ params += '&width=' + width + '&height=' + height; | ||
22 | |||
23 | //Envoyer la requete | ||
24 | const xhr = new XMLHttpRequest(); | ||
25 | url = 'visites.php'; | ||
26 | xhr.open("GET", url); | ||
27 | xhr.send(); | ||
28 | } | ||
29 | |||
30 | initUI_setListener(); | ||
diff --git a/images/SAP.png b/images/SAP.png new file mode 100644 index 0000000..966d279 --- /dev/null +++ b/images/SAP.png | |||
Binary files differ | |||
diff --git a/images/contact.png b/images/contact.png new file mode 100644 index 0000000..1493718 --- /dev/null +++ b/images/contact.png | |||
Binary files differ | |||
diff --git a/images/favicon.ico b/images/favicon.ico new file mode 100644 index 0000000..e508eae --- /dev/null +++ b/images/favicon.ico | |||
Binary files differ | |||
diff --git a/images/favicon.png b/images/favicon.png new file mode 100644 index 0000000..09300a5 --- /dev/null +++ b/images/favicon.png | |||
Binary files differ | |||
diff --git a/images/logo-reparacteurs.jpg b/images/logo-reparacteurs.jpg new file mode 100644 index 0000000..8cc3954 --- /dev/null +++ b/images/logo-reparacteurs.jpg | |||
Binary files differ | |||
diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000..2976a9c --- /dev/null +++ b/images/logo.png | |||
Binary files differ | |||
diff --git a/images/moi.jpg b/images/moi.jpg new file mode 100644 index 0000000..6d9ccb6 --- /dev/null +++ b/images/moi.jpg | |||
Binary files differ | |||
diff --git a/images/oneline.jpg b/images/oneline.jpg new file mode 100644 index 0000000..75b1955 --- /dev/null +++ b/images/oneline.jpg | |||
Binary files differ | |||
diff --git a/images/ordipolo.png b/images/ordipolo.png new file mode 100644 index 0000000..03cdd07 --- /dev/null +++ b/images/ordipolo.png | |||
Binary files differ | |||
diff --git a/images/sakura.png b/images/sakura.png new file mode 100644 index 0000000..923cbe3 --- /dev/null +++ b/images/sakura.png | |||
Binary files differ | |||
diff --git a/index.php b/index.php new file mode 100644 index 0000000..3f40f0d --- /dev/null +++ b/index.php | |||
@@ -0,0 +1,230 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html lang="fr" > | ||
3 | <head> | ||
4 | <meta charset="utf-8" /> | ||
5 | <title>ORDIPOLO dépannage informatique et assistance à domicile</title> | ||
6 | <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" /> | ||
7 | <link rel="icon" type="image/png" href="images/favicon.png" > | ||
8 | <link rel="stylesheet" href="ordipolo.css" /> | ||
9 | <meta name="description" content="Ordipolo assistance informatique à domicile et réparation d'ordinateurs windows et linux. Services à la personne sur Quimper 29." /> | ||
10 | <meta name="viewport" content="width=device-width" /> <!-- empêche certains navigateurs de faire un dézoom --> | ||
11 | </head> | ||
12 | |||
13 | <body> | ||
14 | <div id="bloc_page" > | ||
15 | <?php /* echo $_SERVER['HTTP_REFERER'] . "\n"; */ ?> | ||
16 | <header> | ||
17 | <?php $actuelle = "accueil"; ?> | ||
18 | <?php include ("menu.php"); ?> | ||
19 | |||
20 | <div> | ||
21 | <img id="logohaut" src="images/logo.png" alt="ordipolo dépannage informatique Quimper" /> | ||
22 | <img id="logotitre" src="images/ordipolo.png" alt="ordipolo dépannage informatique Quimper" /> | ||
23 | </div> | ||
24 | </header> | ||
25 | |||
26 | <section style="justify-content: space-around;" > | ||
27 | <aside> | ||
28 | <p><img class="photo" src="images/moi.jpg" alt="ordipolo" /></p> | ||
29 | <p>Paul Jusot</p> | ||
30 | <p><img src="images/contact.png" alt="un problème d'affichage, rechargez la page" /></p> | ||
31 | </aside> | ||
32 | |||
33 | <div id="description" > | ||
34 | <p>J'interviens pour réparer votre ordinateur et vous aider à vous en servir.</p> | ||
35 | <ul> | ||
36 | <li>Rendre votre ordinateur plus facile à utiliser</li> | ||
37 | <li>Maintenance courante, nettoyage, optimisation</li> | ||
38 | <li>Diagnostic et dépannage</li> | ||
39 | <li>Installation d'un nouvel ordinateur, d'une imprimante, etc.</li> | ||
40 | <li>Sauvegarde et récupération de données</li> | ||
41 | <li>Utilisations de logiciels libres</li> | ||
42 | <li>Configuration plus respectueuse de votre vie privée<br/> | ||
43 | <i>(attention: protection de sa vie privée et facilité d'utilisation sont rarement compatibles)</i></li> | ||
44 | <li>Remise en route de votre ordinosaure</li> | ||
45 | <li>Poste de travail sous Linux adapté à votre machine et à vos besoins</li> | ||
46 | </ul> | ||
47 | </div> | ||
48 | </section> | ||
49 | |||
50 | <section id="prestations" > | ||
51 | <div> | ||
52 | <h3><a href="#assistance" >Assistance à domicile</a></h3> | ||
53 | <h3><a href="#cours" >Cours</a></h3> | ||
54 | <h3><a href="#depannage" >Dépannage</a></h3> | ||
55 | <h3><a href="#installation" >Mise en service</a></h3> | ||
56 | <h3><a href="#securite" >Pack sécurité et vie privée</a></h3> | ||
57 | </div> | ||
58 | </section> | ||
59 | |||
60 | <h1>Services à la personne</h1> | ||
61 | <section> | ||
62 | <p>Régler par CESU et bénéficiez <strong>d'un crédit d'impôt de 50% !</strong><br/> | ||
63 | Depuis le 1er janvier 2017, il n'est plus nécessaire d'être imposable pour en bénéficier.<br/> | ||
64 | Cliquez sur le logo "services à la personne" pour plus d'informations.</p> | ||
65 | <p><a href="infos.php" ><img src="images/SAP.png" alt="logo SAP" style="width: 130px;" /></a></p> | ||
66 | </section> | ||
67 | |||
68 | <h1 id="tarifs" >Tarification</h1> | ||
69 | <section> | ||
70 | <table> | ||
71 | <caption><span>Prestations réglées par CESU</span><br/> | ||
72 | <i>avec crédit d'impôt de 50% l'année suivante</i></caption> | ||
73 | <tr> | ||
74 | <td>assistance à domicile</td> | ||
75 | <td>30€/heure</td> | ||
76 | </tr> | ||
77 | <tr> | ||
78 | <td>cours</td> | ||
79 | <td>20€/heure</td> | ||
80 | </tr> | ||
81 | <tr> | ||
82 | <td>dépannage</td> | ||
83 | <td>50€ ou 60€ ou 70€</td> | ||
84 | </tr> | ||
85 | <tr> | ||
86 | <td>mise en service</td> | ||
87 | <td>50€</td> | ||
88 | </tr> | ||
89 | <tr> | ||
90 | <td>pack sécurité et vie privée</td> | ||
91 | <td>70€</td> | ||
92 | </tr> | ||
93 | <tr> | ||
94 | <td>déplacement</td> | ||
95 | <td>10€ à Quimper, ou 20€ ou 30€</td> | ||
96 | </tr> | ||
97 | <tr> | ||
98 | <td>intervention d'urgence</td> | ||
99 | <td>ajouter 20€ au déplacement</td> | ||
100 | </tr> | ||
101 | </table> | ||
102 | |||
103 | <table> | ||
104 | <caption><span>Règlement normal sans CESU</span><br/> | ||
105 | <i>inclut les cotisations</i></caption> | ||
106 | <tr> | ||
107 | <td>assistance à domicile</td> | ||
108 | <td>40€/heure</td> | ||
109 | </tr> | ||
110 | <tr> | ||
111 | <td>cours</td> | ||
112 | <td>25€/heure</td> | ||
113 | </tr> | ||
114 | <tr> | ||
115 | <td>dépannage</td> | ||
116 | <td>65€ ou 77€ ou 90€</td> | ||
117 | </tr> | ||
118 | <tr> | ||
119 | <td>mise en service</td> | ||
120 | <td>65€</td> | ||
121 | </tr> | ||
122 | <tr> | ||
123 | <td>pack sécurité et vie privée</td> | ||
124 | <td>90€</td> | ||
125 | </tr> | ||
126 | <tr> | ||
127 | <td>déplacement</td> | ||
128 | <td>13€ à Quimper, ou 25€ ou 40€</td> | ||
129 | </tr> | ||
130 | <tr> | ||
131 | <td>intervention d'urgence</td> | ||
132 | <td>ajouter 25€ au déplacement</td> | ||
133 | </tr> | ||
134 | </table> | ||
135 | </section> | ||
136 | |||
137 | |||
138 | <div id="assistance" class="parties" > | ||
139 | <h1 class="menu" >Assistance à domicile et cours particuliers</h1> | ||
140 | <h2 >Assistance à domicile:</h2> | ||
141 | <p>Aide à l'utilisation de l'ordinateur ou d'une tablette/smartphone. | ||
142 | Je vous aide, vous montre et vous explique pour que vous puissiez le refaire. | ||
143 | L'assistance comprend la résolution de tous les problèmes qui ne nécessitent pas | ||
144 | trop de temps ni une action en profondeur.</p> | ||
145 | <p>Vous avez des demandes précises? préparation de voyage, traitement de texte, | ||
146 | supports de communication (flyers, graphisme), c'est possible aussi!</p> | ||
147 | |||
148 | <h2 id="cours" >Cours particuliers:</h2> | ||
149 | <p>C'est à dire (liste non exhaustive):</p> | ||
150 | <pre>Les bases : | ||
151 | - taper du texte, utiliser le clavier et la souris | ||
152 | - ouvrir une application, redimensionner ou envoyer en arrière-plan une fenêtre | ||
153 | - composition de l'ordinateur, machine et système d'exploitation | ||
154 | - copier-coller, poupées russes et rangement des fichiers | ||
155 | - lire du multimédia (images, musique, vidéos) | ||
156 | - les périphériques de stockage (CD/DVD, clé USB, carte mémoire) | ||
157 | - les imprimantes/scanners | ||
158 | |||
159 | Internet : | ||
160 | - se connecter à internet, fournisseurs d'accès et installation de la «box» | ||
161 | - c'est quoi l'internet, c'est quoi le web et la différence entre google et google | ||
162 | - boite e-mail et identification sur les sites web (facebook, banque…) | ||
163 | - messagerie instantanée (skype) | ||
164 | - google earth | ||
165 | - se protéger sur internet | ||
166 | |||
167 | Niveau avancé : | ||
168 | - bureautique avec libreoffice (traitement de texte, tableur) | ||
169 | - faire une capture d'écran, manipulation d'images avec paint/gimp/inkscape | ||
170 | - archivage et compression, envoyer un e-mail avec des pièces jointes | ||
171 | - formats de fichiers: .jpg .pdf .mp3 .docx .truc .bidule | ||
172 | - extraire ou graver un disque CD/DVD/bluray | ||
173 | |||
174 | Maintenance et sécurité : | ||
175 | - précautions et bonnes pratiques | ||
176 | - à propos du disque dur, formater un disque ou une clé usb | ||
177 | - maintenance courante de windows (mise-à-jour, nettoyage, défragmentation, analyse antivirus) | ||
178 | - sauvegarder ses fichiers, créer une image système</pre> | ||
179 | </div> | ||
180 | |||
181 | <div id="depannage" class="parties" > | ||
182 | <h1 class="menu" >Dépannage, installation, réinstallation, sauvegarde, récupération de données</h1> | ||
183 | <h2 >Dépannage</h2> | ||
184 | <p>Ce sont des interventions plus profondes qui nécessitent que je vous emprunte la machine (en général un ou deux jours) | ||
185 | ce qui sera le cas pour une installation ou réinstallation du système (windows ou linux), un diagnostic, | ||
186 | la commande et le remplacement d'une pièce<br/> | ||
187 | => le devis est gratuit<br/> | ||
188 | => un ordinateur de prêt est proposé le temps des réparations<br/> | ||
189 | => pour une sauvegarde, prévoir un espace de stockage (exemple: un disque dur externe)<br/> | ||
190 | => si je dois commander une pièce de rechange, la livraison peut dans certains cas prendre 8 ou 15 jours | ||
191 | (le bateau, c'est moins cher mais c'est plus long) et être accompagnée de frais de douanes</p> | ||
192 | |||
193 | <h2 id="installation" >Mise en service d'un nouvel ordinateur</h2> | ||
194 | <p>Je fais selon ce que vous désirez:<br/> | ||
195 | - installation de la box internet, de l'imprimante<br/> | ||
196 | - récupération des données de l'ancien PC<br/> | ||
197 | - récupération des courriels outlook ou thunderbird, des favoris du navigateurs<br/> | ||
198 | - installation d'applications utiles, des mises à jour et d'un antivirus<br/> | ||
199 | - des réglages pour faciliter l'utilisation et protéger sa vie privée<br/> | ||
200 | - suppressions des programmes inutiles ajoutés par le constructeur<br/> | ||
201 | - demandes particulières (j'ai besoin de ce logiciel !!)</p> | ||
202 | |||
203 | <h2 id="securite" >Pack sécurité et vie privée</h2> | ||
204 | <p>Mise en service d'un ordinateur avec une configuration orientée vers la sécurité:</p> | ||
205 | <p>La sécurité informatique est un terme vague (et marketing), son sens varie beaucoup selon le contexte et je peux vous aider à y voir plus clair:<br/> | ||
206 | 1/ mon ordinateur et mes fichiers sont protégés des autres personnes (accès par mot de passe, chiffrement).<br/> | ||
207 | 2/ mes fichiers seront toujours accessibles dans le futur (sauvegardes).<br/> | ||
208 | 3/ mon logiciel est stable, il n'a pas de bug, il marche aujourd'hui et marchera demain.<br/> | ||
209 | 4/ mon logiciel ne me cache rien, il ne fait pas autre chose que ce que je souhaite qu'il fasse.<br/> | ||
210 | 5/ je sais prendre des précautions et j'essaie d'éviter l'erreur humaine (je donne de fausses informations sur internet, etc).<br/> | ||
211 | 6/ je protège mon enfant (contrôle parental).</p> | ||
212 | |||
213 | <p>Il peut y avoir beaucoup à faire selon vos besoin. Noter que protéger son ordinateur et le rendre plus facile d'utilisation n'est pas compatible. Plus vous mettez de serrures sur votre porte d'entrée, plus longtemps il vous faudra pour l'ouvrir et la refermer.</p> | ||
214 | </div> | ||
215 | |||
216 | <div id="siteweb" class="parties" > | ||
217 | <h1 class="menu" >Création de sites web</h1> | ||
218 | <p>Visitez donc mon blog!<br/> | ||
219 | <a class="lien" href="https://lelionetlecolibri.ordipolo.fr" target="_blank" > | ||
220 | https://lelionetlecolibri.ordipolo.fr</a></p> | ||
221 | <p style="color: red;" >Service pour les amis uniquement.</p> | ||
222 | </div> | ||
223 | |||
224 | <footer> | ||
225 | <h1><a href="#bloc_page" >Remonter en haut de la page.</a></h1> | ||
226 | </footer> | ||
227 | </div> | ||
228 | </body> | ||
229 | <script src="detecteur.js"></script> | ||
230 | </html> | ||
diff --git a/infos.php b/infos.php new file mode 100644 index 0000000..4f0a816 --- /dev/null +++ b/infos.php | |||
@@ -0,0 +1,71 @@ | |||
1 | <?php | ||
2 | session_start(); | ||
3 | ?> | ||
4 | <!DOCTYPE html> | ||
5 | |||
6 | <html lang="fr" > | ||
7 | <head> | ||
8 | <meta charset="utf-8" /> | ||
9 | <title>A propos de moi</title> | ||
10 | <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" /> | ||
11 | <link rel="icon" type="image/png" href="images/favicon.png" > | ||
12 | <link rel="stylesheet" href="ordipolo.css" /> | ||
13 | <meta name="description" content="à propos de moi" /> | ||
14 | <meta name="viewport" content="width=device-width" /> | ||
15 | </head> | ||
16 | |||
17 | <body> | ||
18 | <div id="bloc_page" > | ||
19 | <header> | ||
20 | <?php $actuelle = "infos"; ?> | ||
21 | <?php include ("menu.php"); ?> | ||
22 | |||
23 | <p><a href="index.php" > | ||
24 | <img id="logohaut" src="images/logo.png" alt="ordipolo" /> | ||
25 | <img id="logotitre" src="images/ordipolo.png" alt="ordipolo" /></a></p> | ||
26 | </header> | ||
27 | |||
28 | <div class="parties" > | ||
29 | <h1>Services à la personne</h1> | ||
30 | <section> | ||
31 | <p><img src="images/SAP.png" alt="logo SAP" style="width: 130px;" /></p> | ||
32 | <div> | ||
33 | <p>Régler par CESU et bénéficiez <strong>d'un prix réduit et d'un crédit d'impôt de 50% !</strong><br/> | ||
34 | Depuis le 1er janvier 2017, <strong>il n'est plus nécessaire d'être imposable pour en bénéficier</strong> (la réduction d'impôt étant devenue un crédit d'impôt).</p> | ||
35 | <p>Payer un prestataire avec des CESU est très intéressant. Vous y gagnez alors même que c'est vous qui payez les charges.<br/>Pas convaincu? Faites le calcul sur <a href="https://www.cesu.urssaf.fr/decla/index.html?page=page_estimer&LANG=FR" >cesu.urssaf.fr</a></p> | ||
36 | <p>Et en cadeau,<br/>je peux vous accompagner <stong>gratuitement</stong> le temps de votre inscription sur le site de l'URSSAF, c'est très rapide, il vous suffit d'avoir vos coordonnées bancaires (RIB).</p> | ||
37 | </div> | ||
38 | </section> | ||
39 | </div> | ||
40 | |||
41 | <div class="parties" > | ||
42 | <h1>A propos de moi</h1> | ||
43 | <section> | ||
44 | <p><img src="images/logo.png" alt="ordipolo" style="width: 160px;" /></p> | ||
45 | <div> | ||
46 | <p>Paul Jusot, 2 A rue de l'île de Man, 29000 Quimper</p> | ||
47 | <p>Entreprise immatriculée aux répertoires des métiers au n°814320610RM29 depuis fin 2015<br/> | ||
48 | et déclarée prestataire de services à la personne au n°SAP814320610</p> | ||
49 | </div> | ||
50 | </section> | ||
51 | </div> | ||
52 | |||
53 | <p>Ce site a été entièrement créé et est hébergé par mes soins, ceci à l'exception des deux logos que je dois à | ||
54 | <a class="lien" href="http://www.romainlebadezet.com" target="_blank" > | ||
55 | Romain Le Badezet</a>.</p> | ||
56 | |||
57 | <p>Je suis dans l'annuaire <a class="lien" | ||
58 | href="https://www.crma.bzh/reparacteur/ordipolo" target="_blank" > | ||
59 | répar'acteurs. <img src="images/logo-reparacteurs.jpg" alt="répar'acteurs" /></a></p> | ||
60 | |||
61 | <p>Je suis aussi sur <a class="lien" | ||
62 | href="http://www.servicemalin.com/Depannage-Informatique/51051" target="_blank" > | ||
63 | servicemalin.com</a> qui m'aide à être référencé.</p> | ||
64 | |||
65 | <footer> | ||
66 | <h1><a href="#bloc_page" >Remonter en haut de la page.</a></h1> | ||
67 | </footer> | ||
68 | </div> | ||
69 | </body> | ||
70 | </html> | ||
71 | <?php include("visites.php"); ?> | ||
diff --git a/julian/formule.png b/julian/formule.png new file mode 100644 index 0000000..25032f5 --- /dev/null +++ b/julian/formule.png | |||
Binary files differ | |||
diff --git a/julian/maths.html b/julian/maths.html new file mode 100644 index 0000000..b6ebb6f --- /dev/null +++ b/julian/maths.html | |||
@@ -0,0 +1,32 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html lang="fr" > | ||
3 | <head> | ||
4 | <meta charset="utf-8" /> | ||
5 | <title>julian maths</title> | ||
6 | <link rel="stylesheet" href="../ordipolo.css" /> | ||
7 | </head> | ||
8 | |||
9 | <body> | ||
10 | <div id="bloc_page" > | ||
11 | <h1 class="menu" >voici mon équation</h1> | ||
12 | |||
13 | <p><img src="formule.png" alt="formule" /></p> | ||
14 | <p style="margin: 0px 0px 20px 20px;" >où <i>n</i> est un entier impaire</p> | ||
15 | <p>Bonjour à tous, je m'appelle Julian, je suis mathématicien amateur et je suis ami avec Paul.</p> | ||
16 | <p>J'ai eu très envie de partager cette équation fondée sur mon intuition et que je vous laisse le soin de démontrer. | ||
17 | Attention, sous son air apparemment simple, cette formule risque d'être très difficile à démontrer. | ||
18 | Je pense qu'elle n'est pas encore connue par le monde scientifique, mais je peux me tromper.</p> | ||
19 | <p>Avis aux amateurs !</p> | ||
20 | <p>Le symbole valeur absolue vient du fait que <i>n</i> est tantôt positif, tantôt négatif, | ||
21 | de plus <span style="text-decoration: underline;" >il est toujours impaire</span>. | ||
22 | Le 2 kpi/n est connu des mathématiciens comme une notation permettant d'exprimer les angles d'un polygone régulier. | ||
23 | La somme des cosinus pour ce type de situation est connu et vaut 0 (voir théorème sur les racines énièmes de l'unité).</p> | ||
24 | <p>J'ai choisi de faire la somme des inverses qui me semble intéressante mais plus atypique.</p> | ||
25 | |||
26 | <h1> | ||
27 | <a href="../kiffe.php" style="text-decoration: none;" >page précédente</a> | ||
28 | </h1> | ||
29 | </div> | ||
30 | </body> | ||
31 | </html> | ||
32 | |||
diff --git a/julian/polygones.png b/julian/polygones.png new file mode 100644 index 0000000..d1db046 --- /dev/null +++ b/julian/polygones.png | |||
Binary files differ | |||
diff --git a/kiffe.php b/kiffe.php new file mode 100644 index 0000000..0be7e0c --- /dev/null +++ b/kiffe.php | |||
@@ -0,0 +1,80 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html lang="fr" > | ||
3 | <head> | ||
4 | <meta charset="utf-8" /> | ||
5 | <title>Sites à visiter !</title> | ||
6 | <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" /> | ||
7 | <link rel="icon" type="image/png" href="images/favicon.png" > | ||
8 | <link rel="stylesheet" href="ordipolo.css" /> | ||
9 | <meta name="description" content="Liens vers les sites des amis" /> | ||
10 | <meta name="viewport" content="width=device-width" /> | ||
11 | <style> | ||
12 | .photoenhaut | ||
13 | { | ||
14 | display: flex; | ||
15 | } | ||
16 | @media screen and (max-width: 500px) | ||
17 | { | ||
18 | .photoenhaut | ||
19 | { | ||
20 | flex-direction: column; | ||
21 | } | ||
22 | } | ||
23 | </style> | ||
24 | </head> | ||
25 | |||
26 | <body> | ||
27 | <div id="bloc_page" > | ||
28 | <header> | ||
29 | <?php $actuelle = "kiffe"; ?> | ||
30 | <?php include ("menu.php"); ?> | ||
31 | |||
32 | <p><a href="index.php" > | ||
33 | <img id="logohaut" src="images/logo.png" alt="ordipolo" /> | ||
34 | <img id="logotitre" src="images/ordipolo.png" alt="ordipolo" /></a></p> | ||
35 | </header> | ||
36 | |||
37 | <div class="parties" > | ||
38 | <a href="https://lelionetlecolibri.ordipolo.fr" > | ||
39 | <h1 >Le lion et le colibri</h1> | ||
40 | </a> | ||
41 | <div class="photoenhaut" > | ||
42 | <p>Blog que je tiens avec Katy<br/> | ||
43 | Au programme: voyages, gastronomie, musique, détente.</p> | ||
44 | <a href="https://lelionetlecolibri.ordipolo.fr" > | ||
45 | <img class="photo" src="images/sakura.png" alt="fleur de cerisier japonais" /> | ||
46 | </a> | ||
47 | </div> | ||
48 | </div> | ||
49 | |||
50 | <div class="parties" > | ||
51 | <a href="julian/maths.html" > | ||
52 | <h1>Recherches en mathématiques</h1> | ||
53 | </a> | ||
54 | <div class="photoenhaut" > | ||
55 | <p>de Julian Favennec à la cité de la ruche.</p> | ||
56 | <a href="julian/maths.html" > | ||
57 | <img class="photo" src="julian/polygones.png" alt="" /> | ||
58 | </a> | ||
59 | </div> | ||
60 | </div> | ||
61 | |||
62 | <div class="parties" > | ||
63 | <a href="http://www.romainlebadezet.com" > | ||
64 | <h1>Romain Le Badezet</h1> | ||
65 | </a> | ||
66 | <div class="photoenhaut" > | ||
67 | <p>Artistre peintre, dessinateur, plasticien</p> | ||
68 | <a href="http://www.romainlebadezet.com" > | ||
69 | <img class="photo" src="images/oneline.jpg" alt="ligne" /> | ||
70 | </a> | ||
71 | </div> | ||
72 | </div> | ||
73 | |||
74 | <footer> | ||
75 | <h1><a href="#bloc_page" >Remonter en haut de la page.</a></h1> | ||
76 | </footer> | ||
77 | </div> | ||
78 | </body> | ||
79 | <script src="detecteur.js"></script> | ||
80 | </html> | ||
diff --git a/menu.php b/menu.php new file mode 100644 index 0000000..221ebb7 --- /dev/null +++ b/menu.php | |||
@@ -0,0 +1,8 @@ | |||
1 | <nav> | ||
2 | <a href="index.php#bloc_page" <?php if($actuelle == "accueil") {echo('id="actuelle"');} ?> >Accueil du site</a> | ||
3 | <a href="index.php#prestations" >Services proposés</a> | ||
4 | <a href="index.php#tarifs" >Tarifs</a> | ||
5 | <a href="contact.php" <?php if($actuelle == "contact") {echo('id="actuelle"');} ?> >Contact</a> | ||
6 | <a href="infos.php" <?php if($actuelle == "infos") {echo('id="actuelle"');} ?> >Infos légales</a> | ||
7 | <a href="kiffe.php" <?php if($actuelle == "kiffe") {echo('id="actuelle"');} ?> >J'aime !</a> | ||
8 | </nav> | ||
diff --git a/ordipolo.css b/ordipolo.css new file mode 100644 index 0000000..09855e1 --- /dev/null +++ b/ordipolo.css | |||
@@ -0,0 +1,308 @@ | |||
1 | body | ||
2 | { | ||
3 | font-size: 100%; | ||
4 | font-family: sans; | ||
5 | /* pour enlever la bande de la couleur du fond en haut et en bas de la page */ | ||
6 | margin: 0; | ||
7 | background-color: #F0EC41; | ||
8 | } | ||
9 | |||
10 | #bloc_page | ||
11 | { | ||
12 | max-width: 1200px; | ||
13 | /* la largeur max indiquée sert à réduire la variété des largeurs d'écran à prendre en compte */ | ||
14 | margin: auto; | ||
15 | padding: 0 20px 30px 20px; | ||
16 | background-color: white; | ||
17 | } | ||
18 | |||
19 | h1 | ||
20 | { | ||
21 | font-weight: normal; | ||
22 | display: inline-block; | ||
23 | margin: 5px; | ||
24 | border: 2px #008100 solid; | ||
25 | border-radius: 12px; | ||
26 | padding: 3px; | ||
27 | background-color: #F4F02D; | ||
28 | font-size: 120%; | ||
29 | } | ||
30 | |||
31 | h2 | ||
32 | { | ||
33 | font-weight: normal; | ||
34 | font-size: 110%; | ||
35 | text-decoration: underline; | ||
36 | } | ||
37 | |||
38 | p | ||
39 | { | ||
40 | margin: 10px; | ||
41 | } | ||
42 | |||
43 | a | ||
44 | { | ||
45 | color: black; | ||
46 | /* les liens déjà cliqués restent noirs */ | ||
47 | } | ||
48 | |||
49 | a:hover /* liens survolés par la souris */ | ||
50 | { | ||
51 | color: #004F00; | ||
52 | } | ||
53 | |||
54 | .lien:hover | ||
55 | { | ||
56 | font-weight: bold; | ||
57 | } | ||
58 | |||
59 | /* En-tête. */ | ||
60 | header | ||
61 | { | ||
62 | background-color: white; | ||
63 | display: flex; | ||
64 | flex-direction: column; | ||
65 | align-items: center; | ||
66 | margin-bottom: 20px; | ||
67 | } | ||
68 | |||
69 | header div, header p | ||
70 | { | ||
71 | margin-top: 40px; | ||
72 | } | ||
73 | |||
74 | #logohaut | ||
75 | { | ||
76 | width: 200px; | ||
77 | } | ||
78 | |||
79 | #logotitre | ||
80 | { | ||
81 | height: 90px; | ||
82 | } | ||
83 | |||
84 | /* Menu de navigation. */ | ||
85 | nav | ||
86 | { | ||
87 | position: fixed; | ||
88 | z-index: 2; /* pour être dessus des prestations */ | ||
89 | text-align: center; | ||
90 | } | ||
91 | |||
92 | nav a | ||
93 | { | ||
94 | display: inline-block; /* menu horizontal */ | ||
95 | border: 2px #008100 solid; | ||
96 | border-radius: 12px; | ||
97 | padding: 3px; | ||
98 | margin: 2px; | ||
99 | background-color: #F4F02D; | ||
100 | font-size: 110%; | ||
101 | text-decoration: none; | ||
102 | } | ||
103 | |||
104 | /* "vous êtes ici" */ | ||
105 | #actuelle | ||
106 | { | ||
107 | color: #004F00; | ||
108 | border: 3px #004F00 solid; | ||
109 | } | ||
110 | |||
111 | /* Corps de page. */ | ||
112 | section | ||
113 | { | ||
114 | display: flex; | ||
115 | align-items: center; | ||
116 | } | ||
117 | |||
118 | aside | ||
119 | { | ||
120 | width: 174px; /* équivalent à la photo qui fait 170 de large plus la bordure de 2 pixels */ | ||
121 | display: flex; | ||
122 | flex-direction: column; | ||
123 | align-items: center; | ||
124 | } | ||
125 | |||
126 | aside p | ||
127 | { | ||
128 | margin: 0; | ||
129 | } | ||
130 | |||
131 | article | ||
132 | { | ||
133 | margin-left: 20px; | ||
134 | } | ||
135 | |||
136 | #description | ||
137 | { | ||
138 | margin: 0; | ||
139 | font-size: 110%; | ||
140 | } | ||
141 | |||
142 | .photo | ||
143 | { | ||
144 | border: 2px #008100 solid; | ||
145 | border-radius: 10px; | ||
146 | } | ||
147 | |||
148 | /* nuage de liens */ | ||
149 | section | ||
150 | { | ||
151 | display: flex; | ||
152 | } | ||
153 | |||
154 | #prestations div | ||
155 | { | ||
156 | width: 100%; | ||
157 | display: flex; | ||
158 | flex-wrap: wrap; | ||
159 | justify-content: space-around; | ||
160 | margin: 20px 30px; | ||
161 | padding: 10px; | ||
162 | border: 2px #008100 solid; | ||
163 | border-radius: 12px; | ||
164 | background-color: #F4F02D; | ||
165 | } | ||
166 | |||
167 | h3 | ||
168 | { | ||
169 | margin: 10px; | ||
170 | border: 2px #008100 solid; | ||
171 | border-radius: 12px; | ||
172 | padding: 3px; | ||
173 | text-align: center; | ||
174 | font-size: 100%; | ||
175 | background-color: white; | ||
176 | } | ||
177 | |||
178 | h3 a | ||
179 | { | ||
180 | text-decoration: none; | ||
181 | } | ||
182 | |||
183 | table | ||
184 | { | ||
185 | margin: 10px; | ||
186 | max-width: 470px; | ||
187 | /* fusionner les bordures */ | ||
188 | border-collapse: collapse; | ||
189 | } | ||
190 | |||
191 | caption span | ||
192 | { | ||
193 | font-size: 110%; | ||
194 | text-decoration: underline; | ||
195 | } | ||
196 | |||
197 | caption i | ||
198 | { | ||
199 | font-size: 90%; | ||
200 | } | ||
201 | |||
202 | td | ||
203 | { | ||
204 | |||
205 | border: 1px black solid; | ||
206 | } | ||
207 | |||
208 | pre | ||
209 | { | ||
210 | font-family: sans-serif; | ||
211 | font-size: 90%; | ||
212 | white-space: pre-wrap; | ||
213 | margin: 0 20px; | ||
214 | padding: 10px; | ||
215 | border: 2px #004F00 dotted; | ||
216 | border-radius: 10px; | ||
217 | } | ||
218 | |||
219 | a img | ||
220 | { | ||
221 | border: none; | ||
222 | /* retire la bordure bleue sur certains navigateurs */ | ||
223 | } | ||
224 | |||
225 | .parties | ||
226 | { | ||
227 | margin: 10px 0 15px 0; | ||
228 | } | ||
229 | |||
230 | /* lien fixe en bas */ | ||
231 | footer | ||
232 | { | ||
233 | display: flex; | ||
234 | flex-direction: column; | ||
235 | align-items: center; | ||
236 | } | ||
237 | |||
238 | footer h1 | ||
239 | { | ||
240 | position: fixed; | ||
241 | bottom: 0; | ||
242 | margin: 2px; /* de 5 par défaut */ | ||
243 | text-align: center; | ||
244 | } | ||
245 | footer a | ||
246 | { | ||
247 | text-decoration: none; | ||
248 | } | ||
249 | |||
250 | /* remplacement du logo titre qui est trop large */ | ||
251 | @media screen and (min-width: 500px) | ||
252 | { | ||
253 | #logohaut | ||
254 | { | ||
255 | display: none; | ||
256 | } | ||
257 | } | ||
258 | |||
259 | @media screen and (max-width: 500px) | ||
260 | { | ||
261 | #logotitre | ||
262 | { | ||
263 | display: none; | ||
264 | } | ||
265 | } | ||
266 | |||
267 | /* design responsive */ | ||
268 | @media screen and (max-width: 750px) | ||
269 | { | ||
270 | section | ||
271 | { | ||
272 | display: flex; | ||
273 | flex-direction: column; | ||
274 | } | ||
275 | |||
276 | aside | ||
277 | { | ||
278 | margin: auto; | ||
279 | } | ||
280 | |||
281 | p | ||
282 | { | ||
283 | margin: 3px; | ||
284 | } | ||
285 | |||
286 | #prestations div /* à cause du menu sur deux lignes */ | ||
287 | { | ||
288 | margin-top: 74px; | ||
289 | } | ||
290 | } | ||
291 | |||
292 | @media screen and (max-width: 710px) | ||
293 | { | ||
294 | header div, header p | ||
295 | { | ||
296 | margin-top: 76px; | ||
297 | } | ||
298 | |||
299 | nav a | ||
300 | { | ||
301 | font-size: 100%; | ||
302 | } | ||
303 | |||
304 | h1 | ||
305 | { | ||
306 | font-size: 110%; | ||
307 | } | ||
308 | } | ||
diff --git a/refuser_indexation.txt b/refuser_indexation.txt new file mode 100644 index 0000000..eddc0b9 --- /dev/null +++ b/refuser_indexation.txt | |||
@@ -0,0 +1,6 @@ | |||
1 | Certains fichiers ne doivent pas être indexés par les moteurs de recherche. | ||
2 | |||
3 | Cette ligne a été ajoutée dans: | ||
4 | stats.php | ||
5 | |||
6 | <meta name="robots" content="noindex" > | ||
diff --git a/stats.php b/stats.php new file mode 100644 index 0000000..a69849d --- /dev/null +++ b/stats.php | |||
@@ -0,0 +1,90 @@ | |||
1 | <?php | ||
2 | try | ||
3 | { | ||
4 | $base = new PDO('mysql:host=localhost;dbname=ordipolo;charset=utf8', 'root', 'qsdfgh'); | ||
5 | } | ||
6 | catch (Exception $e) | ||
7 | { | ||
8 | die('Erreur : ' . $e->getMessage()); | ||
9 | } | ||
10 | ?> | ||
11 | <!DOCTYPE html> | ||
12 | <html lang="fr" > | ||
13 | <head> | ||
14 | <meta charset="utf-8" /> | ||
15 | <title>visites du site</title> | ||
16 | <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" /> | ||
17 | <link rel="icon" type="image/png" href="images/favicon.png" > | ||
18 | <link rel="stylesheet" href="ordipolo.css" /> | ||
19 | <meta name="robots" content="noindex" > | ||
20 | <style> | ||
21 | th, td | ||
22 | { | ||
23 | padding: 2px; | ||
24 | border-collapse: collapse; | ||
25 | font-size: 85%; | ||
26 | } | ||
27 | .user_agent | ||
28 | { | ||
29 | min-width: 500px; | ||
30 | } | ||
31 | </style> | ||
32 | </head> | ||
33 | |||
34 | <body> | ||
35 | <div id="bloc_page" > | ||
36 | <header> | ||
37 | <?php $actuelle = ""; ?> | ||
38 | <?php include ("menu.php"); ?> | ||
39 | |||
40 | <p><a href="index.php" > | ||
41 | <img id="logohaut" src="images/logo.png" alt="ordipolo" /> | ||
42 | <img id="logotitre" src="images/ordipolo.png" alt="ordipolo" /></a></p> | ||
43 | </header> | ||
44 | <!-- compteur --> | ||
45 | <table border="1" > | ||
46 | <caption>Compteur de visites</caption> | ||
47 | <tr> | ||
48 | <th>Visiteurs</th> | ||
49 | <!-- <th>Bots</th> --> | ||
50 | </tr> | ||
51 | <tr> | ||
52 | <?php | ||
53 | $reponse = $base->query('SELECT visiteurs FROM compteur'); | ||
54 | $nombre = $reponse->fetch(); | ||
55 | echo ('<td>' . $nombre['visiteurs'] . '</td>'); | ||
56 | |||
57 | //~ $reponse = $base->query('SELECT bots FROM compteur'); | ||
58 | //~ $nombre = $reponse->fetch(); | ||
59 | //~ echo ('<td>' . $nombre['bots'] . '</td>'); | ||
60 | ?> | ||
61 | </tr> | ||
62 | </table> | ||
63 | |||
64 | <!-- détail des enregistrements --> | ||
65 | <table border="1" > | ||
66 | <caption><br/>Visiteurs</caption> | ||
67 | |||
68 | <tr> | ||
69 | <th>IP</th> | ||
70 | <th>Hôte</th> | ||
71 | <th class="user_agent">User_agent</th> | ||
72 | <th>Date</th> | ||
73 | <th>Nombre de pages</th> | ||
74 | </tr> | ||
75 | |||
76 | <?php | ||
77 | $reponse = $base->query('SELECT ip, hote, user_agent, DATE_FORMAT(date, \'%d/%m/%Y\') AS date_, nb_pages FROM visites'); | ||
78 | while ($donnees = $reponse->fetch()) | ||
79 | { | ||
80 | echo ('<tr><td>' . $donnees['ip'] . '</td>'); | ||
81 | echo ('<td>' . $donnees['hote'] . '</td>'); | ||
82 | echo ('<td class="user_agent">' . $donnees['user_agent'] . '</td>'); | ||
83 | echo ('<td>' . $donnees['date_'] . '</td>'); | ||
84 | echo ('<td>' . $donnees['nb_pages'] . '</td></tr>'); | ||
85 | } | ||
86 | ?> | ||
87 | </table> | ||
88 | </div> | ||
89 | <body> | ||
90 | </html> | ||
diff --git a/visites.php b/visites.php new file mode 100644 index 0000000..c9b77fb --- /dev/null +++ b/visites.php | |||
@@ -0,0 +1,84 @@ | |||
1 | <?php | ||
2 | session_start(); | ||
3 | |||
4 | try | ||
5 | { | ||
6 | // create database | ||
7 | $Db = new PDO('mysql:host=localhost;charset=utf8', 'root', 'qsdfgh'); | ||
8 | $db_name = 'ordipolo'; | ||
9 | $Db->exec('CREATE DATABASE IF NOT EXISTS ' . $db_name . ';'); | ||
10 | unset($Db); | ||
11 | |||
12 | // connexion | ||
13 | $Db = new PDO('mysql:host=localhost;dbname=ordipolo;charset=utf8', 'root', 'qsdfgh'); | ||
14 | |||
15 | // create tables | ||
16 | $Db->query('CREATE TABLE IF NOT EXISTS visites (id INT PRIMARY KEY AUTO_INCREMENT, ip VARCHAR(30), hote VARCHAR(255), user_agent TEXT, date DATE, nb_pages INT);'); | ||
17 | //$Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT, bots INT);'); | ||
18 | $Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT);'); | ||
19 | |||
20 | // initialiser table compteur avec des 0 si la table est vide | ||
21 | if(!$Db->query('SELECT * FROM compteur')->fetch()) | ||
22 | { | ||
23 | $Db->query('INSERT INTO `compteur` VALUES (0);'); | ||
24 | } | ||
25 | } | ||
26 | catch (Exception $e) | ||
27 | { | ||
28 | die('Erreur : ' . $e->getMessage()); | ||
29 | } | ||
30 | |||
31 | |||
32 | // variables | ||
33 | $ip = $_SERVER['REMOTE_ADDR']; // IP | ||
34 | $hote = gethostbyaddr($ip); // nom d'hôte si possible | ||
35 | date_default_timezone_set ('Europe/Paris'); // configure le décalage horaire sur Europe/Paris | ||
36 | $user = $_SERVER['HTTP_USER_AGENT']; // infos sur le client (navigateur, OS), attention aux menteurs | ||
37 | $user = mb_strtolower($user); // minuscules pour strpos() | ||
38 | $date = date('Y-m-d'); // date formatée | ||
39 | |||
40 | // script recherchant le pays | ||
41 | // la commande whois nécessite le paquet whois (debian) ou bind-tools (archlinux) | ||
42 | // on récupère la ligne (ou les lignes) indiquant le pays avec grep (-i sert à ignorer la casse) | ||
43 | $country = strtolower(shell_exec("whois " . $ip . " | grep -i country | cut -d: -f2 | sed -e ' s/\ //g'")); | ||
44 | |||
45 | |||
46 | function incrementerTableCompteur($Db, $field) | ||
47 | { | ||
48 | $nombre = $Db->query('SELECT ' . $field . ' FROM compteur')->fetch(); | ||
49 | if(!$nombre){$nombre = [0];} // tableau d'une seule case | ||
50 | $nombre[0] += 1; | ||
51 | |||
52 | $requete = $Db->prepare('UPDATE compteur SET ' . $field . ' = :nombre'); | ||
53 | $requete->execute(array('nombre' => $nombre[0])); | ||
54 | } | ||
55 | |||
56 | // MAJ de la base | ||
57 | if(isset($_SESSION['id_visiteur'])) // pages suivantes | ||
58 | { | ||
59 | $requete = $Db->prepare("UPDATE visites SET nb_pages = nb_pages + 1 WHERE id = :id"); | ||
60 | |||
61 | $requete->execute(array( | ||
62 | ':id' => $_SESSION['id_visiteur'])); | ||
63 | } | ||
64 | else // première page visitée dans la session | ||
65 | { | ||
66 | $requete = $Db->prepare(" | ||
67 | INSERT INTO visites (ip, hote, user_agent, date, nb_pages) | ||
68 | VALUES (:ip, :hote, :user_agent, :date, 1)"); | ||
69 | // si la visite est déjà enregistrée, ajoute +1 au nombre de pages | ||
70 | |||
71 | $requete->execute(array( | ||
72 | ':ip' => $ip, | ||
73 | ':hote' => $hote, | ||
74 | ':user_agent' => $user, | ||
75 | ':date' => $date)); | ||
76 | |||
77 | $_SESSION['id_visiteur'] = $Db->lastInsertId(); | ||
78 | |||
79 | // compte visiteurs + 1 | ||
80 | incrementerTableCompteur($Db, 'visiteurs'); | ||
81 | } | ||
82 | |||
83 | echo "visite enregistrée!"; | ||
84 | ?> | ||