OnClientClick with Validation in ASP.Net

OnClientClick with Validation on ASP.Net

เมื่อ input ต้องการ validate รวมถึงการ confirm พร้อมๆกันจะทำอย่างไร ในเมื่อการใส่อย่างใดอย่างหนึ่งก็สามารถทำงานได้ในตัวของมันเอง แต่หากนำมันมารวมกัน ก็จะพบว่าการ validate input นั้นไม่ทำงาน

OnClientClick with Validation in ASP.Net

มีวิธีการแก้ไข 2 วิธี
1. ให้ alert confirm input ก่อน แล้วค่อยทำการ validate วิธีนี้ต้องใส่โค๊ดด้านล่างไว้ที่ Page_Load

btnSubmit.Attributes.Add("onclick", "if(confirm('do this ?') == false) return false;");

2. ให้ validate ก่อน แล้วค่อย alert confirm input ให้ใส่โค๊ดนี้ในส่วนของ asp:Button

OnClientClick="if (Page_ClientValidate('vd1')){return confirm('Are you sure you want to perform this action?')}"

OnClientClick with Validation in ASP.Net
สำหรับ page ไหนที่มี ValidationGroup หลายตัว ให้ใส่ชื่อ group นั้นใน Page_ClientValidate(‘….’) ด้วย แต่ถ้ามี group เดียวก็ปล่อยว่างได้ครับ
สามารถอธิบายในส่วน if (Page_ClientValidate()) ได้ว่า ถ้าผ่านการ validate เรียบร้อยแล้ว จะทำงานในส่วนของภายใน if ดังนั้นถ้า validate ไม่ผ่าน ก็จะไม่เกิดอะไรขึ้นในส่วนนี้ครับ

ขอบคุณ
msdotnetsupport
stevekinsey

หวังว่าข้อมูลนี้จะเป็นประโยชน์ไม่มากก็น้อยนะครับ

Client does not support authentication protocol MySQL

Client does not support authentication protocol requested by server; consider upgrading MySQL client.

ปัญหานี้เกิดจากการ upgrade MySQL version ไปยัง version 4.1+ เนื่องจากใช้วิธีในการเข้ารหัส user ต่างกัน ใน version ก่อนหน้า 4.1 ใช้การเข้ารหัสด้วยความยาว 16 bytes แต่ใน version หลังจาก 4.1 ใช้ความยาวถึง 4.1 bytes ทำให้การ upgrade version มีปัญหา

การแก้ปัญหาคือต้องไปเปลี่ยนการเข้ารหัสแบบใหม่นั้น ให้กลายเป็นแบบเก่า เพราะว่าเรายังคงใช้เทคโนโลยีอื่นๆในแบบเก่าอยู่ จึงต้องปรับให้ support กัน

วิธีการแก้ปัญหาตามนี้
1. เข้าไปยัง root database ของ MySQL
– ไปที่ command prompt แล้วไปยัง MySQL Directory\bin จากนั้นพิมพ์

1
mysql -u root -p

ระบบจะร้องขอ password ให้ใส่ลงไปแล้ว enter
– หรือไปที่ start->All Programs->MySQL->MySQL Server 4.1->MySQL Command Link Client
จากนั้นก็ใส่ password
MySQL Command
2. ใส่คำสั่งนี้ไปเพื่อ update password ให้เป็นแบบ old password

1
2
3
4
UPDATE mysql.USER
SET password=OLD_PASSWORD('somepassword')
WHERE USER='someuser'
AND host='somehost';

ควรจะทำกับทุก user ที่มี เพราะถ้าไม่ทำ ก็ใช้งานไม่ได้ ลอง select มาดูก่อนก็ได้ ว่า user มีใครบ้าง

1
SELECT USER FROM mysql.USER

3. หลังจากนั้นให้ flush table เพื่อ update ข้อมูลที่เพิ่งแก้ไขไป

1
FLUSH privileges;

4. ทดสอบเข้า phpmyadmin เพื่อดูว่าใช้งานได้รึไม่ น่าจะได้นะครับ (ถ้าไม่ได้ก็… ไม่รู้ทำยังไงเหมือนกัน ^ ^)

ขอบคุณ
thaicyberpoint
digitalpeer

หวังว่าข้อมูลนี้จะมีประโยชน์ไม่มากก็น้อยนะครับ

Access Plesk Database (MSSQL, MySQL, MS Access)

Plesk Control Panel คือเครื่องมือช่วยในการบริหารจัดการ server ให้สามารถดูแลได้ง่าย ใช้ได้ง่าย เข้าใจง่าย แต่ถ้ามีบางครั้งที่เราต้องการใช้งาน plesk ในระดับลึกๆ ที่ตัวหน้าเว็บของมันไม่ support หรือบางครั้งต้องเข้าไปแก้ไขในกรณีที่เกิดข้อผิดพลาดบางอย่าง เราต้องอาศัยการเข้าถึง Database ของ Plesk

ตอนที่เรา create database หรือ create database user สำหรับ db นั้นๆ เวลาเราเรียกดู ไม่ได้หมายความว่า plesk จะเข้าไปยัง database นั้นๆ เพื่อ view user ทั้งหมดให้กับเรา แต่เป็นการที่ plesk ดึงข้อมูลมาจาก database ของตัวมันเอง ถ้าเกิดเราลบ database ที่ plesk เคย create ให้โดยการ remote เข้าไปลบ จะส่งผลให้ข้อมูลใน plesk กับของจริงไม่ตรงกัน ดังนั้นเราจึงต้องทำการแก้ไข database ของ plesk โดยตรง

ขั้นตอนแรกให้เราทดสอบว่า plesk database เป็นชนิดใด (ส่วนใหญ่เป็น MySQL)
ทำตาม link นี้เลยครับ ขั้นตอนการตรวจสอบว่า plesk ใช้ database ชนิดใด

ผมขออนุญาตเจาะลึกแค่ database MySQL เท่านั้นนะครับ เพราะว่าเป็นประสบการณ์ตรง
(ในที่นี้เป็น windows server 2003)
1. เปิด command prompt ขึ้นมา (start -> run -> cmd)
2. เข้าไปยัง path ของ plesk MySQL ดังนี้

1
2
cd %plesk_dir%\Databases\MySQL\bin
cd %plesk_dir%\MySQL\bin

คิดว่า path ของ database น่าจะเป็นอันใดก็อันหนึ่งจาก 2 บรรทัดนี้ ให้พิมพ์แล้วกด enter เลยครับ
3. พิมพ์คำสั่งนี้ลงไปเพื่อ access เข้า database

1
mysql -P8306 -uadmin -p<plesk_admin_password> psa

-uadmin หมายความว่า username ของ plesk คือ admin
-p หมายความว่า plesk_admin_password ก็ต้องเป็น password ของ admin
psa คือชื่อของ plesk database
ดังนั้นถ้า username : admin แล้ว password : aspgodadmin
ก็ควรจะพิมพ์ดังนี้

1
mysql -P8306 -uadmin -paspgodadmin psa

โดยที่เครื่องหมาย < และ > ที่ครอบ plesk_admin_password ไม่เกี่ยวข้องด้วยเลย
4. เมื่อ login สำเร็จ ตอนนี้จะเป็นหน้าจอสำหรับใส่คำสั่ง sql ลงไป ให้เข้าเว็บ pleskhacker เพื่อดูว่า plesk database มี table อะไรบ้าง สามารถ query มาดูโครงสร้างเพื่อจัดการกับข้อมูลต่างๆได้

Access Plesk Database

หวังว่าข้อมูลนี้จะเป็นประโยชน์ไม่มากก็น้อยนะครับ

Method Post on Code Behide with asp.net (แก้ปัญหาภาษาไทย)

จากเนื้อหาเก่า Method Post on Code Behide with asp.net มีปัญหาในการส่งข้อมูลประเภทภาษาไทย ดังนั้นในส่วนของการ encode ให้ทำแบบนี้ วิธีนี้ได้มาจาก krucode.net ครับ

1
2
System.Text.Encoding encoder= System.Text.Encoding.GetEncoding(65001);
byte[] byteData = encoder.GetBytes(outputBuffer);

เมื่อเอามารวมกันเต็มๆก็จะเป็นแบบโค๊ดด้านล่างครับ

1
2
3
4
5
6
7
8
9
10
11
12
13
string responseString = "";
string outputBuffer = string.Format("msg={0}&senderemail={1}&sendername={2}&tel={3}",mail.Msg, mail.SenderEmail, mail.SenderName, mail.Tel);
WebClient postWebClient = new WebClient();
postWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string postUrl = "http://localhost:53680/aspgod/contact_receive.aspx";
 
// encode
System.Text.Encoding encoder= System.Text.Encoding.GetEncoding(65001);
byte[] byteData = encoder.GetBytes(outputBuffer);
 
byte[] responseArray = postWebClient.UploadData(postUrl, "POST", byteData);
responseString = System.Text.Encoding.ASCII.GetString(responseArray);
Response.Write(responseString);

สำหรับคนที่ส่งสัยว่าทำไมต้องเป็นเลข 65001 ให้ตามมาดูที่ System.Text.Encoding.GetEncoding(WhatValidStrings) ได้เลยครับ

Method Post on Code Behide with asp.net

การส่งข้อมูลระหว่าง page สามารถทำได้ 2 วิธี

1. get method

2. post method

สำหรับแบบ get ใครๆก็ทำได้ แค่เรียก url แล้วใส่ parameter ตามหลังไป เช่น www.aspgod.com/view.aspx?id=30 กรณีนี้อาจไม่ปลอดภัยเพราะแค่เปลี่ยน parameter ก็สามารถเข้าถึงหน้าต่างๆได้ หากเราต้องการความปลอดภัยของข้อมูลที่มากกว่านี้ แนะนำให้ใช้ method post

การส่งแบบ post โดยปกติในรูปแบบของ html ก็สามารถทำได้ง่ายแค่เปลี่ยนหัวของ form แต่หากเป็น aspx และเราต้องการนำข้อมูลนั้นๆมาประมวลผลก่อนแล้วค่อยส่งไปหน้าอื่นๆ เราต้องทำผ่าน code behide แล้วค่อยส่งข้อมูลไปยังหน้าอื่นโดยใช้ WebClient เข้ามาช่วย ตามตัวอย่างข้างล่างเลยครับ

1
2
3
4
5
6
7
8
9
10
string responseString = "";
string outputBuffer = string.Format("msg={0}&senderemail={1}&sendername={2}&tel={3}",mail.Msg, mail.SenderEmail, mail.SenderName, mail.Tel);
WebClient postWebClient = new WebClient();
postWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string postUrl = "http://localhost:53680/aspgod/contact_receive.aspx";
 
byte[] byteData = System.Text.Encoding.Default.GetBytes(outputBuffer);
byte[] responseArray = postWebClient.UploadData(postUrl, "POST", byteData);
responseString = System.Text.Encoding.ASCII.GetString(responseArray);
Response.Write(responseString);

เป็นระบบส่ง mail โดยการส่งไปให้หน้า contact_receive.aspx เป็นผู้ส่งเมลล์ให้ หากส่งสำเร็จก็จะ Response.Write(“success”); กลับมา ทำให้เราตรวจสอบได้ว่าถูกต้องหรือไม่ หากทำตามตัวอย่างนี้ก็สามารถส่งข้อมูลผ่าน method post ด้วย code behide ได้ครับ

install php5.x on IIS 6 with msi installer

แบบว่าเพิ่งซื้อ server มาใหม่ อยากจะทำให้มันรันได้ทั้ง .net และ php โดยใช้ IIS 6 (windows server 2003) เป็น web server ก็เลยพยายามหาวิธี config ให้สามารถรัน php ได้ ลองหาข้อมูลจากหลายๆแหล่งก็ไม่สามารถ config ได้ (เป็นแค่ผมคนเดียวรึเปล่าก็ไม่รู้นะครับ) แต่เมื่อมาพบกับบทความหนึ่งก็ถึงบางอ้อ ไม่น่าไปเสียเวลาอยู่ตั้งนานสองนาน http://my-affiliate-story.blogspot.com/2010/02/problem-with-installation-of-php.html

ประเด็นมันอยู่ตรงนี้ครับ เดี๋ยวนี้ php เค้าทำ version สำหรับ .net server เพื่อเอาไว้ลงกับ IIS โดยเฉพาะ อำนวยความสะดวกให้เรามากมาย ถึงขนาดทำไฟล์ msi installer ให้กับชาว .net เพียงแค่ดับเบิ้ลคลิกที่ไฟล์นั้นก็จบเรื่อง มาดูกันครับว่าจะโหลดมาใช้งานและ install ได้อย่างไร

1. เข้าไปที่ http://windows.php.net/download/ เพื่อ download program มาติดตั้ง
2. เลือกโหลดไฟล์ Install ตามภาพนี้เลยครับ
install_php_on_iis
2.1 สำหรับคนที่งงๆว่าทำไมต้องใช้ VC9 x86 Non Thread Safe ให้ดูที่แถบด้านซ้ายมือคับ มีการอธิบายความหมายไว้อย่างดี
install_php_on_iis-2

Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
If you are using PHP with IIS you should use the VC9 versions of PHP
VC6 Versions are compiled with the legacy Visual Studio 6 compiler
VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with apache.org binaries

เน้นข้อความสีแดงครับ บอกว่าถ้าใช้ IIS ให้ใช้เวอร์ชั่น VC9 เท่านั้น

3. เมื่อ download เสร็จก็ดับเบิ้ลคลิกเลยครับ เลือกติดตั้งแบบ FastCGI

4. next and click จนจบครับ ในขั้นตอนนี้ถ้าหากเรายังไม่มี extention ตัวใด แล้วมันแนะนำให้ติดตั้ง ก็ทำตามนะครับ

5. ทดสอบดูว่าใช้งานได้จริงหรือไม่ ไม่ต้องสร้าง virsual directory ใหม่นะครับ แค่เอาไฟล์ .php ไปวางไว้ใน C:\interpub\wwwroot แล้วลอง http://localhost/testphp.php ดูครับ (ขั้นตอนนี้ทำไม่เป็นก็แย่แล้วว)

Case Sensitive SQL Query with SQL Server

ปกติแล้ว sql server ถ้าเรา select อะไรก็ตามแล้ว where name = ‘oue’ ผลลัพธ์ที่ได้มาก็จะมีทั้ง oue, Oue, oUe, ouE เพราะว่า default เป็น non Case Sensitive แต่ถ้าผมต้องการให้ query เฉพาะ ‘oue’ ล่ะจะทำอย่างไร ก็ทำตาม code ด้านล่างเลยครับ

1
2
3
select *
from user
where nickname COLLATE Latin1_General_CS_AS = 'oue'

แค่นี้เอง สั้นๆง่ายๆ ครับ