From 7463cc698a0c21dc161db76fca8674229892d0da Mon Sep 17 00:00:00 2001 From: Kyllian Auguste Date: Wed, 13 May 2026 19:59:13 +0200 Subject: [PATCH] Update Less Coms --- SRC/DATA/Structure.sql | 13 +++++++ SRC/contact.php | 78 +++++++++++++++++------------------------- SRC/style.css | 17 ++++++++- 3 files changed, 61 insertions(+), 47 deletions(-) diff --git a/SRC/DATA/Structure.sql b/SRC/DATA/Structure.sql index 7aeabd1..f5ff75b 100644 --- a/SRC/DATA/Structure.sql +++ b/SRC/DATA/Structure.sql @@ -343,3 +343,16 @@ COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; + +-- +-- Structure de la table `CONTACT` +-- +CREATE TABLE `CONTACT` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) NOT NULL, + `objet` varchar(255) NOT NULL, + `demande` text NOT NULL, + `fichier` varchar(255) DEFAULT NULL, + `date_demande` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/SRC/contact.php b/SRC/contact.php index adc56d9..1cebcbb 100644 --- a/SRC/contact.php +++ b/SRC/contact.php @@ -3,24 +3,21 @@ session_start(); $message_status = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $to = 'openplanetsmaps@gmail.com'; $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); $subject = htmlspecialchars($_POST['objet']); $message = htmlspecialchars($_POST['demande']); $has_error = false; - $attachment = ''; + $file_path = null; - // Gestion du fichier uploadé (téléversement) if (isset($_FILES['televersement']) && $_FILES['televersement']['error'] == UPLOAD_ERR_OK) { $file_tmp_name = $_FILES['televersement']['tmp_name']; $file_name = $_FILES['televersement']['name']; $file_size = $_FILES['televersement']['size']; - // Sécurisation : Vérification du type MIME réel et de la taille $file_type = mime_content_type($file_tmp_name); $allowed_types = ['image/jpeg', 'image/png', 'application/pdf']; - $max_size = 5 * 1024 * 1024; // Limite à 5 Mo + $max_size = 5 * 1024 * 1024; if (!in_array($file_type, $allowed_types)) { $message_status = "

Format non autorisé. Seuls les fichiers JPG, PNG et PDF sont acceptés.

"; @@ -29,34 +26,40 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $message_status = "

Le fichier est trop volumineux (maximum 5 Mo).

"; $has_error = true; } else { - $content = file_get_contents($file_tmp_name); - $encoded_content = chunk_split(base64_encode($content)); + $upload_dir = 'UPLOADS/'; + if (!is_dir($upload_dir)) { + mkdir($upload_dir, 0777, true); + } - $attachment = "Content-Type: $file_type; name=\"$file_name\"\r\n"; - $attachment .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n"; - $attachment .= "Content-Transfer-Encoding: base64\r\n\r\n"; - $attachment .= $encoded_content . "\r\n\r\n"; + $safe_file_name = time() . '_' . preg_replace('/[^a-zA-Z0-9.\-_]/', '', $file_name); + $target_path = $upload_dir . $safe_file_name; + + if (move_uploaded_file($file_tmp_name, $target_path)) { + $file_path = $target_path; + } else { + $message_status = "

Erreur lors de la sauvegarde du fichier.

"; + $has_error = true; + } } } if (!$has_error) { - // Générer une frontière (boundary) unique pour séparer le texte de la pièce jointe - $boundary = md5(uniqid(time())); - - $headers = "From: $email\r\nReply-To: $email\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; - - $body = "--$boundary\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n"; - $body .= "Email: $email\nObjet: $subject\n\nDemande:\n$message\r\n\r\n"; - - if (!empty($attachment)) { - $body .= "--$boundary\r\n" . $attachment; - } - $body .= "--$boundary--\r\n"; - - if (@mail($to, $subject, $body, $headers)) { - $message_status = "

Votre message a été envoyé avec succès !

"; - } else { - $message_status = "

Erreur lors de l'envoi du message. Veuillez vérifier la configuration de votre serveur.

"; + try { + $host = '172.22.0.3'; + $dbname = 'OpenPlanetsMaps'; + $db_user = 'root'; + $db_pass = 'admin123'; + + $options = [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_EMULATE_PREPARES => false]; + $pdo = new PDO("mysql:host=$host;port=3306;dbname=$dbname;charset=utf8;protocol=tcp", $db_user, $db_pass, $options); + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $stmt = $pdo->prepare("INSERT INTO CONTACT (email, objet, demande, fichier, date_demande) VALUES (?, ?, ?, ?, NOW())"); + $stmt->execute([$email, $subject, $message, $file_path]); + + $message_status = "

Votre demande a été enregistrée avec succès dans la base de données !

"; + } catch (PDOException $e) { + $message_status = "

Erreur de base de données : " . htmlspecialchars($e->getMessage()) . "

"; } } } @@ -67,28 +70,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { Contact - OpenPlanetsMaps - - +

Contact

-
diff --git a/SRC/style.css b/SRC/style.css index 1976cd0..c6e009c 100755 --- a/SRC/style.css +++ b/SRC/style.css @@ -560,4 +560,19 @@ header h1:hover { animation:glitch .4s steps(1) forwards; } .quiz-btn { min-height:44px; font-size:.8rem; padding:.6rem .75rem; justify-content:center; text-align:center; } #quiz-img-preview.visible { max-height:none; margin-bottom:1rem; text-align:center; } #quiz-img-preview img, #quiz-img-preview video { max-height:160px; width:auto; max-width:100%; margin:0 auto; } -} \ No newline at end of file +} + +body.page-form { background-color: #0f172a; color: #e0e0e0; display: flex; flex-direction: row; justify-content: center; align-items: center; padding: 2rem; min-height: 100vh; overflow-x: auto; } +.admin-box { background-color: #1e293b; padding: 2rem; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.5); width: 100%; max-width: 500px; border: 1px solid #334155; } +.admin-box h1 { color: #00bfff; text-align: center; margin-bottom: 1.5rem; } +.form-group { margin-bottom: 1rem; } +.form-group label { display: block; margin-bottom: 0.5rem; color: #b9bbbe; font-size: 0.9rem; } +.form-group input, .form-group select, .form-group textarea { width: 100%; padding: 0.75rem; background: #0f172a; border: 1px solid #334155; border-radius: 4px; color: white; font-family: inherit; } +.btn-submit { width: 100%; padding: 0.75rem; background-color: #00bfff; color: white; border: none; border-radius: 4px; font-weight: 600; cursor: pointer; margin-top: 1rem; transition: background 0.2s; } +.btn-submit:hover { background-color: #009acd; } +.links { text-align: center; margin-top: 1.5rem; display: flex; flex-direction: column; gap: 0.5rem; } +.links a { color: #94a3b8; text-decoration: none; font-size: 0.9rem; transition: color 0.2s; } +.links a:hover { color: #ffffff; } +input[type="file"] { cursor: pointer; padding: 0.6rem; } +input[type="file"]::file-selector-button { background: #334155; color: white; border: none; padding: 0.5rem 1rem; border-radius: 4px; cursor: pointer; margin-right: 1rem; transition: background 0.2s; } +input[type="file"]::file-selector-button:hover { background: #475569; } \ No newline at end of file