View Single Post
ישן 04-08-09, 22:40   # 2
Shillo
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
הודעות: 509

Shillo לא מחובר  

אם אתה רוצה לעשות משתנה מסויים רק מספר, זה לא אפשרי ב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 ;
  	}
אם לא הבנת משהו תגיד לי.

Last edited by Shillo; 04-08-09 at 22:43..
  Reply With Quote