Teknik Pengesahan Input
Semak medan wajib, jenis dan panjang sebelum pemprosesan.
Teknik Pengesahan Input ialah pelajaran PHP Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran PHP Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Mengapa Mengesahkan Masukan?
Jangan sekali-kali mempercayai data daripada pengguna. Pengesahan memastikan data memenuhi keperluan anda sebelum anda memprosesnya. Pengesahan menghalang:
- Ralat pangkalan data akibat jenis yang salah
- Ralat logik perniagaan akibat nilai yang tidak dijangka
- Kerentanan keselamatan akibat masukan berniat jahat
Semakan Medan Wajib
Semak bahawa medan wajib tidak kosong selepas ruang kosong dibuang:
<?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
}Pengesahan Jenis
Sahkan bahawa nilai mempunyai jenis yang dijangka sebelum menggunakannya:
<?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';
}Pengesahan E-mel
Sahkan alamat e-mel dengan penapis 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';
}
}Pengesahan Panjang Rentetan
Tetapkan panjang minimum dan maksimum rentetan:
<?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';
}Pengesahan Senarai Dibenarkan
Sahkan nilai berdasarkan set nilai yang dibenarkan (senarai dibenarkan), bukannya cuba menyekat nilai yang tidak baik:
<?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';
}Pengesahan URL dan IP
Sahkan URL dan alamat IP dengan penapis terbina dalam:
<?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';
}Pengesahan Corak dengan Ungkapan Nalar
Gunakan preg_match() untuk pengesahan format tersuai:
<?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';
}Pengesahan Tarikh
Sahkan bahawa rentetan mewakili tarikh kalendar yang sah:
<?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)Pengesahan Muat Naik Fail
Sahkan fail yang dimuat naik berdasarkan jenis, saiz dan kod ralat:
<?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';
}
}Memaparkan Ralat Pengesahan
Paparkan ralat sebaris di sebelah medan borang dan kekalkan nilai yang dimasukkan oleh pengguna:
<?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>Semakan Ringkas
Apakah pendekatan senarai dibenarkan dalam pengesahan?
Imbas Kembali: Pengesahan Masukan
Amalan terbaik pengesahan:
- Semak medan wajib selepas trim()
- Gunakan
filter_var()untuk pengesahan jenis dan format - Benarkan nilai yang diluluskan dengan
in_array() - Gunakan
preg_match()untuk corak tersuai - Sahkan muat naik fail: kod ralat, saiz dan jenis MIME
- Kekalkan masukan pengguna apabila borang dipaparkan semula bersama ralat
Pelajari PHP dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 49
- Pelajaran
- 195
Soalan Lazim
Adakah pelajaran “Teknik Pengesahan Input” percuma?
Ya — teks penuh “Teknik Pengesahan Input” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus PHP Academy, tingkat taraf kepada CoddyKit PRO. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Teknik Pengesahan Input”?
Semak medan wajib, jenis dan panjang sebelum pemprosesan. Anda berlatih PHP Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan PHP Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran PHP Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Teknik Pengesahan Input” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- GET berbanding POST: Bila Hendak Menggunakan Setiap Satu
- Membaca Data Borang dengan Superglobal
- Teknik Pengesahan Input
- Membersihkan Input Pengguna