אם אתה רוצה לעשות משתנה מסויים רק מספר, זה לא אפשרי בPHP.
מה שכן, עם PHP 5 אתה יכול לסנן טיפוסים של ארגומנטים שמועברים לפונקציה, זה נקרא Type Hinting. למשל אתה יכול ליצור פונקציה כזו:
קוד:
function setNum(int $value)
{
global $num ;
$num = $value ;
}
אם תנסה להעביר לפונקציה ארגומנט שהוא לא מטיפוס מספר שלם (int / integer ), אז PHP יציג שגיאה. דוגמא:
קוד:
setNum("this is a string") // תחזיר שגיאה
$int = 32;
setNum($int) // לא תחזיר שגיאה, כי הארגומנט הוא 32 (טיפוס = מספר שלם = int / integer )
בקשר להגנה נגד הזרקות, הפיתרון הוא מאוד פשוט. לפני שאתה מוציא לפועל את השאילתת SQL שלך, אתה צריך להעביר את השאילתה דרך פונקציה מסויימת שמטפלת בתווים אסורים בתוך השאילתה. ( הפונקציה בסה"כ מוסיפה לוכסן אחורי "\" לפני התו האסור)
דרך נוספת לעשות את זה, זה עם ביטויים רגולרים, אבל אין צורך. בכל מקרה, בPHP לפי מה שאני בדקתי בכמה ממשקים של מסדי נתונים, יש בהם פונקציה שנקראת real_escape_string, למשל, אם אתה משתמש במסד mysql, אתה יכול להשתמש בפונקציה הזאתי
שתטפל בתווים האסורים בשאילתה שלך:
mysql_real_escape_string.
אם אתה רוצה פונקציה שלא דורשת עבודה עם מסד נתונים מסויים, אז קח:
קוד:
function real_escape_string( $unescaped_string ) {
$prepend_chars = array() ;
$prepend_chars["\\\x00"] = "\x00" ;
$prepend_chars["\\\n"] = "\n" ;
$prepend_chars["\\\r"] = "\r" ;
$prepend_chars['\\\''] = "'" ;
$prepend_chars["\\\""] = "\"" ;
$prepend_chars["\\\x1a"] = "\x1a" ;
foreach( $prepend_chars as $key => $value )
$unescaped_string = str_replace( $value, $key, $unescaped_string ) ;
return $unescaped_string ;
}
אם לא הבנת משהו תגיד לי.