What are the best practices for handling user input validation and sanitization in PHP forms to prevent potential vulnerabilities?

User input validation and sanitization are crucial in PHP forms to prevent potential vulnerabilities such as SQL injection, cross-site scripting (XSS), and other security threats. Best practices include validating user input to ensure it meets expected formats and ranges, sanitizing input to remove potentially harmful characters, and using prepared statements or parameterized queries to prevent SQL injection attacks.

// Example of validating and sanitizing user input in a PHP form

$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';

// Validate input
if(empty($name) || empty($email)) {
    die('Please fill out all required fields.');
}

// Sanitize input
$name = filter_var($name, FILTER_SANITIZE_STRING);
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Use prepared statements to prevent SQL injection
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$stmt->execute();