0) { $message = 'Email already exists.'; $message_type = 'danger'; } else { // Update profile $update_sql = "UPDATE users SET full_name = ?, email = ?, contact_number = ?, address = ?, updated_at = NOW() WHERE id = ?"; $update_stmt = mysqli_prepare($conn, $update_sql); mysqli_stmt_bind_param($update_stmt, 'ssssi', $full_name, $email, $contact_number, $address, $user_id); if (mysqli_stmt_execute($update_stmt)) { // Update session data $_SESSION['full_name'] = $full_name; $_SESSION['email'] = $email; $message = 'Profile updated!'; $message_type = 'success'; // Refresh user data $user['full_name'] = $full_name; $user['email'] = $email; $user['contact_number'] = $contact_number; $user['address'] = $address; } else { $message = 'Error updating profile.'; $message_type = 'danger'; } mysqli_stmt_close($update_stmt); } mysqli_stmt_close($check_stmt); } } // Handle password change elseif (isset($_POST['change_password'])) { $current_password = trim($_POST['current_password']); $new_password = trim($_POST['new_password']); $confirm_password = trim($_POST['confirm_password']); // Validate passwords if (empty($current_password) || empty($new_password) || empty($confirm_password)) { $message = 'All fields required.'; $message_type = 'danger'; } elseif ($new_password !== $confirm_password) { $message = 'Passwords do not match.'; $message_type = 'danger'; } elseif (strlen($new_password) < 6) { $message = 'Password must be at least 6 characters.'; $message_type = 'danger'; } else { // Verify current password $check_sql = "SELECT password FROM users WHERE id = ?"; $check_stmt = mysqli_prepare($conn, $check_sql); mysqli_stmt_bind_param($check_stmt, 'i', $user_id); mysqli_stmt_execute($check_stmt); mysqli_stmt_bind_result($check_stmt, $hashed_password); mysqli_stmt_fetch($check_stmt); mysqli_stmt_close($check_stmt); if (!password_verify($current_password, $hashed_password)) { $message = 'Current password incorrect.'; $message_type = 'danger'; } else { // Hash new password $new_hashed_password = password_hash($new_password, PASSWORD_DEFAULT); // Update password $update_sql = "UPDATE users SET password = ?, updated_at = NOW() WHERE id = ?"; $update_stmt = mysqli_prepare($conn, $update_sql); mysqli_stmt_bind_param($update_stmt, 'si', $new_hashed_password, $user_id); if (mysqli_stmt_execute($update_stmt)) { $message = 'Password changed!'; $message_type = 'success'; } else { $message = 'Error changing password.'; $message_type = 'danger'; } mysqli_stmt_close($update_stmt); } } } // Handle profile picture upload elseif (isset($_FILES['profile_picture']) && $_FILES['profile_picture']['error'] == 0) { $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif']; $max_file_size = 2 * 1024 * 1024; // 2MB $file_name = $_FILES['profile_picture']['name']; $file_tmp = $_FILES['profile_picture']['tmp_name']; $file_size = $_FILES['profile_picture']['size']; // Get file extension $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); // Validate file if (!in_array($file_ext, $allowed_extensions)) { $message = 'Only JPG, PNG, GIF allowed.'; $message_type = 'danger'; } elseif ($file_size > $max_file_size) { $message = 'File must be < 2MB.'; $message_type = 'danger'; } else { // Create uploads directory $upload_dir = '../uploads/profile_pictures/'; if (!file_exists($upload_dir)) { mkdir($upload_dir, 0777, true); } // Generate unique filename $new_filename = 'profile_' . $user_id . '_' . time() . '.' . $file_ext; $destination = $upload_dir . $new_filename; // Delete old profile picture if (!empty($user['profile_picture'])) { $old_file = '../' . $user['profile_picture']; if (file_exists($old_file)) { @unlink($old_file); } } // Move uploaded file if (move_uploaded_file($file_tmp, $destination)) { // Update database $relative_path = 'uploads/profile_pictures/' . $new_filename; $update_sql = "UPDATE users SET profile_picture = ?, updated_at = NOW() WHERE id = ?"; $update_stmt = mysqli_prepare($conn, $update_sql); mysqli_stmt_bind_param($update_stmt, 'si', $relative_path, $user_id); if (mysqli_stmt_execute($update_stmt)) { $user['profile_picture'] = $relative_path; $_SESSION['profile_picture'] = $relative_path; $message = 'Profile picture updated!'; $message_type = 'success'; } else { $message = 'Error updating picture.'; $message_type = 'danger'; } mysqli_stmt_close($update_stmt); } else { $message = 'Error uploading file.'; $message_type = 'danger'; } } } } include '../includes/header.php'; ?>
// Toggle password visibility function togglePassword(fieldId) { const field = document.getElementById(fieldId); const type = field.getAttribute("type") === "password" ? "text" : "password"; field.setAttribute("type", type); } // Image preview document.getElementById("profile_picture").addEventListener("change", function(e) { const preview = document.getElementById("imagePreview"); const previewContainer = document.querySelector(".preview-container"); if (this.files && this.files[0]) { const reader = new FileReader(); reader.onload = function(e) { preview.src = e.target.result; previewContainer.style.display = "block"; } reader.readAsDataURL(this.files[0]); } else { previewContainer.style.display = "none"; } }); // Form validation document.getElementById("profileForm").addEventListener("submit", function(e) { const email = this.querySelector("input[name=\'email\']").value; if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) { e.preventDefault(); alert("Invalid email address."); return false; } return true; }); document.getElementById("passwordForm").addEventListener("submit", function(e) { const newPassword = this.querySelector("input[name=\'new_password\']").value; const confirmPassword = this.querySelector("input[name=\'confirm_password\']").value; if (newPassword.length < 6) { e.preventDefault(); alert("Password must be at least 6 characters."); return false; } if (newPassword !== confirmPassword) { e.preventDefault(); alert("Passwords do not match."); return false; } return true; }); '; include '../includes/footer.php'; ?>