फ़ॉर्म को एक पेशेवर की तरह संभालें: सही HTTP मेथड, इनपुट का कड़ाई से सत्यापन, और सुरक्षित पुनः प्रदर्शन।
इस पाठ को Kodokon में खोलेंएक फ़ॉर्म आपके उपयोगकर्ताओं और आपके PHP कोड के बीच संपर्क का पहला बिंदु है। get मेथड डेटा को URL में रखता है (?q=pizza): किसी खोज या फ़िल्टर के लिए बिल्कुल उपयुक्त, क्योंकि पेज को बुकमार्क किया जा सकता है और साझा किया जा सकता है। post मेथड डेटा को रिक्वेस्ट के बॉडी में ले जाता है: यह वह अनिवार्य मेथड है जब भी रिक्वेस्ट कुछ बदलती है (खाता बनाना, ऑर्डर, हटाना) या संवेदनशील डेटा ले जाती है। PHP प्राप्त वैल्यू को $_GET और $_POST सुपरग्लोबल में संग्रहीत करता है।
<form action="search.php" method="get">
<label for="q">Search</label>
<input id="q" name="q" type="text">
<button type="submit">Search</button>
</form>
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo "<p>You are searching for: " .
htmlspecialchars($query, ENT_QUOTES) . "</p>";
}
?>पेशेवर नियम नंबर एक: आने वाले डेटा पर कभी भरोसा न करें। एक उपयोगकर्ता कुछ भी भेज सकता है, जिसमें आपके फ़ॉर्म के बाहर गढ़ी गई नकली वैल्यू भी शामिल हैं। filter_input() फ़ंक्शन किसी वैल्यू को एक ही चरण में पढ़ता और सत्यापित करता है: यह सत्यापित वैल्यू लौटाता है, यदि वह अमान्य हो तो false, और यदि फ़ील्ड गायब हो तो null - आपके त्रुटि संदेशों में इन तीन स्थितियों को अलग-अलग पहचानना होगा।
<?php
declare(strict_types=1);
$errors = [];
$email = filter_input(
INPUT_POST,
'email',
FILTER_VALIDATE_EMAIL
);
$age = filter_input(
INPUT_POST,
'age',
FILTER_VALIDATE_INT,
['options' => ['min_range' => 18, 'max_range' => 120]]
);
$name = trim((string) ($_POST['name'] ?? ''));
if ($name === '' || mb_strlen($name) > 50) {
$errors[] = "Name required (50 characters max).";
}
if (!is_string($email)) {
$errors[] = "Invalid email address.";
}
if (!is_int($age)) {
$errors[] = "Invalid age (between 18 and 120).";
}
if ($errors === []) {
echo "Registration valid.";
}जब सत्यापन विफल हो, तो खाली फ़ॉर्म वापस न भेजें: उपयोगकर्ता द्वारा टाइप की गई वैल्यू (एक "स्टिकी" फ़ॉर्म) और संबंधित फ़ील्ड के बगल में त्रुटि संदेश फिर से प्रदर्शित करें। हर पुनः प्रदर्शित वैल्यू को htmlspecialchars() से गुज़रना चाहिए: यही वह है जो टैग को निष्क्रिय करता है और स्क्रिप्ट इंजेक्शन को रोकता है।
<?php
$name = trim($_POST['name'] ?? '');
$hasError = isset($_POST['name']) && $name === '';
$safeName = htmlspecialchars($name, ENT_QUOTES);
?>
<form method="post" action="">
<label for="name">Your name</label>
<input id="name" name="name"
value="<?= $safeName ?>">
<?php if ($hasError): ?>
<p>Name is required.</p>
<?php endif; ?>
<button type="submit">Submit</button>
</form>