לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 15-10-2009, 19:03
  משתמש זכר phpier phpier אינו מחובר  
 
חבר מתאריך: 11.10.09
הודעות: 12
פונקציה שימושית להעברת נתונים מטופס ל-DB

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


קוד PHP:
 $user_name cleaned_mysql($_POST['username']); 


קוד PHP:
 function cleaned_mysql($value){
        
// get_magic_quotes_gpc() = check whether it's active
            
$magic_quotes_active get_magic_quotes_gpc();
            
// function_exists checks whether mysql_real... exists
            
$new_enough_php_version function_exists("mysql_real_escape_string");
                if (
$new_enough_php_version) {
                
// if magic_quotes... is active, it means that it already add slashes to value. so... strip them and let mysql_real... do the job
                        
if($magic_quotes_active){$value stripslashes($value);}
                        
// mysql_real... does the job anyhow
                    
$value mysql_real_escape_string($value);
                    }else{
                    
// if magic_quotes doesn't exist, then add slashes to $value so it will be prepared to DB
                    
if(!$magic_quotes_active) {$value addslashes($value);}
                    }
                return 
$value;
        } 


מאד שימושית!!!

תהנו
_____________________________________
מטבחי פשטות - עיצוב מטבחים, מטבחים כפריים ו-רהיטים יוקרתיים
משקי ליסינג - פתרונות ליסינג, ליסינג תפעולי, ליסינג מימוני לחברות ועסקים

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 16-10-2009, 09:55
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי phpier שמתחילה ב "פונקציה שימושית להעברת נתונים מטופס ל-DB"

תודה רבה

סידרתי את הקוד המקורי כדי שיהיה נוח לקרוא ולהבין מה קורה:
קוד PHP:
 function cleaned_mysql($value)
{
    
// get_magic_quotes_gpc() = check whether it's active
    
$magic_quotes_active get_magic_quotes_gpc();

    
// function_exists checks whether mysql_real... exists
    
$new_enough_php_version function_exists("mysql_real_escape_string");

        if (
$new_enough_php_version
        {
            
// if magic_quotes... is active, it means that it already add slashes to value. so... strip them and let mysql_real... do the job
            
if($magic_quotes_active)
                
$value stripslashes($value);

            
// mysql_real... does the job anyhow
            
$value mysql_real_escape_string($value);
        }
        else
        {
            
// if magic_quotes doesn't exist, then add slashes to $value so it will be prepared to DB
            
if(!$magic_quotes_active)
                
$value addslashes($value);
        }
        return 
$value;




רק הערה קטנה:

בפונקציה הורדת את לוכסני ההברחה ש-PHP היה שם בעצמו אם magic_quotes היה On.
לענ"ד עדיף יהיה לעשות את זה בתחילת הסקריפט.
הסיבה היא שבמקרים שבהם משתמש שולח מידע באמצעות טופס HTML, ואתה צריך להחזיר את הקלט לשדות הטופס בעקבות שגיאות של קלט לא מתאים - אז בכל מקרה תצטרך להריץ stripslashes על כל הקלט, ולאחר מכן htmlspecialchars.

לכן פונקציית ה-stripslashes לא מתאימה שם.

בנוסף צריך לעשות הפרדה בין פעולות שקשורות לדברים שונים:

אתה מריץ פונקציית stripslashes על קלט מסויים בגלל ש-PHP הוסיף את זה בעצמו אוטומטית, ואנחנו לא מעוניינים בזה. האם יש לזה קשר ל-SQL או MySQL? לא... לכן מבחינה הגיונית (או מבחינה אחרת שאני לא זוכר את שמה) זה לא נכון שהפונקציה stripslahes תהיה ממוקמת בפונקציה שמסננת תוים במחרוזות מידע שיועברו לשאילתא.

נהוג לשים את הפונקציה stripslashes בתחילת הקוד, לפני שמבצעים פעולות על הקלט, לדוגמא:

קוד PHP:
 // supplied by php.net
function stripslashes_deep($value)
{
    return 
is_array($value)
        ? 
array_map('stripslashes_deep'$value)
        : 
stripslashes($value);
}

if (
get_magic_quotes_gpc())    
{
    
// Remove all slashes that were created by PHP
    
$_GET array_map('stripslashes_deep'$_GET);
    
$_POST array_map('stripslashes_deep'$_POST);
    
$_COOKIE array_map('stripslashes_deep'$_COOKIE);
}

// now we have the original input. 


לכן אחרי שהורדנו את stripslahses מהפונקציה שכתבת:

קוד PHP:
 class interface_MySQL
{
    
//...
    
public function init()
    {
        
//...
        
$this->mysql_real_escape_string_Exists function_exists("mysql_real_escape_string");
        
//...
    
}
    
    public function 
cleaned_mysql($value)
    {
        return 
$this->mysql_real_escape_string_Exists 
            
mysql_real_escape_string($value)
            : 
addslashes($value);
    }
    
    
//...



וזהו
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 18-10-2009, 13:23
  משתמש זכר phpier phpier אינו מחובר  
 
חבר מתאריך: 11.10.09
הודעות: 12
בתגובה להודעה מספר 2 שנכתבה על ידי dorM שמתחילה ב "תודה רבה :) סידרתי את הקוד..."

הסיבה שהורדתי את לוכסני ההברחה ש-PHP מוסיף בעצמו מסיבה אחת פשוטה. הכל עניין של גרסת PHP.
ז"א

הפונקציה mysql_real_escape_string() התחילה אך ורק מגרסת 4.3.0 PHP לכן אם גרסת ה-PHP שבה אנו עובדים היא 4.3 ומעלה ו-magic_quotes פעילה בשרת, אז אין טעם בלוכסני ההברחה, נפשיט אותם בעזרת stripslashes() וניתן ל-mysql_real_escape_string לעשות את פעולת ה-escaping

אבל, אם גרסת ה-PHP שאנו עובדים איתה הינה פחות מ-4.3 (שכן הפונקצייה mysql_real_escape_string עדיין לא קיימת) ו-magic_quotes עדיין לא פעילה בשרת, רק אז נוסיף את addslashes()

תודה
_____________________________________
מטבחי פשטות - עיצוב מטבחים, מטבחים כפריים ו-רהיטים יוקרתיים
משקי ליסינג - פתרונות ליסינג, ליסינג תפעולי, ליסינג מימוני לחברות ועסקים

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 05:33

הדף נוצר ב 0.06 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר