Маягт баталгаажуулалт
Хэрэглэгч маягтад юу ч оруулж болно — хоосон утга, буруу формат, маш урт текст, эсвэл хортой код хүртэл. Тиймээс маягтаас ирсэн өгөгдлийг хэзээ ч итгэлгүйгээр боловсруулж, заавал шалгах хэрэгтэй. Энэ шалгалтыг validation гэж нэрлэдэг. Сайн validation нь хэрэглэгчид ойлгомжтой алдааны мэдэгдэл өгөж, програмыг аюулгүй байлгадаг.
Үндсэн шалгалтууд
Хамгийн түгээмэл шалгалтуудыг харцгаая:
<?php
$алдаанууд = [];
$ner = '';
$имэйл = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Хоосон эсэхийг шалгах
$ner = trim($_POST['ner'] ?? '');
if ($ner === '') {
$алдаанууд[] = "Нэр заавал шаардлагатай.";
}
// Урт шалгах
if (strlen($ner) > 50) {
$алдаанууд[] = "Нэр 50 тэмдэгтээс ихгүй байна.";
}
// И-мэйл формат шалгах
$имэйл = trim($_POST['имэйл'] ?? '');
if (!filter_var($имэйл, FILTER_VALIDATE_EMAIL)) {
$алдаанууд[] = "И-мэйл хаяг буруу байна.";
}
}
?>
trim() нь мөрийн эхэн, эцэс дэх хоосон зайг арилгадаг — хэрэглэгч санамсаргүйгээр зай оруулсан байж болно. ?? нь утга байхгүй тохиолдолд '' буцаана.
Алдааг хуудсанд харуулах
Validation-н үр дүнг хэрэглэгчид тодорхой харуулах нь маш чухал. Алдааны жагсаалт болон маягтыг нэг хуудсанд нэгтгэж бичнэ:
<?php
$алдаанууд = [];
$амжилт = false;
$ner = '';
$нас = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$ner = trim($_POST['ner'] ?? '');
$нас = trim($_POST['нас'] ?? '');
if ($ner === '') {
$алдаанууд[] = "Нэр хоосон байна.";
}
if ($нас === '' || !is_numeric($нас)) {
$алдаанууд[] = "Нас буруу байна.";
} elseif ((int)$нас < 1 || (int)$нас > 120) {
$алдаанууд[] = "Нас 1–120 хооронд байх ёстой.";
}
if (empty($алдаанууд)) {
$амжилт = true;
}
}
?>
<!DOCTYPE html>
<html>
<body>
<?php if ($амжилт): ?>
<p>Амжилттай бүртгэгдлээ! Сайн уу, <?php echo htmlspecialchars($ner); ?>!</p>
<?php endif; ?>
<?php if (!empty($алдаанууд)): ?>
<ul>
<?php foreach ($алдаанууд as $алдаа): ?>
<li><?php echo $алдаа; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<form action="" method="post">
<input type="text" name="ner" value="<?php echo htmlspecialchars($ner); ?>" placeholder="Нэр">
<input type="number" name="нас" value="<?php echo htmlspecialchars($нас); ?>" placeholder="Нас">
<button type="submit">Бүртгүүлэх</button>
</form>
</body>
</html>
value="<?php echo htmlspecialchars($ner); ?>" — алдаатай үед хэрэглэгчийн оруулсан утгыг хадгалж харуулдаг тул дахин бүгдийг бичихгүй.
filter_var — PHP-н суурилагдсан шалгагч
PHP-д filter_var() функц нь олон төрлийн шалгалт хийдэг:
<?php
$имэйл = "test@example.com";
$url = "https://example.com";
$тоо = "42";
// И-мэйл шалгах
if (filter_var($имэйл, FILTER_VALIDATE_EMAIL)) {
echo "И-мэйл зөв байна.";
}
// URL шалгах
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo "URL зөв байна.";
}
// Тоо шалгах (бүхэл тоо)
if (filter_var($тоо, FILTER_VALIDATE_INT)) {
echo "Бүхэл тоо байна.";
}
// Тоо шалгах (мужтай)
$сонголт = filter_var($тоо, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 100]
]);
if ($сонголт !== false) {
echo "1-ээс 100 хооронд байна.";
}
?>
filter_var() нь false буцаавал шалгалт тэнцсэнгүй гэсэн үг.
Өгөгдлийг цэвэрлэх (sanitization)
Validation нь өгөгдөл зөв эсэхийг шалгадаг бол sanitization нь өгөгдлөөс хортой хэсгийг арилгадаг. Хоёулаа зэрэг хэрэглэх нь шилдэг дадал:
<?php
$утга = "<script>alert('xss')</script> Болд";
// HTML тэгийг арилгана
$цэвэр = strip_tags($утга);
echo $цэвэр; // Болд
// Тусгай тэмдэгтүүдийг HTML entity болгоно
$аюулгүй = htmlspecialchars($утга);
echo $аюулгүй; // <script>alert('xss')</script> Болд
// Filter ашиглан цэвэрлэх
$имэйл = filter_var(" test@EXAMPLE.com ", FILTER_SANITIZE_EMAIL);
echo $имэйл; // test@EXAMPLE.com
?>
Гаралтыг хэвлэхдээ htmlspecialchars() — оруултыг хадгалахдаа strip_tags() — гэж ойлговол хялбар.
Дараагийн хичээлд:
Файл унших, бичих үйлдлүүдийг судална. fopen(), fread(), fwrite(), file_get_contents() функцуудаар текст файлтай хэрхэн ажиллахыг жишээгээр үзнэ.s