PHP / Маягт: GET ба POST

Маягт: GET ба POST

Вэб програмчлалын гол зорилгуудын нэг бол хэрэглэгчээс өгөгдөл авах явдал юм. HTML маягт (form) бол үүний хамгийн түгээмэл арга. Маягтаас ирсэн өгөгдлийг PHP $_GET эсвэл $_POST superglobal-аар уншдаг. Энэ хоёрын ялгааг сайн ойлгох нь аюулгүй, найдвартай вэб апп бүтээхэд чухал.

HTML маягт бичих

Маягт нь <form> тэгтэй байдаг. action атрибут нь өгөгдлийг хаашаа илгээхийг, method атрибут нь GET эсвэл POST аргыг заана:

html
<!DOCTYPE html>
<html>
<body>

<form action="process.php" method="post">
    <label>Нэр:</label>
    <input type="text" name="ner" placeholder="Нэрээ оруулна уу">

    <label>Нас:</label>
    <input type="number" name="nas">

    <button type="submit">Илгээх</button>
</form>

</body>
</html>

name атрибут маш чухал — PHP $_POST['ner'] гэж уншихад яг энэ нэрийг хайна.

$_POST аргаар өгөгдөл хүлээн авах

POST арга нь өгөгдлийг HTTP хүсэлтийн биед нуун дамжуулдаг тул нууц мэдээлэл (нууц үг, и-мэйл гэх мэт) илгээхэд тохиромжтой:

php
<?php
// process.php файл

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Утга байгаа эсэхийг шалгана
    if (isset($_POST['ner']) && isset($_POST['nas'])) {
        $ner = $_POST['ner'];
        $nas = $_POST['nas'];

        echo "Сайн уу, " . $ner . "!";
        echo "Таны нас: " . $nas;
    }
}
?>

$_SERVER['REQUEST_METHOD'] === 'POST' шалгалт нь маягтгүйгээр хуудсанд шууд орсон хэрэглэгчийн хувьд алдаа гарахаас сэргийлдэг.

$_GET аргаар өгөгдөл дамжуулах

GET арга нь өгөгдлийг URL-д нээлттэй дамжуулдаг. Хайлт, шүүлтүүр, хуудас дугаарлалт зэрэгт тохиромжтой:

php
<?php
// URL: /search.php?keyword=PHP&page=2

$keyword = '';
$page = 1;

if (isset($_GET['keyword'])) {
    $keyword = $_GET['keyword'];
}

if (isset($_GET['page'])) {
    $page = (int)$_GET['page']; // тоо болгон хөрвүүлнэ
}

echo "Хайлт: " . $keyword;
echo "Хуудас: " . $page;
?>

URL-д иймэрхүү харагдана: search.php?keyword=PHP&page=2 — хэрэглэгч URL-г шууд харж, өөрчилж болно.

Нэг хуудсанд маягт ба боловсруулалт

Маягт болон PHP боловсруулалтыг нэг файлд нэгтгэж болдог. Энэ нь практик дээр маш түгээмэл хэрэглэгддэг:

php
<?php
$мэндчилгээ = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $ner = isset($_POST['ner']) ? $_POST['ner'] : '';
    if ($ner !== '') {
        $мэндчилгээ = "Сайн уу, " . htmlspecialchars($ner) . "!";
    }
}
?>

<!DOCTYPE html>
<html>
<body>

<?php if ($мэндчилгээ): ?>
    <p><?php echo $мэндчилгээ; ?></p>
<?php endif; ?>

<form action="" method="post">
    <input type="text" name="ner" placeholder="Нэрээ оруулна уу">
    <button type="submit">Мэндлэх</button>
</form>

</body>
</html>

action="" гэж хоосон орхивол маягт яг одоогийн URL руу дахин илгээнэ. htmlspecialchars() функц нь XSS халдлагаас хамгаалдаг — гаралтыг хэвлэхдээ үргэлж ашиглах хэрэгтэй.

GET ба POST — хэзээ алийг ашиглах вэ?

| | GET | POST | |---|---|---| | Өгөгдөл хаана | URL-д харагдана | Нуугдмал | | Ашиглах тохиолдол | Хайлт, шүүлтүүр | Нэвтрэх, маягт | | Bookmarkable | Тийм | Үгүй | | Урт хязгаар | ~2000 тэмдэгт | Хязгаргүй |

Дараагийн хичээлд:

Маягтаас ирсэн өгөгдлийг хэрхэн шалгаж, баталгаажуулах (validation) талаар үзнэ. Хоосон утга, буруу формат, хэт урт мөр зэрэг нийтлэг асуудлуудыг хэрхэн зохицуулахыг сурна.