PHP Academy · Oppitunti

Syötteiden validointitekniikat

Tarkistakaa pakolliset kentät, tyypit ja pituudet ennen käsittelyä.

Oppitunti 3/413 vaihetta

Syötteiden validointitekniikat on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Miksi syöte validoidaan?

Älkää koskaan luottako käyttäjiltä saatuihin tietoihin. Validointi varmistaa, että tiedot täyttävät vaatimuksenne ennen kuin käsittelette niitä. Se estää:

  • Tietokantavirheet väärien tyyppien vuoksi
  • Liiketoimintalogiikan virheet odottamattomien arvojen vuoksi
  • Pahantahtoisesta syötteestä johtuvat tietoturva-aukot

Pakollisten kenttien tarkistus

Tarkistakaa, etteivät pakolliset kentät ole tyhjiä välilyöntien poistamisen jälkeen:

<?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
}

Tyypin validointi

Varmistakaa ennen arvojen käyttöä, että ne ovat odotettua tyyppiä:

<?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';
}

Sähköpostiosoitteen validointi

Validoikaa sähköpostiosoitteet suodattimella FILTER_VALIDATE_EMAIL:

<?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';
    }
}

Merkkijonon pituuden validointi

Asettakaa merkkijonoille vähimmäis- ja enimmäispituudet:

<?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';
}

Sallittujen arvojen validointi

Validoikaa arvot sallittujen arvojen luettelon (whitelist) perusteella sen sijaan, että yrittäisitte estää virheellisiä arvoja:

<?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';
}

URL- ja IP-osoitteiden validointi

Validoikaa URL-osoitteet ja IP-osoitteet sisäänrakennetuilla suodattimilla:

<?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';
}

Kuvion validointi säännöllisillä lausekkeilla

Käyttäkää preg_match()-funktiota mukautettujen muotojen validointiin:

<?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';
}

Päivämäärän validointi

Validoikaa, että merkkijono esittää todellista kalenteripäivämäärää:

<?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)

Tiedostojen lähetyksen validointi

Validoikaa lähetetyt tiedostot tyypin, koon ja virhekoodin perusteella:

<?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';
    }
}

Validointivirheiden näyttäminen

Näyttäkää virheet lomakekenttien vieressä ja säilyttäkää käyttäjän syöttämät arvot:

<?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>

Pikatarkistus

Mitä sallittujen arvojen luetteloon perustuva lähestymistapa tarkoittaa validoinnissa?

Kertaus: syötteen validointi

Validoinnin parhaat käytännöt:

  • Tarkistakaa pakolliset kentät trim()-kutsun jälkeen
  • Käyttäkää filter_var()-funktiota tyypin ja muodon validointiin
  • Rajaatkaa sallitut arvot sallittujen arvojen luetteloon in_array()-funktion avulla
  • Käyttäkää preg_match()-funktiota mukautettuihin kuvioihin
  • Validoikaa tiedostojen lähetykset: virhekoodi, koko ja MIME-tyyppi
  • Säilyttäkää käyttäjän syöte, kun lomakkeet näytetään virheiden jälkeen uudelleen
Aloita maksutta

Opi PHP tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
49
Oppitunnit
195

Usein kysytyt kysymykset

Onko oppitunti ”Syötteiden validointitekniikat” ilmainen?

Kyllä – oppitunnin ”Syötteiden validointitekniikat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Syötteiden validointitekniikat”?

Tarkistakaa pakolliset kentät, tyypit ja pituudet ennen käsittelyä. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Syötteiden validointitekniikat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä PHP Academy-oppitunnilla?

Kyllä. Jokainen PHP Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. GET vai POST: milloin kumpaakin käytetään
  2. Lomaketietojen lukeminen superglobaaleilla muuttujilla
  3. Syötteiden validointitekniikat
  4. Käyttäjän syötteiden puhdistaminen
← Takaisin: PHP Academy