File manager - Edit - /home/webapp69.cm.in.th/u69319090049/portfolio/submit_contact.php
Back
<?php /** * Submit Contact Form Handler * Handles database insertion and shows a modern results screen. */ // Database Configuration $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "portfolio_db"; // Initialize status variables $status = "error"; $status_title = "เกิดข้อผิดพลาด"; $status_message = "ไม่สามารถประมวลผลข้อมูลการติดต่อของคุณได้ในขณะนี้"; // Check if form is submitted via POST if ($_SERVER["REQUEST_METHOD"] == "POST") { // 1. Sanitize input data to prevent XSS $name = isset($_POST['name']) ? htmlspecialchars(strip_tags(trim($_POST['name']))) : ''; $email = isset($_POST['email']) ? filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL) : ''; $phone = isset($_POST['phone']) ? htmlspecialchars(strip_tags(trim($_POST['phone']))) : ''; $message = isset($_POST['message']) ? htmlspecialchars(strip_tags(trim($_POST['message']))) : ''; // 2. Validate required inputs if (empty($name) || empty($email) || empty($message)) { $status_message = "กรุณากรอกข้อมูลที่จำเป็นให้ครบถ้วน (ชื่อ, อีเมล, และข้อความ)"; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $status_message = "รูปแบบอีเมลไม่ถูกต้อง กรุณาตรวจสอบอีกครั้ง"; } else { try { // 3. Connect to MySQL Server (Create database if not exists) $conn = new mysqli($db_host, $db_user, $db_pass); if ($conn->connect_error) { throw new Exception("Connection failed: " . $conn->connect_error); } // Auto-create database if not exists $create_db_query = "CREATE DATABASE IF NOT EXISTS `$db_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; $conn->query($create_db_query); // Select the database $conn->select_db($db_name); // Auto-create table messages if not exists $create_table_query = "CREATE TABLE IF NOT EXISTS `messages` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(100) NOT NULL, `email` VARCHAR(100) NOT NULL, `phone` VARCHAR(20) DEFAULT NULL, `message` TEXT NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"; $conn->query($create_table_query); // 4. Insert data using prepared statements $stmt = $conn->prepare("INSERT INTO `messages` (`name`, `email`, `phone`, `message`) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $name, $email, $phone, $message); if ($stmt->execute()) { $status = "success"; $status_title = "ส่งข้อความสำเร็จ!"; $status_message = "ขอบคุณสำหรับการติดต่อ คุณนัฐปธาน ได้รับข้อความของคุณแล้วและจะติดต่อกลับโดยเร็วที่สุด"; } else { throw new Exception("Execution failed: " . $stmt->error); } // Close database resources $stmt->close(); $conn->close(); } catch (Exception $e) { // Fallback: log error and show informative message error_log("Database Error: " . $e->getMessage()); $status_message = "มีข้อผิดพลาดทางเทคนิคในการเชื่อมต่อระบบฐานข้อมูล กรุณาลองใหม่อีกครั้งในภายหลัง"; } } } else { $status_message = "ไม่ได้รับอนุญาตให้เข้าถึงหน้านี้โดยตรง"; } ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php echo $status_title; ?> | Natpathan Portfolio</title> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> .result-wrapper { min-height: 100vh; display: flex; justify-content: center; align-items: center; background-color: var(--bg-main); padding: 2rem; } .result-card { max-width: 500px; width: 100%; text-align: center; padding: 3rem 2rem; } .result-icon { width: 80px; height: 80px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 2.5rem; margin: 0 auto 2rem; } .result-icon.success { background: rgba(34, 197, 94, 0.1); color: #22c55e; border: 2px solid rgba(34, 197, 94, 0.2); box-shadow: 0 0 20px rgba(34, 197, 94, 0.2); } .result-icon.error { background: rgba(239, 68, 68, 0.1); color: #ef4444; border: 2px solid rgba(239, 68, 68, 0.2); box-shadow: 0 0 20px rgba(239, 68, 68, 0.2); } .result-title { font-size: 2rem; margin-bottom: 1rem; } .result-desc { color: var(--text-secondary); margin-bottom: 2rem; font-size: 1.05rem; } .countdown-text { font-size: 0.85rem; color: var(--text-secondary); margin-top: 1.5rem; } .countdown-num { color: var(--color-accent); font-weight: 700; } </style> </head> <body> <div class="result-wrapper"> <div class="result-card glass-card"> <div class="result-icon <?php echo $status; ?>"> <?php if ($status == "success"): ?> <i class="fa-solid fa-circle-check"></i> <?php else: ?> <i class="fa-solid fa-circle-xmark"></i> <?php endif; ?> </div> <h1 class="result-title <?php echo ($status == 'success') ? '' : 'text-gradient'; ?>" style="<?php echo ($status == 'success') ? 'color: #22c55e;' : ''; ?>"> <?php echo $status_title; ?> </h1> <p class="result-desc"> <?php echo $status_message; ?> </p> <a href="index.html" class="btn btn-primary"> <i class="fa-solid fa-arrow-left"></i> กลับสู่หน้าแรก </a> <div class="countdown-text"> ระบบจะนำทางกลับสู่หน้าแรกโดยอัตโนมัติภายใน <span id="countdown" class="countdown-num">5</span> วินาที </div> </div> </div> <script> let seconds = 5; const countdownEl = document.getElementById('countdown'); const interval = setInterval(() => { seconds--; countdownEl.innerText = seconds; if (seconds <= 0) { clearInterval(interval); window.location.href = "index.html"; } }, 1000); </script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.3 |
proxy
|
phpinfo
|
Settings