דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. SQL -PHP שגיאה

SQL -PHP שגיאה

מתוזמן נעוץ נעול הועבר תכנות
26 פוסטים 3 כותבים 1.5k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי ש.ב.ח.
    #1

    שגיאה בהזנת נתונים בשאילת SQL מphp
    וזו השגיאה (חילקתי לשורות בשביל נוחות הקריאה):

    You have an error in your SQL syntax; check the manual that
     corresponds to your MariaDB server version for the right syntax to
     use near
     'INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) 
    VALUES ('' at line 1"
    

    הדפסתי את המשתנה שמכיל את השאילה (גם פה חתכתי לשורות...):

     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('אהל', 'אהל', '84'); 
    INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('דוד', 'דוד', '23'); 
    INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('לפה', 'לפה', '88');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('עקיבא', 'עקיבא', '86');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('אש', 'אש', '96');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('מגן', 'מגן', '93'); 
    INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('חיים', 'חיים', '97');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('שלמה', 'יוסף', '62');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('יהודה', 'יהודה', '59'); 
    INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('תפילה', 'תפילה', '81');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('יששכר', 'יששכר', '86');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('דרכי', 'דרכי', '87');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('דב', 'דב', '80');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('מרדכי', 'מרדכי', '73');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('הפרחים', 'הפרחים', '86');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('נרקיס', 'נרקיס', '56');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('ר"י', 'ר"י', '66'); 
    INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('רוטה', 'רוטה', '72');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('יצחק', 'יצחק', '71');
     INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('טפסים', 'טפסים', '0');
    

    כשאני מכניס את המחזרוזת הזראת לSQL בממשק PHPmyadmin זה עובד מצויין.

    אז מה באמת הבעיה?

    clickoneC תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

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

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • clickoneC מנותק
        clickoneC מנותק
        clickone
        השיב לש.ב.ח. ב נערך לאחרונה על ידי
        #3

        @ש-ב-ח לא מכיר מספיק למק את MYSQL, וכמו ש @dovid כתב זה יכול להיות כל דבר 😮

        1. העמודה NAME היא סטרינג או מספר?
        2. אולי מפריע לו שבערכים שמת לו גרש כזה ' ולא כזה`??

        אין טסט כמו פרודקשן.

        המייל שלי urivpn@gmail.com

        dovidD תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          השיב לclickone ב נערך לאחרונה על ידי dovid
          #4

          @clickone אין את שתי הבעיות (גרש מיוחד זה רק בשמות שדות וטבלאות, וטיפוס לא מתאים זה לא שגיאת syntax).

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          ש תגובה 1 תגובה אחרונה
          1
          • ש מנותק
            ש מנותק
            ש.ב.ח.
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid
            בסוף גיליתי שבמקום להפעיל בקודת multi_query הפעלתי query.

            אלא מה, משהו אחר בעייתי....
            אחד מההשאילתות הם זה (כאשר המשתנה מכיל אותה היא נראית כך)>

            $sql = " INSERT INTO shtiblech (`name`, `anterlative_name`, `amount_memerens`) VALUES ('ע\"ש ר' חיים ירט ז\"ל', 'ע\"ש ר' חיים ירט ז\"ל', '97');";
            

            חוזרת לי שגיאה:

            You have an error in your SQL syntax;
             check the manual that corresponds to your MariaDB
             server version for the right syntax to use near
             'חיים ירט ז"ל', 'ע"ש ר' חיים ירט ז"ל', '97')' at line 1
            
            תגובה 1 תגובה אחרונה
            0
            • ש מנותק
              ש מנותק
              ש.ב.ח.
              כתב ב נערך לאחרונה על ידי
              #6

              טוב, הסתדרתי... היה בעיה עם הרבנים... (ר' ז"ל וכו')

              dovidD תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לש.ב.ח. ב נערך לאחרונה על ידי
                #7

                @ש-ב-ח וכנראה גם היית חשוף להזרקת SQL.
                אתה צריך להשתמש בפרמטרים https://www.php.net/manual/en/mysqli.prepare.php
                זה גם חוסך לך את כאב הראש של ניקוי המחרוזת או מה שנקרא escaping שלה, וגם מאבטח אותך.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                ש תגובה 1 תגובה אחרונה
                2
                • ש מנותק
                  ש מנותק
                  ש.ב.ח.
                  השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
                  #8

                  @dovid
                  אני מתלבט אם אני יכול בכלל להשתמש בprepare

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

                  על כל האמור בניתי סקריפט בphp שעובד באופן הבא:

                  1. אני אמלא במשתנים בקובץ המקור את שם הdb שיש ליצור וכן את שאילתת יצירת הטבלאות, ועוד כהנה וכהנה.
                  2. את כל הנתונים שאמורים להשתנות בין התקנה להתקנה אני מכניס בתקייה עם קבצי csv
                  3. הסקריפט מבקש מהלקוח לבחור בנתונים אותו הוא צריך להכניס בDB.
                  4. הסקריפט יעבור בין הקבצים ויכניס אותם לטבלה שעונה לשם הקובץ (לא כולל .csv), כמו כן השורה הראשונה מכילה את שמות העמודות בDB אליהם יש להכניס כל עמודה.

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

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

                  תקן אותי אם טעיתי.

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לש.ב.ח. ב נערך לאחרונה על ידי
                    #9

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

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    ש תגובה 1 תגובה אחרונה
                    1
                    • ש מנותק
                      ש מנותק
                      ש.ב.ח.
                      השיב לdovid ב נערך לאחרונה על ידי
                      #10

                      @dovid אמר בSQL -PHP שגיאה:

                      אבל אני מבין ממך שדוקא כן רק שזה לא ישיר

                      הקלט שמתקבל מהמשתמש הוא שם הקובץ או שם כולל של כל הקבצים!
                      כל השאר מתבצע באופן אוטו' על הקובץ.

                      בהחלט אם הוא יכניס שם קובץ אחר זה יכול לשגע את המערכת, שוב לא מדובר במערכת עבור משתמשים לא מוכַּרים (אם הם ידפקו את עצמם.. שייהנו).

                      בכל מקרה הוספתי לכל מידע שיעבור דרך הפונקציה הבאה:

                      function clian_input($data){
                      	$data = trim($data);
                      	$data = htmlspecialchars($data);
                      	$data = stripcslashes($data);
                      	return $data;
                      
                      dovidD תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        השיב לש.ב.ח. ב נערך לאחרונה על ידי
                        #11

                        @ש-ב-ח כמובן שזה תלוי באופי ומי המשתמשים אבל זה חור ממש ענק.
                        עם קצת תחכום אפשר לקבל את המידע במסד.

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        ש תגובה 1 תגובה אחרונה
                        1
                        • ש מנותק
                          ש מנותק
                          ש.ב.ח.
                          השיב לdovid ב נערך לאחרונה על ידי
                          #12

                          @dovid
                          אשמח אם תכוון אותי מה כן עושים ע"מ שזה לא יקרה?
                          (בהחלט לא רלוונטי לפרויקט זה, אך טוב למידע הכללי ולפרויקטים אחרים בעזרת השם)

                          clickoneC dovidD 2 תגובות תגובה אחרונה
                          0
                          • clickoneC מנותק
                            clickoneC מנותק
                            clickone
                            השיב לש.ב.ח. ב נערך לאחרונה על ידי
                            #13

                            @ש-ב-ח

                            @dovid אמר בSQL -PHP שגיאה:

                            אתה צריך להשתמש בפרמטרים https://www.php.net/manual/en/mysqli.prepare.php
                            זה גם חוסך לך את כאב הראש של ניקוי המחרוזת או מה שנקרא escaping שלה, וגם מאבטח אותך.

                            אין טסט כמו פרודקשן.

                            המייל שלי urivpn@gmail.com

                            ש תגובה 1 תגובה אחרונה
                            0
                            • ש מנותק
                              ש מנותק
                              ש.ב.ח.
                              השיב לclickone ב נערך לאחרונה על ידי
                              #14

                              @clickone

                              @dovid אמר בSQL -PHP שגיאה:

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

                              תגובה 1 תגובה אחרונה
                              0
                              • dovidD מנותק
                                dovidD מנותק
                                dovid ניהול
                                השיב לש.ב.ח. ב נערך לאחרונה על ידי
                                #15

                                צריך לנקות את כל ערך שמקורו במשתמש. במקרה שלך שמדובר בקובץ גדול שעובר עיבוד ועל פיו אתה בונה טבלאות, אז אתה צריך בכל ערך שאתה משתיל בפקודת SQL לודאות את "נקיונו".
                                אני חושב שהפונקציה הזאת https://www.php.net/manual/en/mysqli.real-escape-string.php טובה עבורך.

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                ש תגובה 1 תגובה אחרונה
                                1
                                • ש מנותק
                                  ש מנותק
                                  ש.ב.ח.
                                  השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
                                  #16

                                  @dovid
                                  לפי המידע שקראתי שם
                                  הפונקציה עושה את מה שעושים הפונקציות שכתבתי לך קודם ( ()trim() , stripcslashes)
                                  התו היחיד שהפונקציה אותה נתת בודקת יותר מהפונקציות הנ"ל הוא " ' " (גרש בודד).
                                  בכל מקרה ניתן להוסיף אותו לפונקצית ה ()trim כמופיע כאן:
                                  https://www.php.net/manual/en/function.trim.php
                                  ומה שאני עושה אפילו יותר מזה זה הפונקציה ()htmlspecialchars
                                  שמבריחה את כל תגיות הhtml למינהם... כך שאם מישהו ינסה להזריק סקריפט PHP הוא יוברח!

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #17

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

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    ש תגובה 1 תגובה אחרונה
                                    0
                                    • clickoneC מנותק
                                      clickoneC מנותק
                                      clickone
                                      כתב ב נערך לאחרונה על ידי
                                      #18

                                      שימו לב שאפשר להזריק קוד JS, וגרוע מכך JS מקודד 😮

                                      אין טסט כמו פרודקשן.

                                      המייל שלי urivpn@gmail.com

                                      dovidD תגובה 1 תגובה אחרונה
                                      1
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        השיב לclickone ב נערך לאחרונה על ידי
                                        #19

                                        @clickone כן אבל זה בכלל HTML כי לסקריפט חייבים תגית.
                                        אא"כ בטעות הוא עושה echo בתוך תגית אבל זה כבר שלומאליות.

                                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                        תגובה 1 תגובה אחרונה
                                        1
                                        • ש מנותק
                                          ש מנותק
                                          ש.ב.ח.
                                          השיב לdovid ב נערך לאחרונה על ידי
                                          #20

                                          @dovid אמר בSQL -PHP שגיאה:

                                          אבל אני לא רואה אפשרות להזריק קוד PHP

                                          גם קוד php הוא בתוך תגית...
                                          אם אני אחזיר מהdb מידה שתוכנו הוא קוד php עם תגיות php הקוד יופעל,
                                          מה שאין כן כרגע לאחר הניתוח של הסטרינג התגיות מוחלפות בקוד & lt; או & gt; ...
                                          (ד.א. שמתי לב עכשיו שהפונקציה הזאת מטפלת גם בגרש בודד.)

                                          dovidD תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום