PHP Academy · Lektion

Teknikker til inputvalidering

Kontrollér obligatoriske felter, typer og længder, før De behandler dataene.

Lektion 3 af 413 trin

Teknikker til inputvalidering er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvorfor validere inddata?

Stol aldrig på data fra brugere. Validering sikrer, at dataene opfylder dine krav, før du behandler dem. Det forhindrer:

  • Databasefejl på grund af forkerte typer
  • Fejl i forretningslogikken på grund af uventede værdier
  • Sikkerhedssårbarheder på grund af skadelige inddata

Kontrol af obligatoriske felter

Kontrollér, at obligatoriske felter ikke er tomme efter fjernelse af indledende og afsluttende mellemrum:

<?php
$errors = [];
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');

if (empty($name)) {
    $errors['name'] = 'Name is required';
}
if (empty($email)) {
    $errors['email'] = 'Email is required';
}

if (!empty($errors)) {
    // show errors
}

Typevalidering

Validér, at værdierne har den forventede type, før du bruger dem:

<?php
$age = $_POST['age'] ?? '';

// Method 1: filter_var
$validAge = filter_var($age, FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 120]
]);

if ($validAge === false) {
    $errors[] = 'Age must be a number between 1 and 120';
}

Validering af e-mailadresser

Validér e-mailadresser med FILTER_VALIDATE_EMAIL-filteret:

<?php
$email = trim($_POST['email'] ?? '');

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Invalid email address';
}

// Also check domain has MX record for extra validation
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    [$user, $domain] = explode('@', $email);
    if (!checkdnsrr($domain, 'MX')) {
        $errors[] = 'Email domain not found';
    }
}

Validering af strenglængde

Håndhæv minimums- og maksimumslængder for strenge:

<?php
$username = trim($_POST['username'] ?? '');

$len = mb_strlen($username);

if ($len < 3) {
    $errors[] = 'Username must be at least 3 characters';
}
if ($len > 30) {
    $errors[] = 'Username must be at most 30 characters';
}

Validering med tilladelsesliste

Validér mod et tilladt sæt værdier (en tilladelsesliste) i stedet for at forsøge at blokere forkerte værdier:

<?php
$allowedRoles  = ['admin', 'editor', 'viewer'];
$allowedSorts  = ['name', 'date', 'price'];

$role = $_POST['role'] ?? '';
$sort = $_GET['sort']  ?? 'name';

if (!in_array($role, $allowedRoles, true)) {
    $errors[] = 'Invalid role selected';
}

// Default to 'name' if sort value invalid
if (!in_array($sort, $allowedSorts, true)) {
    $sort = 'name';
}

Validering af URL'er og IP-adresser

Validér URL'er og IP-adresser med indbyggede filtre:

<?php
$url = $_POST['website'] ?? '';
$ip  = $_POST['ip']      ?? '';

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    $errors[] = 'Invalid URL';
}

if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    $errors[] = 'Invalid IPv4 address';
}

Mønstervalidering med regulære udtryk

Brug preg_match() til validering af brugerdefinerede formater:

<?php
$phone = preg_replace('/[^0-9+]/', '', $_POST['phone'] ?? '');

// Validate format: +1234567890
if (!preg_match('/^\+?[0-9]{7,15}$/', $phone)) {
    $errors[] = 'Invalid phone number';
}

// Validate date format YYYY-MM-DD
$date = $_POST['date'] ?? '';
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
    $errors[] = 'Date must be in YYYY-MM-DD format';
}

Datovalidering

Validér, at en streng repræsenterer en gyldig kalenderdato:

<?php
function isValidDate(string $date, string $format = 'Y-m-d'): bool {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) === $date;
}

var_dump(isValidDate('2024-02-29'));  // true (2024 is leap year)
var_dump(isValidDate('2023-02-29'));  // false (not a leap year)
var_dump(isValidDate('2024-13-01'));  // false (no month 13)

Validering af filuploads

Validér uploadede filer efter type, størrelse og fejlkode:

<?php
$file = $_FILES['photo'] ?? null;

if ($file) {
    if ($file['error'] !== UPLOAD_ERR_OK) {
        $errors[] = 'Upload failed with error: ' . $file['error'];
    } elseif ($file['size'] > 2 * 1024 * 1024) {
        $errors[] = 'File exceeds 2MB limit';
    } elseif (!in_array(mime_content_type($file['tmp_name']), ['image/jpeg', 'image/png'])) {
        $errors[] = 'Only JPEG and PNG files allowed';
    }
}

Visning af valideringsfejl

Vis fejl direkte ved siden af formularfelterne, og bevar de værdier, brugeren har indtastet:

<?php
// Preserve entered values:
$name = htmlspecialchars($_POST['name'] ?? '');
?>
<form method="POST">
    <input name="name" value="<?= $name ?>">
    <?php if (isset($errors['name'])): ?>
        <p class="error"><?= htmlspecialchars($errors['name']) ?></p>
    <?php endif; ?>
    <button type="submit">Submit</button>
</form>

Hurtigt tjek

Hvad vil det sige at bruge en tilladelsesliste til validering?

Opsummering: Validering af inddata

Bedste praksis for validering:

  • Kontrollér obligatoriske felter efter trim()
  • Brug filter_var() til validering af type og format
  • Angiv tilladte værdier med en tilladelsesliste ved hjælp af in_array()
  • Brug preg_match() til brugerdefinerede mønstre
  • Validér filuploads: fejlkode, størrelse og MIME-type
  • Bevar brugerens inddata, når formularer med fejl vises igen
Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Teknikker til inputvalidering” gratis?

Ja — hele teksten til “Teknikker til inputvalidering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Teknikker til inputvalidering”?

Kontrollér obligatoriske felter, typer og længder, før De behandler dataene. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Teknikker til inputvalidering”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. GET vs. POST: Hvornår skal De bruge hvad
  2. Læsning af formulardata med superglobals
  3. Teknikker til inputvalidering
  4. Sanering af brugerinput
← Tilbage til PHP Academy