אימות שדות קלט בטופס בעזרת PHP וג'אווה סקריפט

אימות שדות קלט מטופס הוא נושא סבוך! הסיבה היא ש… כל שדה דורש התייחסות אחרת וכל טופס מכיל שדות אחרים! בנוסף, חשוב לנו לרוב רק לוודא את המידע בשדות שהם שדות חובה בטופס. במאמר זה נעבור על מספר שיטות לאמת מידע בסיסי כמו טלפון, אימייל, כתובת אתר, ולהחיל אימות מידע בסיסי על שדות אחרים.

טופס לדוגמה

וידוא ערך אשר התקבל משדה Select

* נבדוק את השדות "בחר נושא" ואת השדה "אמצעי לקבלת מבוקשך"

הערכים אשר מתקבלים מהטופס המוצג למעלה נראים כך בקוד:

	$topic			= $_POST['msg_topic'];
	$sname			= $_POST['sender_name'];
	$pmobile		= $_POST['sender_premobile'];
	$bmobile		= $_POST['sender_mobile'];
	$opphone		= $_POST['other_prephone'];
	$obphone		= $_POST['other_phone'];
	$caridnum		= $_POST['car_idnum'];
	$message		= $_POST['message_body'];
	$cmethod		= $_POST['contactme_by'];

פונקציה אחת לניקוי ואבטחה

במקום לכתוב קוד עבור כל שדה קלט בנפרד אנו נשתמש בפונקציה אחת כדי לנקות את כולן (אבל אחד אחד). יש ברשת האינטרנט המון פונקציות מעולות שעושות את זה בשבילנו. הנה פונקציה שכתבתי מזמן ובה אני משתמש כדי לנקות ולאבטח שדות קלט ברמה סבירה.

function cleanInput($string, $strip_tags = false, $allowed_tags = "") { 
    if($strip_tags) {
        $string = strip_tags($string, $allowed_tags . "<b>");
    }

    if(stripos($string, "script") !== false) { 
        $clnstring = str_replace("script","scr<b></b>ipt", htmlentities($string, ENT_QUOTES)); 
    } else { 
        $clnstring = htmlentities($string, ENT_QUOTES); 
    } 

    return $clnstring;
}
רוצה להבין מה קורה בפונקציה? לחצו כאן
// מצהירים על פונקציה עם מספר משתנים
function cleanInput($string, $strip_tags = false, $allowed_tags = "") { 

	// אם הוגדר להסיר תגי HTML 
    if($strip_tags) {
		// ניקוי תגי HTML ממחרוזת טקסט
        $string = strip_tags($string, $allowed_tags . "<b>");
    }

	// אם בתוך המחרוזת הושתל תג סקריפט
    if(stripos($string, "script") !== false) { 
		// החלף את התג הסקריפט במשהו בטוח יותר
        $clnstring = str_replace("script","scr<b></b>ipt", htmlentities($string, ENT_QUOTES)); 
    } else { 
		// ניקוי תווי HTML שונים
        $clnstring = htmlentities($string, ENT_QUOTES); 
    } 

    return $clnstring;
}

נחיל את פונקציית האבטחה של המשתנים שאנו קולטים:

	$topic			= cleanInput($_POST['msg_topic'], true);
	$sname			= cleanInput($_POST['sender_name'], true);
	$pmobile		= cleanInput($_POST['sender_premobile'], true);
	$bmobile		= cleanInput($_POST['sender_mobile'], true);
	$opphone		= cleanInput($_POST['other_prephone'], true);
	$obphone		= cleanInput($_POST['other_phone'], true);
	$caridnum		= cleanInput($_POST['car_idnum'], true);
	$message		= cleanInput($_POST['message_body'], true);
	$cmethod		= cleanInput($_POST['contactme_by'], true);

לצעד הבא: אימות שדות

קודם כל נוודא שהשדות הנדרשים מכילים ערך

אנו נתחיל עם בדיקה ראשונית של שדות הקלט… ראשית נוודא כי שדות החובה / השדות הנדרשים נבחרו או מולאו (בהתאם לסוג שדה הקלט). נעשה זאת בעזרת סדרת התניות. בPHP כאשר משתמשים בסימן קריאה אנו אומרים למעשה "אם לא" קיים משתנה / אין בו ערך.

	$topic			= cleanInput($_POST['msg_topic'], true);		// שדה חובה
	$sname			= cleanInput($_POST['sender_name'], true);		// שדה חובה
	$pmobile		= cleanInput($_POST['sender_premobile'], true);	// שדה חובה
	$bmobile		= cleanInput($_POST['sender_mobile'], true);	// שדה חובה
	$opphone		= cleanInput($_POST['other_prephone'], true);
	$obphone		= cleanInput($_POST['other_phone'], true);
	$caridnum		= cleanInput($_POST['car_idnum'], true);		// שדה חובה
	$message		= cleanInput($_POST['message_body'], true);
	$cmethod		= cleanInput($_POST['contactme_by'], true);		// שדה חובה
	
	
	if(!$topic) {
		echo 'אנא בחרו נושא פנייה';
	}
	elseif(!$sname) {
		echo 'אנא מלאו את שם מלא';
	}
	elseif(!$bmobile || !$pmobile) {
		echo 'יש להכניס מספר טלפון נייד';
	}
	elseif(!$caridnum) {
		echo 'שכחתם להכניס את מספר הרכב שלכם.';
	}
	elseif(!$cmethod) {
		echo 'אנא בחרו דרך בה נוכל ליצור אתכם קשר';
	}
	else {
		// אם הכל בסדר שלח את הטופס
	}

ולקינוח נבדוק את אורך השדות הנדרשים!

אנו עושים זאת בעזרת פקודה אשר נקראת mb_strlen. מדובר על פקודה אשר עוזרת לנו לספר תווים (גם בעברית!) וכך אנו יכולים להתנות אורך מחרוזת טקסט מינימלי. אנו בודקים למעשה כך: אם (אורך-מחרוזת (קטן מ) < 7) תחזיר התראה.

	$topic			= cleanInput($_POST['msg_topic'], true);		// שדה חובה
	$sname			= cleanInput($_POST['sender_name'], true);		// שדה חובה
	$pmobile		= cleanInput($_POST['sender_premobile'], true);	// שדה חובה
	$bmobile		= cleanInput($_POST['sender_mobile'], true);	// שדה חובה
	$opphone		= cleanInput($_POST['other_prephone'], true);
	$obphone		= cleanInput($_POST['other_phone'], true);
	$caridnum		= cleanInput($_POST['car_idnum'], true);		// שדה חובה
	$message		= cleanInput($_POST['message_body'], true);
	$cmethod		= cleanInput($_POST['contactme_by'], true);		// שדה חובה
	
	
	if(!$topic) {
		echo 'אנא בחרו נושא פנייה';
	}
	elseif(!$sname || mb_strlen($mb_strlen) < 3) {
		echo 'אנא מלאו את שם מלא';
	}
	elseif(!$bmobile || !$pmobile) {
		echo 'יש להכניס מספר טלפון נייד';
	}
	elseif(mb_strlen($pmobile) < 7) {
		echo 'אנא הכניסו מספר נייד תקני';
	}
	elseif(!$caridnum) {
		echo 'שכחתם להכניס את מספר הרכב שלכם.';
	}
	elseif(mb_strlen($caridnum) < 7) {
		echo 'מספר הרכב שהכנסתם קצר מידי.';
	}
	elseif(!$cmethod) {
		echo 'אנא בחרו דרך בה נוכל ליצור אתכם קשר';
	}
	else {
		// אם הכל בסדר שלח את הטופס
	}

סיימנו (בערך)

ממש לקראת הסוף הבנתי שהטופס בו בחרתי לא מכיל שדה של כתובת אימייל ואימות כתובת אימייל היא בהחלט בקשה נדרשת בקרב מבקרי האתר אז הנה כמה פונקציות טובות לאימות כתובת אימייל.

תשובה לתגובה

עוד מדריך הגיע אל סיומו. המאמר הזה שיצא כמו מיני-מדריך הוא תגובה לשאלה של ויקטור – "איך אפשר להוסיף לקוד מערכת אשר תבדוק נתונים"… אז אל תחסכו תגובות, שאלות ובקשות. אנחנו ננסה לעזור. מקווה שאהבתם, נפגש במאמר הבא.

  • אהבתם? שתפו!