| <?php |
| |
| session_start(); |
| header('Content-Type: application/json'); |
|
|
| |
| $host = '127.0.0.1'; |
| $dbname = 'jmdb'; |
| $username = 'root'; |
| $password = 'YourStrongPassword123'; |
|
|
| try { |
| $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); |
| $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
| } catch(PDOException $e) { |
| echo json_encode(['success' => false, 'message' => 'Database connection failed']); |
| exit; |
| } |
|
|
| if (!isset($_SESSION['user_id'])) { |
| echo json_encode(['success' => false, 'message' => 'Not authenticated']); |
| exit; |
| } |
|
|
| $user_id = $_SESSION['user_id']; |
| $action = $_POST['action'] ?? ''; |
|
|
| switch($action) { |
| case 'get_profile': |
| getProfile($pdo, $user_id); |
| break; |
| case 'update_profile': |
| updateProfile($pdo, $user_id); |
| break; |
| case 'change_password': |
| changePassword($pdo, $user_id); |
| break; |
| case 'get_activity': |
| getActivity($pdo, $user_id); |
| break; |
| default: |
| echo json_encode(['success' => false, 'message' => 'Invalid action']); |
| } |
|
|
| function getProfile($pdo, $user_id) { |
| $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); |
| $stmt->execute([$user_id]); |
| $user = $stmt->fetch(PDO::FETCH_ASSOC); |
| |
| if ($user) { |
| unset($user['password_hash']); |
| echo json_encode(['success' => true, 'profile' => $user]); |
| } else { |
| echo json_encode(['success' => false, 'message' => 'User not found']); |
| } |
| } |
|
|
| function updateProfile($pdo, $user_id) { |
| $allowed_fields = ['first_name', 'last_name', 'email', 'phone_number', 'country_code']; |
| $updates = []; |
| $params = []; |
| |
| foreach ($allowed_fields as $field) { |
| if (isset($_POST[$field]) && $_POST[$field] !== '') { |
| $updates[] = "$field = ?"; |
| $params[] = $_POST[$field]; |
| } |
| } |
| |
| if (empty($updates)) { |
| echo json_encode(['success' => false, 'message' => 'No valid fields to update']); |
| return; |
| } |
| |
| $params[] = $user_id; |
| $sql = "UPDATE users SET " . implode(', ', $updates) . ", last_updated = CURRENT_TIMESTAMP WHERE id = ?"; |
| |
| try { |
| $stmt = $pdo->prepare($sql); |
| $stmt->execute($params); |
| |
| |
| logActivity($pdo, $user_id, 'profile_update', 'Updated profile information'); |
| |
| echo json_encode(['success' => true, 'message' => 'Profile updated successfully']); |
| } catch (PDOException $e) { |
| echo json_encode(['success' => false, 'message' => 'Update failed: ' . $e->getMessage()]); |
| } |
| } |
|
|
| function changePassword($pdo, $user_id) { |
| if (!isset($_POST['current_password']) || !isset($_POST['new_password']) || !isset($_POST['confirm_password'])) { |
| echo json_encode(['success' => false, 'message' => 'All password fields are required']); |
| return; |
| } |
| |
| $current_password = $_POST['current_password']; |
| $new_password = $_POST['new_password']; |
| $confirm_password = $_POST['confirm_password']; |
| |
| if ($new_password !== $confirm_password) { |
| echo json_encode(['success' => false, 'message' => 'New passwords do not match']); |
| return; |
| } |
| |
| if (strlen($new_password) < 6) { |
| echo json_encode(['success' => false, 'message' => 'Password must be at least 6 characters long']); |
| return; |
| } |
| |
| |
| $stmt = $pdo->prepare("SELECT password_hash FROM users WHERE id = ?"); |
| $stmt->execute([$user_id]); |
| $user = $stmt->fetch(PDO::FETCH_ASSOC); |
| |
| if (!$user || !password_verify($current_password, $user['password_hash'])) { |
| echo json_encode(['success' => false, 'message' => 'Current password is incorrect']); |
| return; |
| } |
| |
| |
| $new_password_hash = password_hash($new_password, PASSWORD_DEFAULT); |
| $stmt = $pdo->prepare("UPDATE users SET password_hash = ?, last_updated = CURRENT_TIMESTAMP WHERE id = ?"); |
| $stmt->execute([$new_password_hash, $user_id]); |
| |
| |
| logActivity($pdo, $user_id, 'password_change', 'Changed account password'); |
| |
| echo json_encode(['success' => true, 'message' => 'Password updated successfully']); |
| } |
|
|
| function getActivity($pdo, $user_id) { |
| $stmt = $pdo->prepare("SELECT activity_type, description, timestamp FROM user_activity WHERE user_id = ? ORDER BY timestamp DESC LIMIT 50"); |
| $stmt->execute([$user_id]); |
| $activities = $stmt->fetchAll(PDO::FETCH_ASSOC); |
| |
| echo json_encode(['success' => true, 'activities' => $activities]); |
| } |
|
|
| function logActivity($pdo, $user_id, $type, $description) { |
| $ip_address = $_SERVER['REMOTE_ADDR']; |
| $stmt = $pdo->prepare("INSERT INTO user_activity (user_id, activity_type, description, ip_address) VALUES (?, ?, ?, ?)"); |
| $stmt->execute([$user_id, $type, $description, $ip_address]); |
| } |
| ?> |