בעיה בעברית עם PHP

games

New member
בעיה בעברית עם PHP

שלום :) יש לי בעיה מאוד מוזרה... אם תואילו בטובכם להכנס ל http://www.masagames.f2s.com/2search.php ולחפש שם את המילה "איש" (לפי "שם בעברית"), תגלו בבמהרה שמוצגות תוצאות שלא ממש קשורות למילת המפתח "איש". לדוגמא, תמצאו שם את "הוגו בית הרפאים" או "בית חולים"... השאילתא שלי היא:
$query = mysql_query("SELECT * FROM games where $cata like '%$sname%' ORDER BY name ASC");​
ואין לי שמץ של מושג איך החיפוש מגיע לתוצאות המוזרות האלו... אני מבין שPHP היא שפה שפותחה בחלקה על ידי ישראלים ושאמורה להיות "תואמת עברית" ברמה גבוהה ולכן אני משוכנע שיש פתרון לצרתי (אין צורך להזכיר שה"שגעון" לא קורה בחיפוש באנגלית). אני מקווה שתוכלו לעזור לי... תודה מראש... תודה רבה מראש :)
 
לא שאני מבין גדול, אבל

$query = mysql_query("SELECT * FROM games where $cata like '%$sname%' ORDER BY name ASC");​
לא אמור להיות:
$query = mysql_query("SELECT * FROM games where $cata like '%$sname%' ORDER BY name DASC");​
 

shanor

New member
מממ...

טוב, אז ראשית כל חציל: התכוונת לכתוב DESC (ולא DASC), אשר המשמעות שלה היא סידור הפוך של התוצאות, זאת כאשר GAMES התכוון לסידור רגיל ASC, אשר בדרך כלל אין צורך לכתוב את זה משום שזה סידור ברירת המחדל - הסידור יתבצע כך גם בלי לציין את הפקודה בפירוש. עכשיו לשאלה של GAMES: PHP היא אכן שפה פתוחה ובחלקה גם פותחה ומפותחת על ידי ישראלים (ראוי לציין שחברת ZEND שמוצרים מסויימים שלה מוזכרים כאן בפורום לא פעם היא חברה ישראלית), אבל MYSQL לעומת זאת לא פותחה על ידי ישראלים. אני לא יודע אם העובדה שגויים הם מתכנתיה של MYSQL היא הסיבה לבעיתיות עם העיברית או שמה, זה חלק מהקטע של הכתיבה ההפוכה של העיברית... כדי לפתור את הבעיה אם כי לא באופן מלא ולא תמיד בצורה של 100% הצלחה, תגדיר את השדה שעליו אתה מריץ את השאילתה שלך בתור BINARY. אם הוא CHAR או VARCHAR תגדיר אותם כשדה בינארי, אם השדה שלך הוא TEXT למיניו, תגדיר אותו כ- BLOB. אם אפשר גם בשאילתות שלך תבצע חיפוש בינארי. התוצאות שתקבל אמורות להיות קרובות יותר למה שאתה מצפה לקבל. מקווה שעזרתי ולו במעט, בהצלחה, שנאור.
 

cwen

New member
לי אף פעם לא היו בעיות עם חיפוש

בעברית. מה זה ה $cata שיש לך בקוד? האם cata זה שם של עמודה ב DB או שזה משתנה שנגרר מהעמוד הקודם? האם אתה עושה איזו קידוד לנתונים כשאתה מזין אותם לתוך ה DB?
 

games

New member
תשובה

אני רוצה שדף החיפוש יוכל לחפש בעמודות שונות בהתאם לבקשת המשתמש ולכן הגדרתי את $CATA - משתנה שיכיל את שם העמודה בה יש לחפש. הנתונים לא מקודדים אלא מוכנסים בעברית "רגילה". שיניתי העמודה לBINARY ונדמה לי שהעניין נפתר אך עדיין הייתי שמח לשמוע עוד בנושא...
 

shanor

New member
מממ...

אם הפתרון של BINARY עוזר, אז יופי. אולי כדאי שלא להמשיך כדי לא להרוס עוד... התעמקתי קצת יותר בכל הקטע של שפות, ויש כמה דברים שצריך לנסות, אבל אני אומר מראש, תמיד איכשהו אישית מצאתי דרך להתחמק מכל מני בדיקות והשוואות של עיברית והעדפתי לא להשתמש בכל מני פטנטים (למרות ששוב אני אומר, אני צריך לנסות). ניתן להגדיר את ה- CHARACTER SET בכמה רמות. ניתן להגדיר ברמת מסד הנתונים, ברמת הטבלה, וברמת העמודה. חיפוש מהיר בקבצים שמגיעים עם MYSQL יראה (בהתאם למערכת ההפעלה שיש קובץ קידוד לעיברית - בדרך כלל תחת השם הלא ממש מפתיע HEBREW). צריך רק לקרא טוב טוב את המניואל של MYSQL ולזכור שאם כבר יש טבלאות ומשנים את CHARACTER SET אז צריך לסדר את האינדקסים מחדש בעזרת MYISAM, והפרמטרים הרצויים. אישית, אני נתקלתי בבעיה מסויימת ברגע ששניתי את הגדרת ה-DEFAULT של כל המסד לעיברית, משום מה ה-PHP סירב להתחבר ל-MYSQL וכתב שהוא לא מצליח לתקשר עם MYSQL, דבר שהוא לכשלעצמו מוזר משהו, כי ברגע שהחזרתי את הCHARACTER SET חזרה ל-LATIN1, הכל חזר לעבוד (מאותו סקריפט בדיוק).... אולי ברמת הטבלה או ברמת העמודה זו לא תהיה בעיה - לא ניסיתי. להגיד לך שזה הפתרון, זה משהו שצריך לנסות ולבדוק ואין חכם כבעל ניסיון. שנאור.
 
למעלה