php / שיעור 3 / אימות פשוט
שיעור 3
אימות פשוט
תארו לעצמכם שיש לנו מאגר מידע מוכן פרוש לפנינו, ועכשיו אנחנו מבקשים
ממשתמשים, מידע אותו נרצה בסופו של דבר להכניס למאגר. תארו לכם גם שיש
שדה במאגר המידע שלכם שמחכה לתשומה נומרית, כמו מחיר. לסיום תארו לכם
שהמערכת שלכם קורסת בגלל שאיזה אידיוט החליט להכניס לאותו שדה מידע
טקסט. MySQL לא רוצה לראות טקסט בחלק ההוא של ביטוי ה-SQL שלכם -
והיא מתלוננת קשות.
מה לעשות? הגיע הזמן לאמת.
אימות משמעו פשוט שאנחנו בוחנים פיסת מידע, על פי רוב מטופס HTML,
ובודקים שהיא מתאימה לתבנית מסוימת (זה יכול להיות כל דבר החל מוידוא
שלא נשלח שדה ריק ועד וידוא שבשדות נומריים יופיעו ספרות בלבד או שבשדה
e-mail יופיע הסימן @).
אימות יכול להתבצע בצד השרת או בצד הלקוח. ב-PHP משתמשים לאימות צד-שרת,
בעוד JavaScript או שפות תכנות מבוססות-לקוח אחרות יכולות לדאוג לאימות
צד-לקוח. המאמר הזה הוא על PHP, ולכן אנו הולכים להתמקד בצד השרת של
הדברים. אבל אם אתם מחפשים סקריפטי אימות צד-לקוח מוכנים, בדקו בספריית
הקוד של webmonkey.
בואי נתעלם לרגע ממאגר המידע שלנו ונתרכז באימות PHP. אם תרצו, תוכלו
להוסיף שדות למאגר המשתמשים שלכם בצורה פשוטה יחסית ע"י שימוש בביטוי
ALTER של MySQL - כל זאת אם אתם רוצים להתחייב לערכים שאנחנו
עומדים לאמת.
ישנן פונקציות PHP רבות בהן אנו יכולים להשתמש על מנת לאמת את המידע
שלנו, חלקן פשוטות וחלקן מורכבות ביותר. פונקציה פשוטה בה אנחנו יכולים
להשתמש היא ()strlen, שאומרת לנו את האורך של כל משתנה.
פונקציה מורכבת יותר יכולה להיות ()ereg, שעושה שימוש בהתמודדות מלאה
עם ביטויים רגילים עבור שאילתות מורכבות. אני לא רוצה לרדת לעומקו הסבוך
של regex כאן מאחר וספרים שלמים כבר נכתבו על הנושא, אבל אני אספק לכם
מספר דוגמאות בעמוד הבא.
בואו נתחיל עם דוגמא פשוטה. נבדוק האם משתנה קיים או לא.
<html>
<body>
<?php
if ($submit) {
if (!$first || !$last) {
$error = "Sorry! You didn't fill in all the fields!";
} else {
// process form
echo "Thank You!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
FIELD 1: <input type="text" name="first" value="<?php
echo $first ?>"><br>
FIELD 2: <input type="text" name="last" value="<?php
echo $last ?>"><br>
<input type="Submit" name="submit" value="Enter
Information">
</form>
<?php
} // end if
</body>
</html>
המפתחות לסקריפט הזה הם ביטויי תנאי משולבים. הראשון בודק האם נלחץ כפתור
ה- submit. אם כן, הוא ממשיך ובודק ששני המשתנים first$ ו- $last קיימים.
משמעות הסימן || היא "או" ומשמעות הסימן ! היא "לא". היינו יכולים גם לשכתב
את הביטוי כך: "אם first$ לא קיים או ש- last$ לא קיים הגדר את $error לדברים
הבאים".
עכשיו, בואו נרחיב את זה קצת ונבדוק האם למחרוזת יש אורך מסוים. זה יכול להיות
אידיאלי עבור סיסמאות, מאחר ואתם לא רוצים שאיזה משתמש עצלן יגדיר לעצמו
סיסמא בת תו אחד או שניים. תעדיפו שהיא תהיה באורך של, נאמר, שישה תווים
או יותר.
הפונקציה שתבצע את זה היא, כמו שאתם כבר יודעים, ()strlen. היא פשוט תחזיר
מספר שווה למספר התווים במשתנה הנבדק. הנה, אני משנה את הסקריפט למעלה
כדי שיבדוק את אורכי first$ ו- last$.
<html>
<body>
<?php
if ($submit) {
if (strlen($first) < 6 || strlen($last) < 6) {
$error = "Sorry! You didn't fill in all the fields!";
} else {
/ / process form
echo "Thank You!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF
?>">
FIELD 1: <input type="text" name="first" value="<?php
echo $first ?>"><br>
FIELD 2: <input type="text" name="last" value="<?php
echo $last ?>"><br>
<input type="Submit" name="submit" value="Enter
Information">
</form>
<?php
} // end if
?>
</body>
</html>
הריצו את הסקריפט הזה, נסו להכניס סיסמא עם ששה תווים או פחות וראו מה
קורה. זה פשוט אך עם זאת מאוד אפקטיבי.
עמוד הבא: אימות לא כל כך פשוט >>
|
|
|
|