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

הוסטס - פורום אחסון האתרים הגדול בישראל (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=21801)

nevo 14-05-06 13:34

[PHP - מאמר( מתחילים )] בעיית מספרים ושליפת נתונים!
 
זהו המאמר הראשון שלי, מקווה שתרחיבו את הידע שלכם איתו.
הרבה פעמים באתר שלך או אחר, משתמשים בשיטת GET כדי לשלוף רשומה מהמסד לדוגמא:
קוד:

page.php?Id=528 .
עכשיו אתרים לוקחים את ערך הId ואיתו שולפים את אותה רשומה מהמסד אבל עכשיו אם נחשוב על זה, נגיע למסקנה מאוד חכמה, שאם יש משתמש חכמולוג שישנה את הId ל
קוד:

page.php?Id=blah -
תיהיה לנו בעיה בשליפה מהמסד וזה יחזיר שגיאה או יותר חמור SQL INJECTION
לדוגמא
קוד:

page.php?Id='or'"
לחשוב כמה בעיות זה יכול לעשות, אני חשבתי על שיטה קטנה שיכולה בקלות לפתור את הבעיה והיא
INTVAL.
מהו INTVAL - זוהיא פונקציה שמחזירה את הערך המספרי ממחרוזת.
עכשיו אם לדוגמא יש לנו מחרוזת
קוד:

blah blah blah
אז הערך המספרי שלה הוא 0.
והינה הקוד:
PHP קוד:

$val = (isset( $_GET['Id']))?intval$_GET['Id']):0

עכשיו למה דווקא 0, הרי זה ברור שלא יכול להיות Id של 0 במסד!
אז בעזרת mysql_num_rows אפשר להוציא פלט שהרשומה לא נמצאה!

אני מקווה שמאמר קטן זה הרחיב לכם את המידע!
שלכם, נבו.

wildeye 14-05-06 13:59

יפה על ההשקעה קבל ח"ח

Alon.R 14-05-06 14:04

LOL
הרבה יותר פשוט להשתמש ב is_numeric - בדיקה אם מידע מסויים הוא מספר.

exciter 14-05-06 14:08

לא פשוט יותר לבדוק כמה שורות חזרו לך ואז להגיב לפי זה ?
הרי גם אם יכניסו נגיד ID של 100 ועדיין לא הגעת למספר 100 אז יהיה תקלה.
אז עדיף לספור מספר שורות שנמצאו עם אותו ID, אם המספר שווה ל 1 שיציג את מה שבא לך, או לא, שיציג הודעת שגיאה.

nevo 14-05-06 14:11

ציטוט:

נכתב במקור על ידי exciter
לא פשוט יותר לבדוק כמה שורות חזרו לך ואז להגיב לפי זה ?
הרי גם אם יכניסו נגיד ID של 100 ועדיין לא הגעת למספר 100 אז יהיה תקלה.
אז עדיף לספור מספר שורות שנמצאו עם אותו ID, אם המספר שווה ל 1 שיציג את מה שבא לך, או לא, שיציג הודעת שגיאה.

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

-VladK- 14-05-06 14:26

מאמר נחמד! קבל ח"ח על ההשקעה

miniature 14-05-06 16:33

אפשר לפתור חלק מבעיות ההזרקה עם הוספת סלאשים וכדו'.

ח"ח על המדריך.

בניה 14-05-06 16:51

ב"ה


אם רוצים לנטר נסיונות פריצה אז אפשר להשתמש בis_numeric אם לא אז אפשר פשוט לעשות:
קוד:

(int)$_GET['id']
זה פשוט מתעלם מהבעיות שרוצים לגרום לנו.

BlueNosE 14-05-06 17:03

מסכים עם בניה, אבל הכי פשוט-
is_int וזהו.
גם 4e34.3 זה num, אבל לא int..
וזה גם בודק אם הוא רימה

nevo 14-05-06 17:44

ציטוט:

נכתב במקור על ידי BlueNosE
מסכים עם בניה, אבל הכי פשוט-
is_int וזהו.
גם 4e34.3 זה num, אבל לא int..
וזה גם בודק אם הוא רימה

כן אבל לא יכול להיות ID כזה במסד.


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

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