שאילתה SQL דרך סקריפט PHP לצורת JSON

gilfisher2

New member
שאילתה SQL דרך סקריפט PHP לצורת JSON

שלום לכולם

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

תודה מראש
אני מצרף את השאילתה שעשיתי שתוכלו לראות מה לא תקין





mysql_connect("*****","*****","******");
mysql_select_db("*****");

$username= $_GET['******'];
$sqlINSERT=mysql_query("insert into users values ('1','$*******','4')");


$sqlSELECT=mysql_query("SELECT * FROM GasStations ");
mysql_query("SET NAMES 'hebrew'");
setlocale(LC_TIME, "he_IL");
while($row=mysql_fetch_assoc($sqlSELECT))
{
$output[]=$row;
$outStr = '{"usersData":' . json_encode($output) . '}';
}

print($outStr);
mysql_close();
 

bnayal

New member
כמה דברים,

1. אני מאוד מאוד מאוד מאוד ממליץ לעבוד עם מחלקה מודרנית יותר לתקשורת עם MySQL, למשל PDO או MySQLi.

2. אני רואה שאתה מכיר כבר את הפונקציה json_encode אז סתם חבל להשתמש בזה בצורה "עקומה" (להכניס את הפלט שלה בתוך מחרוזת אחרת). אני לא אוהב את זה.

3. שהמסד נתונים יוגדר בתור utf8, שהתוכן שמוכנס למסד נתונים יהיה UTF8 (כולל הקוד PHP שמכניס לשם), ה SET NAMES צריך להגדיר utf8.

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

שיהיה בהצלחה,
בניה
 

gilfisher2

New member
תגובה

1. תודה על ההמלצה אבל בגלל שמדובר פה על מוצר לאנדרואיד ולמדתי כבר איך עובדים עם JONS נראה לי שאני אשאר עם זה

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




`id` int(11) NOT NULL,
`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`age` int(11) NOT NULL


ואת הסקריפט שלי שניתי לצורה הבאה



header('Content-Type: text/html; charset=utf-8');
$db =mysql_connect("******","******","*******");
mysql_select_db('********',$db);
mysql_query("SET NAMES 'utf8'",$db);

$username= $_GET['username'];
$sqlINSERT=mysql_query("insert into users values ('1','$username','4')");


$sqlSELECT=mysql_query("SELECT * FROM users ");
mysql_query("SET NAMES 'hebrew'");
setlocale(LC_TIME, "he_IL");
while($row=mysql_fetch_assoc($sqlSELECT))
{
$output[]=$row;
$outStr = '{"usersData":' . json_encode($output) . '}';
}


print($outStr);
mysql_close();



ועכשיו העברית בJONS יוצר לי בצורה הזאת
{"usersData":[{"id":"1","name":"גיל","age":"28"}
וזה עדין לא עובד
 

bnayal

New member
שוב כמה דברים

1. זה לא JONS זה JSON

2. בסעיף הראשון בהודעה הקודמת שלי דיברתי על המחלקה שלך להתחברות ל MySQL. לא על הפלט JSON. גם אני עובד עם JSON ונוח לי עם זה.
3. לא הבנתי מה לא בסדר בעברית בJSON דוגמא שהבאת?
4. ה SET NAMES לא מוגדר utf8.
 

gilfisher2

New member
תגובה

1. אתה צודק בהחלט

2. יש מצב שיותר מאוחר אני אשב לקרוא את מה שהצעת ואולי אני באמת אשתמש בהצעה במקום סקריפט אם אני מקבל בסופו של דבר JSON

3. בדוגמא שהבאתי לא רואים עברית רואים גיבר'יג
, אתה יכול להיכנס לפה ולראות בעצמך
http://www.pez.co.il/giltest2.php
מתי שבטבלה מופיע אנגלית זה מראה מצויין אבל שמופיע עברית זה מראה name":"גיל
4. עכשיו זה כן מוגדר



header('Content-Type: text/html; charset=utf-8');
$db =mysql_connect("*****","*****","********");
mysql_select_db('*******',$db);
mysql_query("SET NAMES 'utf8'",$db);

$username= $_GET['username'];
$sqlINSERT=mysql_query("insert into users values ('1','$username','4')");


$sqlSELECT=mysql_query("SELECT * FROM users ");
while($row=mysql_fetch_assoc($sqlSELECT))
{
$output[]=$row;
$outStr = '{"usersData":' . json_encode($output) . '}';
}

print($outStr);
mysql_close();
 

bnayal

New member
כשאתה פותח את המסד נתונים דרך PhpMyAdmin

או כל כלי אחר, אתה רואה עברית?
 

gilfisher2

New member
כשאני פותח את מסד הנתונים דרך PhpMyAdmin

אני רואה את העברית בצורה מצויינת
 

bnayal

New member
מופיע לך ג'יבריש סימנים מוזרים או קידוד כזה:

u05d2 u05d9 u05dc
עם בק-סלשים?
 

gilfisher2

New member
כן פה למשל כתוב משה בעברית

\u05d2\u05d9\u05dc
אבל במסד הנתונים עצמו אני רואה את זה באמת בתור משה ולא בתור
\u05d2\u05d9\u05dc
 

amitayh

New member
ככה נראית מחרוזת UTF-8 כ - JSON

זה בסדר גמור, כשעושים decode זה חוזר להיות כמו שצריך
 

gilfisher2

New member
בדיוק שמתי לב לזה


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

bnayal

New member
עשית סוג של Web Service

שאליו אתה מתחבר דרך האנדרואיד והוא מנהל את הדיבור מול המסד נתונים אני מניח, נכון?
 

gilfisher2

New member
האמת שעשיתי משהו הרבה יותר דפוק מזה


בניתי סקריפט PHP של INSERT שניתן לעדכן אותו מהדפדפן על ידי הוספה של =?username לכתובת ואז זה מה שעשיתי מהאנדרואיד
האמת שאני דיי חדש בתכנות לאנדרואיד אני מנסה לעשות קיצורי דרך במקום באמת להבין מה שאני עושה ( יש לי בערך חודש להגיש פרוייקט גמר לסיום הלימודים)
אז מה שאני צריך לעשות זה LOGIN על המכשיר ובנוסף שהמשתמש יענה על עוד כל מיני שאלות ואז לשלוח את זה לשרת
בגלל שאין לי באמת מושג איך עושים את זה, ורק עכשיו התחלתי ללמוד על תכנות לאנדרואיד הבנתי שצריך להשתמש בJSON
אז פשוט עשיתי שאילתה פשוטה של INSERT ואני עושה שליחה מהמכשיר דרך הדפדפן לא הייתי קורה לזה Web service


"http://www.pez.co.il/guytest.php?username=" + name.getText().toString();
 
למעלה