הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] פרסום פונקציה חמודה ביותר... ממליץ להשתמש! (https://hosts.co.il/forums/showthread.php?t=56979)

reXtea 24-11-07 14:30

[PHP] פרסום פונקציה חמודה ביותר... ממליץ להשתמש!
 
שבת שלום לכולם,
אני בונה מערכת דיי מורכבת עם המון עמודים שונים שאמורים להציג תכנים שונים לגמריי,
וכל הזמן אני יושב ומייעל אותה.
בד"כ על מנת לבדוק האם משתנה הוא רק מספרים הייתי מריץ את הפונקציה הבסיסית: is_numeric.

אבל הגעתי למסקנה שבמידה ויש לי כמה משתנים זה דיי מעצבן כל הזמן לעשות בדיקה כזאת מפגרת, אז החלטתי ליצור פונקציה שתייעל את העניין:
PHP קוד:

function ISnumber($vars)
{
   foreach(
explode(";",$vars) as $k => $val)
   {
      if(!
is_numeric($val))
      {
         die(
"ERROR");
      }
      else
      {
         return 
true;
      }
   }
}

ISnumber("id;page;number"); 

זה הפונקציה... לשימושכם החופשי.
הפונקציה לא נבדקה ככה שלא בטוח שהיא עובדת עם השיטה של הexplode אני לא ממש בטוח ב100% שזה יעבוד... אבל נראה לי שכן D:

בכ"מ הרגשתי צורך לפרסם את זה... לדע למה.
תהנו :]

4ior 24-11-07 16:25

ובשביל להכניס את כל המשתנים אתה עושה implode לפונקציה??
זאת פונקציה לא שימושית וגם לא יעילה, מצטער.

Daniel 24-11-07 17:07

עדיף שיהיה INPUT של ARRAY,
explode + implode לוקחים יחסית דיי הרבה משאבים

reXtea 24-11-07 17:17

ציטוט:

נכתב במקור על ידי 4ior (פרסם 582823)
ובשביל להכניס את כל המשתנים אתה עושה implode לפונקציה??
זאת פונקציה לא שימושית וגם לא יעילה, מצטער.

מ"ז להכניס את כל המשתנים? זה בסך הכל עושה בדיקה שמשתנים שאמורים להיות רק מספרים לא יהיו תווים.

והיא מאוד שימושית, ויעילה גם כן... ואממ אם זה לוקח יותר זמן מאשר explode אז באמת עדיף מערך.

-roee- 24-11-07 18:00

ציטוט:

אבל הגעתי למסקנה שבמידה ויש לי כמה משתנים זה דיי מעצבן כל הזמן לעשות בדיקה כזאת מפגרת
מציע לך לעבור על מדריכי אבטחה שונים ואז תבין את היעילות הרבה שאין להחליף אותו בשום דבר זול של הפונקציה is_numeric או intval

Tomer 24-11-07 18:03

PHP קוד:

function checkForNumbers($inputArray,$excludeArray="") {
    foreach (
$inputArray AS $key=>$val) {
        if (!
$excludeArray[$key] && !is_numeric($inputArray[$key])) $inputArray[$key] = intval($inputArray[$val]);
    }


אני מאמין שזו דרך נחמדה ואפשרית לשימוש.

קוד:

$Exclude = array('subject','body');
checkForNumbers($_POST,$Exclude);

המערך Exclude מכיל את הרשימה של משתנים שלא צריכים להבדק. כמובן שאפשר לא להעביר את המערך ובכך לבדוק את כל המערך שניתן (הדוגמא כאן - $_POST)

לפי מה שלמדתי מאנשים מסויימים תמיד עדיף לחסום הכל, ולאפשר דברים מסויימים מאשר לאפשר הכל ולחסום דברים מסויימים.

reXtea 24-11-07 18:10

ציטוט:

נכתב במקור על ידי roeenoy (פרסם 582876)
מציע לך לעבור על מדריכי אבטחה שונים ואז תבין את היעילות הרבה שאין להחליף אותו בשום דבר זול של הפונקציה is_numeric או intval

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

ציטוט:

נכתב במקור על ידי Tomer (פרסם 582877)
PHP קוד:

function checkForNumbers($inputArray,$excludeArray="") {
    foreach (
$inputArray AS $key=>$val) {
        if (!
$excludeArray[$key] && !is_numeric($inputArray[$key])) $inputArray[$key] = intval($inputArray[$val]);
    }


אני מאמין שזו דרך נחמדה ואפשרית לשימוש.

קוד:

$Exclude = array('subject','body');
checkForNumbers($_POST,$Exclude);

המערך Exclude מכיל את הרשימה של משתנים שלא צריכים להבדק.

לפי מה שלמדתי מאנשים מסויימים תמיד עדיף לחסום הכל, ולאפשר דברים מסויימים מאשר לאפשר הכל ולחסום דברים מסויימים.

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


כל הזמנים הם GMT +2. הזמן כעת הוא 08:43.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ