09-10-2005, 05:19
|
|
|
חבר מתאריך: 25.08.03
הודעות: 9,114
|
|
כשראיתי את ההודעה לראשונה, קצת התעצלתי להתחיל לקרוא את כל המגילה, אך כיוון שחבריי לפורום כבר עשו חלק מהעבודה, אני רק אפרט יותר לגבי השגיאה ששי הציג.
ואגב, יש כנראה עוד מספר שגיאות, כך שזה כנראה לא יתוקן בפעם אחת, אלא במשך מספר שלבים.
שי הציג את שאילתת SQL שגויה שכתובה בתוך הקוד, וכמונה שמתי לב שיש לפחות עוד אחת (שאילתה נוספת עם שגיאות דומות).
ראשית, כשאתה כותב בשאילתה את התן כוכבית (*) שמסמן כמובן שאתה מעונין בכל העמודות, תעשה ריווח לפני הכוכבית ולאחריו, שכן זה לו חלק מהמילה הראשונה והשלישית, וכל עוד אין תו רווח, המילה נחשבת לפקודה אחת, כך שהמסד רואה את "select*from" כמילה אחת, והיות ואין כזאת פקודה, כמובן שמלבד שגיאה לא צפוי שתקבל משהו יעיל.
שנית, שילבת בשאילתה משתנה PHP, ולמרות שעם המחרוזת תחומה בסוגריים מסולסלים המשתנה מתפרש כמשתנ ולא כ'טקסט פשוט', זה ממש לא מומלץ, ואולי אף לא אפשרי כשמדובר במשתנה שהוא איבר במערך.
מלבד זאת, אם שם האיבר במערך הוא מחרוזת, אתה צריך לתחום אותו במרכאות, כי לולא המרכאות PHP עלול להתייחס לזה כאל 'קבוע' שכמובן יפורש כפי התוכן שמוגדר בקבוע (אם הגדרת קבוע בשם זה).
לכן תכתוב שורה זו, ושאילתות דומות לזה, באופן הבא:
קוד PHP:
$pass = mysql_query("SELECT * FROM claints WHERE pass LIKE '".$_POST['pass']."'");
במהלך כתיבת השאילתה המתוקנת שמתי לב שגם את הפקודה עצמה תחמת במרכאות, מה שאומר שהפקודה כלל לא תפעל, כי מה שהזנת למשתנה pass זה מחרוזת, ולא פקודה.
בשורה התחתונה נראה שחסר לך יסודות בסיסיים ביותר בשפה, אז חבל שתתחיל לעבוד על הקוד הזה, פשוט תקדיש מספר שעות ללמוד את השפה מהיסוד, זה יקל עליך את החיים.
נערך לאחרונה ע"י ישראל K בתאריך 09-10-2005 בשעה 05:25.
|