What are some best practices for handling user input in PHP scripts related to transferring points between users?

When handling user input in PHP scripts related to transferring points between users, it is important to validate and sanitize the input to prevent potential security vulnerabilities such as SQL injection or cross-site scripting attacks. Additionally, it is crucial to verify that the user initiating the transfer has sufficient points to transfer and that the recipient user exists in the system.

// Validate and sanitize user input
$sender_id = filter_var($_POST['sender_id'], FILTER_SANITIZE_NUMBER_INT);
$recipient_id = filter_var($_POST['recipient_id'], FILTER_SANITIZE_NUMBER_INT);
$points = filter_var($_POST['points'], FILTER_SANITIZE_NUMBER_INT);

// Check if sender has sufficient points
if ($sender_points < $points) {
    echo "Insufficient points to transfer.";
    exit;
}

// Check if recipient user exists
$recipient_user = getUserById($recipient_id);
if (!$recipient_user) {
    echo "Recipient user not found.";
    exit;
}

// Proceed with the points transfer
$sender_points -= $points;
$recipient_points += $points;

// Update points in the database
updateUserPoints($sender_id, $sender_points);
updateUserPoints($recipient_id, $recipient_points);

echo "Points transferred successfully.";