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') {