Android ปัญหาเรื่องการอ่านข้อมูลภาษาไทยจาก MS SQL SERVER 2014 โดยใช้ MSSQL ติดต่อ Database
ใช้ NVARCHAR() ครับ แล้วกำหนด header ตอนที่ JSON ส่งกลับมาให้เป็นแบบ UTF-8 ครับ
Date :
2016-08-11 14:43:36
By :
mr.win
ผมลองดูแล้ว ถ้าผมใส่ header ลงไปจะไม่อ่านอะไรเลย ครับ จะค้นหาไม่ได้เลย เมื่อผมเอาออกปรากฏว่าขึ้นเหมือนเดิม ไม่ขึ้นภาษาไทย แต่ผมไปกำหนด
httpPost.setEntity(new UrlEncodedFormEntity(params , "TIS-620"));
BufferedReader reader = new BufferedReader(new InputStreamReader(content , "TIS-620"));
ผมใช้ UTF-8 แล้วมันใช้ไม่ได้ ครับ ใช้ได้แต่ TIS-620
2 อันนี้ผมสามารถ edit/update เป็นภาษาไทยเข้าไปได้แต่ช่องให้ใส่ Name กะจะเป็นช่องโล่งๆ ไม่มีอะไรเกิดขึ้น ครับ ผมลองเปลี่ยนเป็น NVARCHAR() แล้ว
ประวัติการแก้ไข 2016-08-11 16:00:28 2016-08-11 16:00:34 2016-08-11 16:00:37 2016-08-11 16:38:26
Date :
2016-08-11 15:59:16
By :
PuYo
***เพิ่มเติม*** ครับ
ตอนนี้ผมลองเริ่มทำในส่วนของ Android แล้วนะ ครับ
ตอนนี้ผมลองแก้ใส่
httpPost.setEntity(new UrlEncodedFormEntity(params , "TIS-620")); >>> เปลี่ยนไปเป็น UTF-8
BufferedReader reader = new BufferedReader(new InputStreamReader(content , "TIS-620")); >>> เปลี่ยนไปเป็น UTF-8
ผลปรากฏว่าขึ้นภาษาไทย ครับ แต่ !! ต้อง update มันใหม่ แต่ !! Database มันเป็นภาษาต่างด้าวอะ ครับ ส่วน PHP ถ้าใส่ header ลงไปเวลาบันทึกข้อมูลมันจะเด้งว่า "Unknow Status!"
Date :
2016-08-11 17:07:34
By :
PuYo
Code (PHP)
ini_set('mssql.charset', 'UTF-8');
Date :
2016-08-11 20:58:55
By :
Chaidhanan
ตอนนี้ยังติดปัญหาอยู่ที่เดิม ครับ เป็นภาษาต่างดาวตามรูปภาพ
ถ้ากำหนดให้ทางฝั่ง android ส่งข้อมูลไปให้เก็บบน Database เป็น UTF-8 Database มันจะเป็นภาษาต่างดาว ครับ แต่ใน Android จะเห็นเป็นภาษาไทย แต่ถ้ากำหนดเป็นแบบ TIS-620 ทาง Database จะเห็นเป็นภาษาไทย แต่ ทาง Android จะเห็นเป็นช่องว่าง ครับ
ผมลองใส่ header ไปแล้วมันขึ้น "Unknow Status!" ก็จริงแต่กะเห็นมันเซฟลง Database ครับ ลองใส่ ini_set('mssql.charset', 'UTF-8'); ลงไปกะยังไม่ได้ ครับ
อันนี้ลองแสดงผลจากเว็บนะ ครับ
ประวัติการแก้ไข 2016-08-13 10:20:08 2016-08-13 10:20:53 2016-08-13 10:20:59
Date :
2016-08-13 09:45:50
By :
PuYo
ขอดันหน่อยนะ ครับ เพื่อมีคนทราบ รบกวนคนที่ทราบด้วยนะ ครับ T-T
Date :
2016-08-14 21:47:02
By :
PuYo
fieldtype ของ Name ต้องเป็น nvarchar
เวลาอัพเดท ใชั N'ข้อมูล'
ตัวอย่าง update table set Name=N'ข้อมูลภาษาไทย'
ปล. ดูข้อมูลส่วนที่มาจาก android น่าจะถูก encrypt จะโปรแกรม ก่อนเข้าดาต้าเบสครับ
ทำให้อยู่ในรูปของ ascii เพื่อเก็บลง database ได้ทุกภาษา และเวลานำไปใช้ก็คงจะ decrypt อีกที
ดังนั้น เวลาจะแสดงผลคงต้อง ตรวจสอบชนิดของข้อมูลที่ได้อีกทีว่าอยู่ในรูปแบบไหน
เช่น
Code (PHP)
if(preg_match('/(\\u[0-9a-f]{4})+/i', $ro['name'])){
echo encrypt_decode($ro['name']);
}else{
echo $ro['name'];
}
ก็ตรวจสอบคำสั่ง encrypt เอาเองนะครับ ผมมั่วเขียนลงไป
ประวัติการแก้ไข 2016-08-15 05:24:40 2016-08-15 05:25:52 2016-08-15 05:29:02
Date :
2016-08-15 05:16:07
By :
Chaidhanan
ขอโทษผมหลงเอง จากรูป no 7
ข้อมูล ช่อง Name เป็น utf8 อยู่แล้ว
ผมอยากทราบ ว่า field type ของอันนี้เป็นอะไร ครับ
โดยทั่วไป ถ้าอยากให้เก็บภาษาไทย สำหรับ sql server
1 ที่ database เซท collation เป็น ภาษาไทย
เป็นค่า default สำหรับการรับข้อมูลเข้าออก ของข้อมูลประเภท ascii สำหรับ char varchar text ...
2 ถ้าอยากจะรับได้ทุกภาษา ให้กำหนด field type สำหรับรับ unicode เช่น nchar nvarchar ntext ...
ซึ่งพวกนี้จะใช้งานร่วมกับ web service ที่ใช้ utf8 ได้ดี ไม่ต้องแปลงข้อมูล
3 ที่ php บอก php ให้รู้ว่า sqlserver นี่ใช้ค่า default เป็นภาษาอะไร
ini_set('mssql.charset', 'UTF-8'); ก็จะแสดงข้อมูลตามที่กำหนดไว้
4 ที่ html กำหนด charset เป็น utf8
แค่นี้ ก็จะใช้ภาษาไทย ได้
สำหรับ อุปกรณ์ ส่วนใหญ่ ก็จะใช้ utf8 ในการติดข้อมูล ซึ่งไม่ต้องแปลงอะไรก็สามารถใช้ได้เลย
Date :
2016-08-16 08:00:36
By :
Chaidhanan
ผมกำหนดเป็นรูปแบบ nvarchar ครับ
Database Collation = Thai_CI_AS
savefile notepad ผมก็กำหนดให้เป็นแบบ UTF-8 ครับ
อันนี้เป็นส่วนของ PHP ที่ Showalldata ครับ จะเป็นเหมือนดังรูปข้างบน แต่
Code
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ThaiCreate.Com PHP & SQL Server Tutorial</title>
</head>
<body>
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('mssql.charset', 'UTF-8');
$objConnect = mssql_connect("Database","Username","Password") or die("Error Connect to Database");
$objDB = mssql_select_db("mydatabase1");
$strSQL = "SELECT * FROM member2";
$objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
//mysql_query("SET NAMES UTF8");
// $_POST["txtKeyword"] = "a"; // for Sample
$strKeyword = $_POST["txtKeyword"];
$strSQL = "SELECT * FROM member2 WHERE Name LIKE '%".$strKeyword."%' ORDER BY MemberID ASC ";
$objQuery = mssql_query($strSQL);
$intNumField = mssql_num_fields($objQuery);
$resultArray = array();
while($obResult = mssql_fetch_array($objQuery))
{
$arrCol = array();
for($i=0;$i<$intNumField;$i++)
{
$arrCol[mssql_field_name($objQuery,$i)] = $obResult[$i];
}
array_push($resultArray,$arrCol);
}
mssql_close($objConnect);
echo json_encode($resultArray);
?>
</body>
</html>
ถ้าใส่ head ลงไปบนข้อมูล php จะไม่เห็นอะไรเลยทางฝั่ง Android บน PHP กะยังไม่ขึ้นภาษาไทย
รบกวนด้วยนะ ครับ ไม่รู้ว่าผมพลาดอะไรตรงไหนไป
ประวัติการแก้ไข 2016-08-16 08:21:34 2016-08-16 08:48:33 2016-08-16 08:49:50 2016-08-16 08:50:21 2016-08-16 09:06:37
Date :
2016-08-16 08:07:36
By :
PuYo
Code (JavaScript)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
แก้เป็น
Code (JavaScript)
<!doctype html><!-- ใช้ HTML5 ทำงานทุกอุปกรณ์รองรับหมดแล้ว -->
<html>
<head>
<meta charset="utf-8">
Code (PHP)
$strKeyword = $_POST["txtKeyword"];
$strSQL = "SELECT * FROM member2 WHERE Name LIKE '%".$strKeyword."%' ORDER BY MemberID ASC ";
แก้เป็น
Code (PHP)
$org_keyword = $_POST["txtKeyword"];
$sql_Keyword = addslashes($org_keyword); // สำคัญมาก ป้องกัน sql injection ลองศึกษาพวกนี้ดูครับ นี่เป็นแบบที่ง่ายที่สุด แต่ไม่รับรองว่าปลอดภัยที่สุด
$strSQL = "SELECT * FROM member2 WHERE Name LIKE N'%".$sql_Keyword."%' ORDER BY MemberID ASC ";
ปล.อยากแนะนำให้ใช้ sqlsrv แทน mssql ครับ
ความปลอดภัยจะสูงกว่า มีเครื่องไม้เครื่องมือดีกว่า
Date :
2016-08-16 09:12:15
By :
Chaidhanan
ตอนนี้ผมลองเปลี่ยนมาใช้ sqlsrv แล้ว ครับ
Code
<!doctype html><!-- ใช้ HTML5 ทำงานทุกอุปกรณ์รองรับหมดแล้ว -->
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//mssql_query("SET NAMES UTF8");
// $_POST["txtKeyword"] = "a"; // for Sample
$strKeyword = null;
if(isset($_POST["txtKeyword"]))
{
$strKeyword = $_POST["txtKeyword"];
}
//$strKeyword = $_POST["txtKeyword"];
$stmt = "SELECT * FROM member2 WHERE Name LIKE '%".$strKeyword."%' ORDER BY MemberID ASC ";
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
// $resultArray = array();
// $objQuery = sqlsrv_query($conn,$strSQL);
$intNumField = sqlsrv_num_fields($query);
while($obResult = sqlsrv_fetch_array($query))
{
$arrCol = array();
for($i=0;$i<$intNumField;$i++)
{
$params[sqlsrv_field_name($query,$i)] = $obResult[$i];
}
array_push($params,$arrCol);
}
sqlsrv_close($conn);
echo json_encode($params);
?>
</body>
</html>
ตอนนี้ติด Error อยู่ตรงนี้ ครับ
Fatal error: Call to undefined function sqlsrv_field_name() in C:\xampp\htdocs\showAllData.php on line 51
ผมคิดว่า function ที่ใช้ไม่น่าจะถูก ผมพึ่งเคยใช้ sqlsrv ผมเลยไม่รู้ว่าจะเขียนยังไงต่ออะ ครับ รบกวนช่วยบอกวิธีให้หน่อย ครับ ขอบคุณ ครับ
ผมลอง echo ออกมาแล้วเป็นภาษาไทยละ ครับ ก่อนหน้านั้น echo ออกมากะยังเป็นช่องว่างๆ (ถ้าไม่ใส่ตารางให้มันกะจะไม่อ่านภาษาไทยเลย ) แต่ตอนนี้ไม่ต้องใส่ตารางกะอ่านละ ครับ แต่ผมยังติดปัญหาที่ เรียกดึงใช้จาก php อะ ครับ ผมลองใส่
sqlsrv_get_field
ผลปรากฏได้ผลลัพธ์ ["22",[],[],[],[]]
แต่เมื่อไปลองกดดูใน android ไม่มีข้อมูลอะไรขึ้นเลย ครับ หรือผมเรียกใช้มันผิดวิธี ครับ
ประวัติการแก้ไข 2016-08-16 16:40:54 2016-08-16 16:45:45 2016-08-16 16:45:48
Date :
2016-08-16 16:10:41
By :
PuYo
ตัวอย่าง sqlsrv
Code (PHP)
$stmt = "SELECT * FROM member2 WHERE Name LIKE ? ORDER BY MemberID ASC ";
$params = array('%'.$strKeyword.'%');
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
$rows = array();
while($obResult = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)){
$rows[]=$objResult;
}
echo json_encode($rows);
ปล.ถามนิด android เรียกผ่าน browser อะไรครับ หรือเขียน app ขึ้นเอง
ประวัติการแก้ไข 2016-08-16 21:57:01
Date :
2016-08-16 21:48:32
By :
Chaidhanan
ตอนนี้ผมเกิดปัญหาทาง Android ครับ ซึ่งข้อมูลทาง Database ของผมเยอะมาก จนทำให้ php ต้องเก็บความจุเป็น 1024m ถึงจะใช้ได้ แต่ php โหลดช้ามาก ครับ แล้วก็ถ้าโหลดข้อมูลเกิน 30 วิ กะจะ Error ทันทีผมกะแก้วิธีโดยใช้ ini_set('max_execution_time', 160); ใส่ลงไป ทีนี้ได้ข้อมูลมาทาง php แล้ว แต่ ทาง Android เวลาผมกดค้นโปรแกรมกะจะ crash ไปทันที ครับ ลองใช้ ProgressBar ไปแล้วกะเหมือนเดิม ครับ ค้นหาไปได้ แปปหนึ่ง กะหลุด ครับ พอจะมีแนวทางและวิธีแก้ไหม ครับ อยากให้ค้นหาเร็วขึ้น ครับ
ประวัติการแก้ไข 2016-08-17 16:07:47 2016-08-17 16:53:35
Date :
2016-08-17 15:45:07
By :
PuYo
โอเยอะขนาดนั้น android ส่วนใหญ่มี internal memory แค่ 2 gb เองครับ
โปรแกรมโน่นนี่นั่น ก็เหลือให้ใช้ อย่างเก่งก็ไม่ถึง 500K
มี swap file ก็นิดหน่อย ไม่เยอะขนาดนั้น โหลดได้นี่ก็เก่งแล้วครับ ไม่ต้องถึงกับทำงานด้วย
พยายาม ใช้ ajax ให้มากที่สุดครับ
ตัดการแสดง list ยาวๆ ออกไป ทำ pagination ทดแทนครับ
Date :
2016-08-18 08:00:33
By :
Chaidhanan
เขียนโปรแกรม ฝั่ง server(php) ให้รองรับการ request เฉพาะหน้า ที่ต้องการ (pagination)
ถ้าไม่บอกเลขหน้าก็แสดงหน้าแรก
ไม่ว่าจะเป็น อุปกรณ์ใดๆ เมื่อเรียกผ่าน web service (iis | apache | etc.)
(ในที่นี้ ใช้ php เป็นตัวแปรภาษา) ก็จะได้ข้อมูลเหมือนๆ กัน ไม่จำเป็นว่าจะต้องเป็นอุปกรณ์ใดอุปกรณ์หนึ่ง
ยกตัวอย่างการเขียน php ให้ generate ข้อมูลเป็น ภาษา html / javascript โดยใช้ bootstrap
ไม่ว่าจะรันบนอุปกรณ์ใด ก็จะได้ข้อมูลเหมือนๆ กัน อาจจะต่างตำแหน่ง แต่ก็อยู่ภายใต้การกำหนด ของผู้เขียน
Date :
2016-08-18 08:57:29
By :
Chaidhanan
แก้ได้ละ ครับ ผมใช้คำสั่งผิดไป
ประวัติการแก้ไข 2016-08-18 10:16:23 2016-08-18 10:28:16
Date :
2016-08-18 10:15:28
By :
PuYo
บรรทัดที่ 37 ,38 ตก WHERE ไปไหมครับ
Date :
2016-08-18 10:23:59
By :
Suthee2522
Code (JavaScript)
<button data-id="<?=$objResult->record_id?>">Edit</button>
<script>
$(document).ready(function(){
$('button').click(function(){
location.href='/program_for_edit.php?id='+$(this).data('id');
})
})
</script>
Date :
2016-08-18 18:34:08
By :
Chaidhanan
เราอยากให้ android show ปุ่มก็ได้ครับ ถ้าเรียกผ่าน browser
ปุ่มไม่จำเป็นต้องเป็น button อาจจะใช้ tag อื่น โดนใส่ event ตามที่เราต้องการลงไป
เพื่อที่จะให้เกิดการกระทำใดๆ ก็ได้
เพราะเป็น android เลยไม่ใส่ปุ่ม ผมงงนะเนี่ย
ใช้ application อะไรเขียนบน android ครับ
อ้อใช้ java java ก็สร้างปุ่มได้ครับ ไม่ใช่สร้างไม่ได้
แต่ผมจำคำสั่งไม่ได้แล้ว java รู้แต่ไวยกรณ์ คืนหนังสือไปหมดแล้ว 555
https://www.thaicreate.com/java/java-gui-swing-jbutton.html
https://www.youtube.com/watch?v=RV2lsjNwV84
ประวัติการแก้ไข 2016-08-18 19:13:44 2016-08-18 19:15:50 2016-08-18 19:17:49
Date :
2016-08-18 19:10:41
By :
Chaidhanan
ต้องคุยเรื่อง environment กันใหม่แล้วครับ
ตอนนี้คุณมี web service ที่ใช้ php เป็นภาษาฝั่ง server
///////////////////////////////////////////////////////////////////////////////////////////////////
บนอุปกรณ์ android
คุณใช้ chrome เป็น browser ในการติดต่อกับ web service
หรือ
คุณใช้ application อื่นๆ ในการเขียน parser ขึ้นมาใช้งานเอง
Date :
2016-08-19 06:16:37
By :
Chaidhanan
อุปกรณ์ติดต่อ web service คือ android
แล้ว parser ที่ใช้ รันบน android คือ Application อะไรสักอย่าง
parser (application) ตัวนั้นชื่ออะไรครับ
เพราะคงจะใช้ android เปล่าๆ ติดต่อกับ web service ไม่ได้ครับ
เช่นใช้ google chrome
หรือจะใช้ web browser (tool ที่มากับเครือง android)
หรือ teamview
หรือ vpn
หรือ อื่นๆ
ต้องมีซักแอป ล่ะครับ
ปล. สงสัยจะเข้าใจผิด
ทางเดินของการ transfer ข้อมูล คือ
Android <---> Data Server(ที่คุณเขียนขึ้นเอง) <---> Server ที่คุณติดต่อด้วย
แบบนี้หรือเปล่าครับ 5555 ชังงง
ประวัติการแก้ไข 2016-08-19 08:49:37
Date :
2016-08-19 08:44:09
By :
Chaidhanan
ผมก็ งง เหมือนกัน ครับ ผมกะไม่ค่อยเข้าใจ parser ว่าคืออะไร ผมยังไม่ค่อยรู้เยอะ ครับ
ลองเข้าไปดูบทความอันนี้ ดีกว่า ครับ https://www.thaicreate.com/mobile/android-edit-update-server-database.html ผมทำตามบทความอันนี้เลย อาจจะตอบโจทย์ได้ดีกว่าผม
ส่วนอุปกรณ์ที่ผมใช้มี
Android Studio
Web Browser ( IE , Google Chome แต่ส่วนมากใช้ Google )
XAMPP
Editplus
ต้องขออภัยด้วยนะ ครับ ผมอาจจะยังไม่รู้เยอะเท่าไหร่ รบกวนช่วยแนะนำชี้แนะด้วยนะ ครับ
ประวัติการแก้ไข 2016-08-19 09:05:54 2016-08-19 09:06:42
Date :
2016-08-19 09:05:17
By :
PuYo
ตอนนี้ผมทำ Code เสร็จแล้ว (ในส่วนของ ShowAlldata เท่านั้น ) จากบทความที่ผมทำจะเรียก Code PHP ทั้งหมด 3 ส่วน
อันนี้ Code ในส่วน Showalldata ตอนเข้าหน้าโปรแกรมมามันจะ showdata ทั้งหมดในโปรแกรม ซึ่งอันนี้เสร็จไปที่เรียบร้อยแล้ว
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//mssql_query("SET NAMES UTF8");
// $_POST["txtKeyword"] = "a"; // for Sample
$strKeyword = null;
if(isset($_POST["txtKeyword"]))
{
$strKeyword = $_POST["txtKeyword"];
}
$stmt = "SELECT * FROM member2 WHERE Name LIKE ? ORDER BY MemberID ASC ";
$params = array('%'.$strKeyword.'%');
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
$num_rows = sqlsrv_num_rows($query);
$per_page = 5; // Per Page
$page = 1;
if(isset($_GET["Page"]))
{
$page = $_GET["Page"];
}
$prev_page = $page-1;
$next_page = $page+1;
$row_start = (($per_page*$page)-$per_page);
if($num_rows<=$per_page)
{
$num_pages =1;
}
else if(($num_rows % $per_page)==0)
{
$num_pages =($num_rows/$per_page) ;
}
else
{
$num_pages =($num_rows/$per_page)+1;
$num_pages = (int)$num_pages;
}
$row_end = $per_page * $page;
if($row_end > $num_rows)
{
$row_end = $num_rows;
}
$sql = " SELECT c.* FROM (
SELECT ROW_NUMBER() OVER(ORDER BY MemberID) AS RowID,* FROM member2
) AS c
WHERE c.RowID > $row_start AND c.RowID <= $row_end
";
$query = sqlsrv_query( $conn, $sql );
$rows = array();
while($obResult = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)){
$rows[]=$obResult;
}
sqlsrv_close($conn);
echo json_encode($rows);
?>
ผลลัพธ์ที่ได้จากการ Showalldata
ต่อมาอันนี้เป็น Code ไว้เรียก ID ตอนที่เราจะเลือก Update/Edite สินค้าตัวนั้นอะ ครับ (getMemberID)
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$strMemberID = null;
if(isset($_GET["MemberID"]))
{
$strMemberID = $_GET["MemberID"];
}
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//$_POST["sMemberID"] = "1"; // for Sample
$stmt = "SELECT * FROM member2 WHERE MemberID = ? ";
$params = array($strMemberID);
$query = sqlsrv_query( $conn, $stmt, $params);
$result = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
if($query)
{
$arr["MemberID"] = $query["MemberID"];
$arr["Username"] = $query["Username"];
$arr["Password"] = $query["Password"];
$arr["Name"] = $query["Name"];
$arr["Email"] = $query["Email"];
$arr["Tel"] = $query["Tel"];
}
sqlsrv_close($conn);
/*** return JSON by MemberID ***/
/* Eg :
{"MemberID":"2",
"Username":"adisorn",
"Password":"adisorn@2",
"Name":"Adisorn Bunsong",
"Tel":"021978032",
"Email":"[email protected] "}
*/
echo json_encode($arr);
?>
ผลลัพธ์ที่ได้ออกมาบนเว็บ
ต่อมาเป็น Update สินค้า
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
$strMemberID = null;
if(isset($_GET["MemberID"]))
{
$strMemberID = $_GET["MemberID"];
}
$stmt = "SELECT * FROM member2 WHERE MemberID = ? ";
$params = array($strMemberID);
$query = sqlsrv_query( $conn, $stmt, $params);
$result = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
if($result)
{
$arr['StatusID'] = "0";
$arr['Error'] = "Email Exists!";
echo json_encode($arr);
exit();
}
/*** Update ***/
$stmt = " UPDATE member2 SET
Password = ?
,Name = ?
,Email = ?
,Tel = ?
WHERE MemberID = ?
";
$params = array($_POST["sPassword"], $_POST["sName"], $_POST["sEmail"], $_POST["sTel"],$_POST["sMemberID"]);
$query = sqlsrv_query( $conn, $stmt, $params);
if(!$query)
{
$arr['StatusID'] = "0";
$arr['Error'] = "Cannot save data!";
}
else
{
$arr['StatusID'] = "1";
$arr['Error'] = "";
}
/**
$arr['StatusID'] // (0=Failed , 1=Complete)
$arr['Error'] // Error Message
*/
sqlsrv_close($conn);
echo json_encode($arr);
?>
</body>
</html>
ผลลัพธ์ที่ได้ออกมาบนเว็บ มี Error
ตอนนี้ติดปัญหาตรงนี้และ ครับ Select ID และ Update พอจะแนะนำได้มะ ครับ
จาก php ที่เรียกใช้ ID ผลลัพธ์จะเห็นเป็น MemberID=null กับ Name=null อันนี้ผมไม่เคยเห็นมันจะเรียกใช้ได้เหมือนกันไหม ครับ ผมเคยเห็นใน mysql เวลาเรียกใช้มันจะเป็น null เลย ครับ มันจะไม่มี MemberID=null
ประวัติการแก้ไข 2016-08-19 10:35:42 2016-08-19 10:38:44
Date :
2016-08-19 10:31:28
By :
PuYo
ขอดัน ครับ ตอนนี้ยังแก้ไม่ได้ ในส่วนที่ 2 และ ส่วนที่ 3 ครับ
ส่วนที่ 2 ที่ติดปัญหาอยู่เลย คือ select ข้อมูลมาให้ Show ข้อมูล ครับ
ส่วนที่ 3 ขึ้นตามรูปภาพ ครับ
Date :
2016-08-20 08:58:19
By :
PuYo
ลืมตรวจสอบ query num_row
และ การคิวรี่ ที่ถูกต้อง
Code (PHP)
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = "SELECT * FROM member2 WHERE MemberID = ? ";
$params = array($strMemberID);
$query = sqlsrv_query( $conn, $stmt, $params,$options);
if(sqlsrv_num_rows($query)>0){
$result=sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
echo json_encode($result);
}else echo 'Not found data';
Date :
2016-08-20 09:53:58
By :
Chaidhanan
ตอบความคิดเห็นที่ : 41 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-08-20 09:53:58
รายละเอียดของการตอบ ::
ลองไปใส่ดูแล้วกะยังไม่ได้ ครับ
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$strMemberID = null;
if(isset($_GET["MemberID"]))
{
$strMemberID = $_GET["MemberID"];
}
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//$_POST["sMemberID"] = "1"; // for Sample
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = "SELECT * FROM member2 WHERE MemberID = ? ";
$params = array($strMemberID);
$query = sqlsrv_query( $conn, $stmt, $params,$options);
if(sqlsrv_num_rows($query)>0){
$result = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
$arr["MemberID"] = $result ["MemberID"];
$arr["Username"] = $result ["Username"];
$arr["Password"] = $result ["Password"];
$arr["Name"] = $result ["Name"];
$arr["Email"] = $result ["Email"];
$arr["Tel"] = $result ["Tel"];
echo json_encode($result);
} echo 'Not found data';
sqlsrv_close($conn);
/*** return JSON by MemberID ***/
/* Eg :
{"MemberID":"2",
"Username":"adisorn",
"Password":"adisorn@2",
"Name":"Adisorn Bunsong",
"Tel":"021978032",
"Email":"[email protected] "}
*/
//echo json_encode($arr);
?>
ผมลองตัดออกไป
$arr["MemberID"] = $result ["MemberID"];
$arr["Username"] = $result ["Username"];
$arr["Password"] = $result ["Password"];
$arr["Name"] = $result ["Name"];
$arr["Email"] = $result ["Email"];
$arr["Tel"] = $result ["Tel"];
ผลลัพธ์กะได้ออกมาเป็นแบบเดิมคือขึ้น
Not found data
Date :
2016-08-20 11:03:30
By :
PuYo
14.$strMemberID = null;
15.
16.if(isset($_GET["MemberID"]))
17.{
18.$strMemberID = $_GET["MemberID"];
19.}
แก้เป็น
Code (PHP)
$strMemberID = isset($_GET["MemberID"])? $_GET["MemberID"] : '';
if( strlen( $strMemberID) ==0 ) die( 'No Member ID');// ตรงนี้ กำหนด flow การทำงานเองนะครับแค่ตัวอย่างตรวจสอบ
ทำการตรวจสอบตัวแปรที่ส่งมาก่อนว่า ส่งมาถูกต้องไหม
Date :
2016-08-20 12:38:23
By :
Chaidhanan
จากตัวอย่าง ผม
8.}else echo 'Not found data';
ที่คุณทำ
49.} echo 'Not found data';
Date :
2016-08-21 08:14:46
By :
Chaidhanan
ตอนนี้ผมลองแก้ดูแล้ว ครับ ตรวจสอบดูว่า ยังไม่เจอ MemberID ครับ
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$strMemberID = isset($_GET["MemberID"])? $_GET["MemberID"] : '';
if( strlen( $strMemberID) ==0 ) die( 'No Member ID');// ตรงนี้ กำหนด flow การทำงานเองนะครับแค่ตัวอย่างตรวจสอบ
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
$stmt = "SELECT * FROM member2 WHERE MemberID = ? ";
$params = array($strMemberID);
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
if(sqlsrv_num_rows($query)>0){
$result = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
$arr["MemberID"] = $result ["MemberID"];
$arr["Username"] = $result ["Username"];
$arr["Password"] = $result ["Password"];
$arr["Name"] = $result ["Name"];
$arr["Email"] = $result ["Email"];
$arr["Tel"] = $result ["Tel"];
echo json_encode($result);
}else echo 'Not found data';
sqlsrv_close($conn);
?>
ผลลัพธ์ได้ออกมาเป็น
No Member ID
Date :
2016-08-22 08:20:04
By :
PuYo
ที่บันทัดแรก ตรวจสอบ input ก่อนว่ามีอะไรมาบ้าง
เมื่อตรวจสอบเสร็จก็ เอาออก หรือ มาร์คไว้ เพื่อไว้เป็นตัวอย่างใช้งานทีหลัง
Code (PHP)
<?php
echo '<pre>',print_r(array('get'=>$_GET, 'post'=>$_POST), true),'</pre>'; exit;
Date :
2016-08-22 09:09:44
By :
Chaidhanan
ย้อนกลับไปดู ไฟล์ที่ เรียกลิงค์ นี้ อีกที ว่าใช้คำสั่งเรียก แบบไหน
ถึงไม่ส่งค่าอะไรมาเลย เหมือนเป็นการเรียก ลิงค์เปล่าๆ
Date :
2016-08-22 09:31:13
By :
NewbiePHP
ตอบความคิดเห็นที่ : 50 เขียนโดย : NewbiePHP เมื่อวันที่ 2016-08-22 09:31:13
รายละเอียดของการตอบ ::
ผมใช้วิธีเรียกจาก Android WebServer อะ ครับ จากความเห็นที่ 44 ตามที่ผมบอกไว้อะ ครับ จากบทความที่ 2 จะเห็นได้ว่ามีการส่งข้อมูลมา แต่ PHP ผลลัพธ์จะได้ออกมาเป็นขึ้นว่า
False แต่ของผมลองนำมาดัดแปลง ดัดแปลงไปดัดแปลงมากลายเป็น
null ซึ่งลอง Test ดูแล้ว ตอนกด Edit กลายเป็นว่าขึ้น null ทุกช่องเลย
ขอโทษ ครับ ขอแก้ตรง False นะ ครับ ผมไปลอง Test มาใหม่ ผลลัพธ์ได้เป็น null เหมือนกัน แต่จากบทความได้ข้อมูลออกมาแต่ของผมได้เป็น null ทุกช่อง
Android ผมไม่ได้ไปยุ่งอะไร ผมคิดว่าน่าจะถูกหมดแล้วแล้วแค่ให้ PHP ส่งข้อมูลกลับไปยัง Android เหมือนเดิม ( ไม่ได้แก้ไขอะไรเลยเหมือนตามบทความ )
ลองเข้าไปอ่านบทความนี้ดูอะ ครับ น่าจะตอบโจทย์ได้ดีกว่า ผมยังเขียนไม่ค่อยเก่ง แต่ก็จะพยายาม ครับ
https://www.thaicreate.com/mobile/android-edit-update-server-database.html
ผมต้องทำตามบทความนี้แต่ผมใช้ mysql ไม่ได้เพราะผมเก็บข้อมูลใน ms sql server 2014 ใช้ได้แต่ sqlsrv ผมกะเลยต้องนำมาดัดแปลงให้ใช้ได้
แต่ ถ้าทำตามบทความเลย แก้แบบตรงตัวไปเลย
code บทความ
<?php
$objConnect = mysql_connect("localhost","root","root");
$objDB = mysql_select_db("mydatabase");
//$_POST["sMemberID"] = "1"; // for Sample
$strMemberID = $_POST["sMemberID"];
$strSQL = "SELECT * FROM member WHERE 1 AND MemberID = '".$strMemberID."' ";
$objQuery = mysql_query($strSQL);
$obResult = mysql_fetch_array($objQuery);
if($obResult)
{
$arr["MemberID"] = $obResult["MemberID"];
$arr["Username"] = $obResult["Username"];
$arr["Password"] = $obResult["Password"];
$arr["Name"] = $obResult["Name"];
$arr["Email"] = $obResult["Email"];
$arr["Tel"] = $obResult["Tel"];
}
mysql_close($objConnect);
/*** return JSON by MemberID ***/
/* Eg :
{"MemberID":"2",
"Username":"adisorn",
"Password":"adisorn@2",
"Name":"Adisorn Bunsong",
"Tel":"021978032",
"Email":"[email protected] "}
*/
echo json_encode($arr);
?>
อันนี้ code ของผมที่ทำแก้ไขคราวๆ ตามบทความไม่ได้เปลี่ยนแปลงอะไรมาก
<?php
//echo '<pre>',print_r(array('get'=>$_GET, 'post'=>$_POST), true),'</pre>'; exit;
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$strMemberID = null;
if(isset($_POST["sMemberID"]))
{
$strMemberID = $_POST["sMemberID"];
}
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//$_POST["sMemberID"] = "1"; // for Sample
$stmt = "SELECT * FROM member2 WHERE MemberID = ?";
$params = array($strMemberID);
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
$result = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
if($result)
{
$arr["MemberID"] = $result["MemberID"];
$arr["Username"] = $result["Username"];
$arr["Password"] = $result["Password"];
$arr["Name"] = $result["Name"];
$arr["Email"] = $result["Email"];
$arr["Tel"] = $result["Tel"];
}
sqlsrv_close($conn);
echo json_encode($arr);
?>
ได้ผลลัพธ์ Error ออกมาเป็น
Notice: Undefined variable: arr in C:\xampp\htdocs\getByMemberID.php on line 56
null
ประวัติการแก้ไข 2016-08-22 09:46:35 2016-08-22 09:48:05 2016-08-22 09:48:08 2016-08-22 10:03:03 2016-08-22 10:23:41 2016-08-22 10:39:23 2016-08-22 10:40:34 2016-08-22 10:43:42
Date :
2016-08-22 09:45:45
By :
PuYo
ตอนนี้แก้ได้ละ ครับ select ได้ข้อมูลมาแล้ว ครับ
แก้ echo json_encode($arr );
เป็น echo json_encode($result);
ผมคิดว่าผมคงคิดไกลเกินไป สงสัยต้องคิดใกล้ๆ ละ ลองกลับมาทำใหม่หมดเลยได้เฉย
ต่อไปผมจะเริ่มทำในส่วนที่ 3 ละ ครับ
ขอบคุณสำหรับทุกความคิดเห็นด้วยนะ ครับ
ประวัติการแก้ไข 2016-08-22 10:46:14 2016-08-22 10:46:58 2016-08-22 11:06:33 2016-08-22 11:07:02
Date :
2016-08-22 10:45:52
By :
PuYo
ตอนนี้ผมติดปัญหาเรื่องการเชื่อม ตารางใน Database อะ ครับ ผมคิดว่าในส่วนที่ 2 น่าจะผิดอะ ครับ (ส่วนที่ต้องตัดตารางอันที่ 2 ) รบกวนแนะนำหน่อย ครับ
คิดว่าน่าจะเป็นที่การเชื่อมตารางและ ครับ เพราะลองตารางเดียวแล้วได้
ผลลัพธ์ ERROR ออกมาเป็น
Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\showAllData.php on line 90
[]
CODE PHP
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//mssql_query("SET NAMES UTF8");
// $_POST["txtKeyword"] = "a"; // for Sample
$strKeyword = null;
if(isset($_POST["txtKeyword"]))
{
$strKeyword = $_POST["txtKeyword"];
}
$stmt = "SELECT SFISSUHD.Doc_No, SFISSUHD.Doc_Date, SMITEMMS.Code, SMITEMMS.Name1_Th, SFISSUDT.qty_main, SMUNITMS.Name
FROM SFISSUHD INNER JOIN
SFISSUDT ON SFISSUHD.id = SFISSUDT.SFISSUHD_ID INNER JOIN
SMITEMMS ON SFISSUDT.SMITEMMS_ID = SMITEMMS.ID INNER JOIN
SMUNITMS ON SFISSUDT.Main_SMUNITMS_ID = SMUNITMS.ID
WHERE SFISSUHD.Doc_No LIKE ?";
$params = array('%'.$strKeyword.'%');
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
$rows = array();
$num_rows = sqlsrv_num_rows($query);
$per_page = 5; // Per Page
$page = 1;
if(isset($_GET["Page"]))
{
$page = $_GET["Page"];
}
$prev_page = $page-1;
$next_page = $page+1;
$row_start = (($per_page*$page)-$per_page);
if($num_rows<=$per_page)
{
$num_pages =1;
}
else if(($num_rows % $per_page)==0)
{
$num_pages =($num_rows/$per_page) ;
}
else
{
$num_pages =($num_rows/$per_page)+1;
$num_pages = (int)$num_pages;
}
$row_end = $per_page * $page;
if($row_end > $num_rows)
{
$row_end = $num_rows;
}
$stmt = "SELECT Doc_No, SFISSUHD.Doc_Date, SMITEMMS.Code, SMITEMMS.Name1_Th, SFISSUDT.qty_main, SMUNITMS.Name FROM (
SELECT ROW_NUMBER() OVER(ORDER BY Doc_No) AS RowID,* FROM SFISSUHD INNER JOIN
SFISSUDT ON SFISSUHD.id = SFISSUDT.SFISSUHD_ID INNER JOIN
SMITEMMS ON SFISSUDT.SMITEMMS_ID = SMITEMMS.ID INNER JOIN
SMUNITMS ON SFISSUDT.Main_SMUNITMS_ID = SMUNITMS.ID
) AS c
WHERE c.RowID > $row_start AND c.RowID <= $row_end
";
$query = sqlsrv_query( $conn, $stmt );
while($obResult = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)){
$rows[]=$obResult;
}
sqlsrv_close($conn);
echo json_encode($rows);
?>
ประวัติการแก้ไข 2016-08-22 15:15:51
Date :
2016-08-22 14:54:19
By :
PuYo
ขออนุญาติดัน ครับ มีใครพอจะทราบบ้างไหม ครับ รบกวนหน่อยนะ ครับ
Date :
2016-08-22 22:18:48
By :
PuYo
87. $query = sqlsrv_query( $conn, $stmt ) or die( print_r(sqlsrv_error(),true)) ;
เพิ่มสีแดง ตรวจสอบ error ก่อน
มันมี error ทำไห้ $query ถูกกำหนดค่าเป็น boolean [false]
เอาไป fetch ค่าไม่ได้
Date :
2016-08-23 09:53:13
By :
Chaidhanan
*** ตอนนี้แก้ได้ละ ครับ จากที่เขียนไว้ข้างล่าง ***
ตอนนี้แก้ได้ละ ครับ แต่ตอนนี้ติดปัญหาเรื่องการ INNER JOIN อะ ครับ ถ้าใส่ลงไป จะไม่สามารถ save ได้ ยกตัวอย่างของผมคือ ใส่ข้อมูล Update ลงไปแล้ว พอจะ save save ผ่าน แต่ข้อมูลไม่บันทึก ครับ จะกลับเป็นข้อมูลเดิม
แต่ถ้าผมใส่ SELECT แบบตารางเดียว จะ save update ได้
SELECT * FROM SFISSUHD WHERE id
แต่ถ้าผมใส่ INNER JOIN ลงไป ขึ้นว่า save ผ่าน แต่ไม่บันทึกให้ ครับ
SELECT *
FROM SFISSUHD INNER JOIN
SFISSUDT ON SFISSUHD.id = SFISSUDT.SFISSUHD_ID INNER JOIN
SMITEMMS ON SFISSUDT.SMITEMMS_ID = SMITEMMS.ID INNER JOIN
SMUNITMS ON SFISSUDT.Main_SMUNITMS_ID = SMUNITMS.ID
WHERE SFISSUHD.id = ?
ใน php ไม่มี Error อะไรเลย ครับ หรือ เป็นที่ทางตัว Android ด้วยรึเปล่า ครับ มันหาค่าไม่ได้ แต่ถ้าตารางเดียวได้ แต่ถ้าหลายตารางไม่ได้เลย
ประวัติการแก้ไข 2016-08-24 09:50:11 2016-08-24 09:51:03 2016-08-24 09:51:58 2016-08-24 09:52:28 2016-08-24 10:34:10
Date :
2016-08-24 09:45:43
By :
PuYo
ก็ต้องตรวจสอบให้ดีว่าทุกตารางมีข้อมูลหรือไม่
เพราะว่า inner join ต้องมีข้อมูล เหมือนกัน ทั้งสองด้าน ถี่งจะมี record มาแสดง
Date :
2016-08-24 10:59:22
By :
Chaidhanan
ขอบคุณ ครับ คุณ Chaidhanan
ขอสอบถามเพิ่มเติมหน่อย ครับ
1. ถ้าเป็นการ Update/Edit สามารถใส่ INNER JOIN ได้เหมือนกันใช่ไหม ครับ ( ผมต้อง Update/Edit ข้ามตาราง )
2. วันนี้ผมเจอข้อมูลตัว 1 ใน Database จะเก็บข้อมูลเป็น char(1) แล้วผมใช้ Code ตัวนี้ในการเรียกข้อมูลขึ้นมา
$strMemberID = null;
if(isset($_POST["sMemberID"]))
{
$strMemberID = $_POST["sMemberID"];
}
แล้วเอาไป Quarry มันปรากฏว่ามันได้ผลลัพธ์ออกมาเป็น null ตาม $strMemberID แต่ถ้่าใน Database เก็บข้อมูลเป็น varchar , num จะออกมาเป็นข้อมูลของมันใน Database เลย แต่ถ้าเป็น char เมื่อไหร่มันจะเป็น null ( ผมแค่ต้องการเก็บตัวอักษรตัวเดียว แค่ Y หรือ N ) ผมเลยสงสัยว่า มันไม่สามารถอ่านค่า char ได้รึเปล่า ครับ
รบกวนช่วยตอบเป็นข้อๆ หน่อยนะ ครับ มีใครแนะนำได้รบกวนช่วยแนะนำด้วยนะ ครับ
ขอบคุณ ครับ
Date :
2016-08-24 17:48:22
By :
PuYo
อ่านได้ครับ แต่แนะนำให้เก็บ 0 - 1 ดีกว่าครับ เร็วกว่า
bit
tinyint
Date :
2016-08-24 18:03:45
By :
manitchai
$strMemberID = null;
if(isset($_POST["sMemberID"]))
{
echo $strMemberID = $_POST["sMemberID"];
}
ถ้ามันมีข้อมูลมันต้อง ไม่เป็น null เช็คด้วยคำสั่งสีแดงดูก่อนครับ
Date :
2016-08-24 19:10:09
By :
Chaidhanan
ตอนนี้แก้ได้ละ ครับ ขอบคุณ คุณ Chaidhanan ด้วยนะ ครับ
ตอนนี้ผมติดปัญหาเรื่องของการ Update ข้ามตารางอะ ครับ
ผมเขียนไปแบบนี้ ช่วยแนะนำหน่อยได้ไหม ครับ
$stmt = " UPDATE SFISSUDT SET
SFISSUDT.qty_main = ? ,
SFISSUDT.F_Cut = ?
INNER JOIN SFISSUHD ON SFISSUHD.Doc_Date = ?
WHERE SFISSUDT.id = ?
";
** ตอนนี้แก้ได้ละ ครับ ผมใช้วิธีแก้ quarry มัน 2 รอบ ครับ **
ประวัติการแก้ไข 2016-08-25 09:25:55 2016-08-25 09:40:17 2016-08-25 10:13:49 2016-08-25 10:15:35
Date :
2016-08-25 08:42:15
By :
PuYo
ขอบคุณ ครับ คุณ Chaidhanan ผมได้ความรู้ใหม่ๆ เยอะเลย
** ตอนนี้แก้ได้หมดแล้ว ครับ จากที่บอกไว้ข้างล่าง ปัญหาที่เจอกะคือ ผมไปกำหนดแบ่ง pagination มันเลยทำให้ยุ่งยากแบบนี้ ซึ่งวิธีง่ายๆ เลย คือ ไปกำหนดปิด Showdata ซึ่งมันจะโชว์ข้อมูลทั้งหมดในหน้าแรกแต่ไปปิดมันได้เพื่อใช้ค้นหาอย่างเดียว ไม่ต้องไปกำหนด pagination **
ตอนนี้ผมต้องการให้มันแสดง Table ด้านหลังอย่างเดียวอะ ครับ เช่นผมมีข้อมูลอยู่ 10,000 ผมต้องการโชว์ข้อมูลจาก 10,000 ไป 5,000 ไม่ใช่ จาก 1 ไป 5,000 อะ ครับ ขอคำแนะนำด้วย หรือ มีวิธีที่ดีกว่านี้ไหม ครับ ขอบคุณ ครับ แล้วก็ตอนนี้ระบบค้นหาของผมมันแปลกๆ อะ ครับ ทำไมมันค้นหาไม่ได้ เช่นยกตัวอย่าง คือผมค้นหาชื่อ IMC001 ข้อมูลใน Database มี IMC001 , IMC002 , IMC003 เมื่อผมกดค้นหาลงไปผลปรากฏได้ IMC001 ซึ่งถูก!! แต่เดี๋ยวผมลองกดค้นหา IMC002 มันดันได้ผลลัพธ์เป็น IMC002 กับ IMC003 มา ครับ
** ข้อมูลจะมีการ Update เข้าไปตลอดเวลา ครับ ดังนั้นอยากได้ค้นหาจากหลังไปหน้า **
<?php
//header("content-type:text/javascript;charset=utf-8");
ini_set('sqlsrv.charset', 'UTF-8');
//ini_set('memory_limit' '1024m');
//ini_set('max_execution_time', 160);
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "";
$userName = "";
$userPassword = "";
$dbName = "";
$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true,"CharacterSet" => 'UTF-8');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
//mssql_query("SET NAMES UTF8");
// $_POST["txtKeyword"] = "a"; // for Sample
$strKeyword = null;
if(isset($_POST["txtKeyword"]))
{
$strKeyword = $_POST["txtKeyword"];
}
$stmt = "SELECT SFISSUHD.Doc_No FROM SFISSUHD INNER JOIN
SFISSUDT ON SFISSUHD.id = SFISSUDT.SFISSUHD_ID INNER JOIN
SMITEMMS ON SFISSUDT.SMITEMMS_ID = SMITEMMS.ID INNER JOIN
SMUNITMS ON SFISSUDT.Main_SMUNITMS_ID = SMUNITMS.ID
WHERE SFISSUHD.Doc_No LIKE ?";
$params = array('%'.$strKeyword.'%');
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$query = sqlsrv_query( $conn, $stmt , $params, $options );
$rows = array();
$num_rows = sqlsrv_num_rows($query);
$per_page = 5; // Per Page
$page = 1;
if(isset($_GET["Page"]))
{
$page = $_GET["Page"]; <<<<<<< แก้ตรงนี้เปล่า ครับ
}
$prev_page = $page-1;
$next_page = $page+1;
$row_start = (($per_page*$page)-$per_page);
if($num_rows<=$per_page)
{
$num_pages =1;
}
else if(($num_rows % $per_page)==0)
{
$num_pages =($num_rows/$per_page) ;
}
else
{
$num_pages =($num_rows/$per_page)+1;
$num_pages = (int)$num_pages;
}
$row_end = $per_page * $page;
if($row_end > $num_rows)
{
$row_end = $num_rows;
}
$stmt = "SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY id) AS RowID,* FROM SFISSUHD
) AS c
WHERE c.RowID > $row_start AND c.RowID <= $row_end
";
$query = sqlsrv_query( $conn, $stmt ) or die( print_r(sqlsrv_error(),true));
while($obResult = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)){
$rows[]=$obResult;
}
sqlsrv_close($conn);
echo json_encode($rows);
?>
ประวัติการแก้ไข 2016-08-25 14:14:54 2016-08-25 14:50:51 2016-08-25 15:57:26 2016-08-25 16:35:39
Date :
2016-08-25 13:59:54
By :
PuYo
จากตัวอย่างที่ คห 65 คุณมี statement 2 ที่ คือบันทัด 33 และ 78
ซึ่งทั้งสองบันทัดนี้ จะให้ จำนวน row ไม่เท่ากัน เพราะ where clause ไม่เหมือนกัน
ความสำพันธ์ ของตารางต่างกัน ทั้งสองรายการ ต้องอ้างอิง result เดียวกัน
ไม่ว่าจะนับบันทัด หรือจะแบ่งบันทัดมาแสดง
และอยากให้คุณดูที่ ลิงค์นี้
https://www.thaicreate.com/php/forum/121804.html#1
ที่ 2 บันทัดสุดท้ายวิธีการหาจำนวน row เพื่อนำมาแบ่ง pagination ด้วยการคิวรี่ เอาเฉพาะส่วนที่ต้องการ
การที่คุณ คิวรี่ ทั้งหมด และส่ง result มาทุกรายการเพื่อจะแค่เอา จำนวนบันทัด
มันเป็นการขี่ช้างจับตั๊กแตน เปลืองเวลาการทำงาน
ส่วนการเรียงลำดับจากมากไปหาน้อย ก็ใส่ order by เข้าไป ว่าจะให้แสดงจากไหนไปไหน
Date :
2016-08-26 03:26:38
By :
Chaidhanan
ผมจะมาเล่าสู่กันฟังเกี่ยวกับภาษาไทยใน MS SQL SERVER 2014 และอื่นๆ ในบทความที่ผมทำ
https://www.thaicreate.com/mobile/android-edit-update-server-database.html
ที่ผมเจอเลยคือ ภาษาไทย เวลา Insert หรือ Update/Edit เข้าไปมันจะไม่เป็นภาษาไทย ตอนแรกผมใช้ Appserv ในการเชื่อมต่อกับ MS SQL SERVER 2014 ซึ่งถ้าเป็น mysql มันสามารถออกมาเป็นภาษาไทยได้อยู่โดยใช้คำสั่ง SET UTF8 เข้าไป แต่ผมใช้ไม่ได้เพราะผมต้องใช้ mssql ในการติดต่อกับ MS SQL SERVER 2014 มันจะไม่สามารถใส่ได้เหมือน mysql มันจะ ERROR วิธีของ mssql กะคือเอาไปใส่ head แล้วใส่ Charset UTF8 มัน ซึ่งผมลองทำดูแล้วผลปรากฏว่ากะไม่ได้อยู่ ต่อมา คุณ Chaidhanan กะได้แนะนำเกี่ยวกับตัว sqlsrv ซึ่งผมกะได้เปลี่ยนจาก Appserv ไปเป็น XAMPP แล้วใส่ .dll ของ sqlsrv ลงไปแล้วไปใส่ code นี้ลงไป SET ini_set('sqlsrv.charset', 'UTF-8'); ผลปรากฏว่าได้ภาษาไทยออกมา
ผมกะเลยคิดว่าน่าจะเป็นเพราะผมใช้ Appserv เวอร์ชั่น 2.5.10 ซึ่งมันเวอร์ชั่นเก่าเกินไปมันเลยไม่อ่านภาษาไทยใน MS SQL SERVER 2014
ต่อมาผมติดปัญหาเรื่อง คำสั่ง mysql กับ sqlsrv ซึ่ง 2 คำสั่งนี้ไม่ได้แตกต่างอะไรกันมากเท่าไหร่ อยู่ที่การเรียกวิธีใช้มากกว่า เป็นเพราะผมไม่เคยเจอคำสั่งนี้มันกะเลยไม่รู้จะเริ่มยังไงดี ผมกะหาอ่านตามบทความของเว็บแล้วนำมาประยุกต์ใช้ แล้วได้คุณ Chaidhanan ช่วยนี้แนะอีกที
ต่อมาสิ่งสำคัญหลักเลย ควรเช็ค Code ให้ดีก่อนมันอาจจะพลาดที่เรียกตัวแปรผิด ( ซึ่งผมเป็นบ่อย ) แต่ถ้าผิดเราไม่รู้เลยเราควรเช็คให้ดีๆ ก่อนสัก 1-2 ชม. หรือ มากกว่านั้น ถ้าอยากลองแก้เอง ซึ่งของผมถ้าติดปัญหามากเกินไป ผมกะจะมาขอความช่วยเหลือจากบอร์ดนี้ หาอ่านจากบทความมั้ง หรือ ไม่กะโพสถามเกี่ยวกับปัญหาที่เราเจอเลย คนอื่นอาจมองได้ไม่เหมือนเรา เราอาจจะมองข้ามสิ่งเล็กๆ ไป
ตอนนี้ผมทำ Code เสร็จเรียบร้อยแล้ว เหลือแต่แค่ลองให้ User Test แล้วไล่เก็บหาบัคจากที่ User เจอ
ตอนนี่ของผมเหลืออีก โปรเจค 1 นั้นกะคือ สแกน BARCODE แล้วเอาไปอ่านค่าตัวเลขจากใน DATABASE ซึ่งคุณ TC Admin แนะนำเกี่ยวกับการทำ sqlserver มาแต่ผมกะยังไม่รู้จะเริ่มมันยังไงดี ถ้ามีคนอื่นช่วยแนะนำได้ ช่วยแนะนำหน่อยนะ ครับ
สุดท้าย ขอขอบคุณ คุณ Chaidhanan ที่ช่วยชี้แนะแนวทางมาตลอดด้วย ครับ
ขอขอบคุณ คุณTC Admin เกี่ยวกับหลายๆบทความ
และขอขอบคุณทุกคนที่คอยแนะนำ ครับ
ถ้าผมติดปัญหาเจอบัคอะไรอีก รบกวนช่วยชี้แนะด้วยนะ ครับ
ประวัติการแก้ไข 2016-08-26 18:12:29
Date :
2016-08-26 18:11:53
By :
PuYo
Load balance : Server 02