PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC] ); } catch(PDOException $e) { echo json_encode(['success' => false, 'message' => 'Database connection failed']); exit; } // Get data $data = []; if (!empty($_POST)) { $data = $_POST; } else { $rawInput = file_get_contents('php://input'); if (!empty($rawInput)) { $jsonData = json_decode($rawInput, true); if ($jsonData) $data = $jsonData; else parse_str($rawInput, $data); } } if (empty($data) && !empty($_GET)) { $data = $_GET; } if (empty($data)) { echo json_encode(['success' => false, 'message' => 'No data received']); exit; } $email = trim($data['email'] ?? ''); $password = $data['password'] ?? ''; if (empty($email) || empty($password)) { echo json_encode(['success' => false, 'message' => 'Please enter both email and password']); exit; } try { // Find user $stmt = $conn->prepare("SELECT id, first_name, last_name, email, phone, company, password FROM client_users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch(); if (!$user) { echo json_encode(['success' => false, 'message' => 'Invalid email or password']); exit; } // Verify password if (!password_verify($password, $user['password'])) { echo json_encode(['success' => false, 'message' => 'Invalid email or password']); exit; } // Generate token $token = bin2hex(random_bytes(32)); // Update last login $stmt = $conn->prepare("UPDATE client_users SET auth_token = ?, last_login = NOW() WHERE id = ?"); $stmt->execute([$token, $user['id']]); // Remove password from response unset($user['password']); echo json_encode([ 'success' => true, 'message' => 'Login successful', 'token' => $token, 'user' => $user ]); } catch(PDOException $e) { echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]); }