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>


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


עמוד הבא: אימות לא כל כך פשוט >>




הקדמה
שעור 1
הקדמה PHP ו-MySQL
התקנת MySQL
התקנת PHP
הסקריפט הראשון שלכם
הטענת מאגר המידע
שליפה מחדש
שעור 2
לולאות
השארו מיודעים
קישור חכם
הוסיפו כמה טפסים
הפיכת טפסים לחכמים
כולם יחד
שעור 3
מקום לכל דבר
אימות פשוט >
אמות לא כל כך פשוט
פונקציות
עדות לאום