ฝึกงาน #4

[07.04.2009]

วันนี้ก็ให้แก้ไขปรับปรุง asp ของเมื่อครั้งที่แล้ว

คือให้มีการทำเป็น dynamic query database

ปกติแล้ว เวลาเราเขียน sql และมีเงื่อนไขหลายๆ อัน เราจะใช้
WHERE … AND … AND … เป็นต้น แต่ในบางครั้ง การทำ web application
และมีการเชื่อมต่อฐานข้อมูล ก็จำเป็นต้องทำให้มัน query อย่างมีประสิทธิภาพมากขึ้น

เช่น การสร้างหน้าฟอร์ม ให้ผู้ใช้ค้นหา โดยที่มี input หลายช่องนั้น
ถ้าช่องไหนที่ผู้ใช้ไม่ได้ใส่ข้อมูลมา เราก็ไม่จำเป็นจะต้องใส่เงื่อนไขในการ query ไปด้วย

มาดูตัวอย่างที่ทำกันเลยดีกว่า

northwind_customer_form

จากฟอร์มด้านบน คือ ผู้ใช้สามารถใส่ข้อมูลอะไรก็ได้ แล้วกด submit เพื่อ search

(เนื่องจากว่า ไม่ค่อยมีเวลา จึงไม่ได้ตกแต่งให้สวยงาม ^^)

static :

ไม่ว่าผู้ใช้จะใส่ input company name อย่างเดียว หรือ contact name อย่างเดียว หรือ input ทั้งสองค่า sql string ที่ใช้ก็เหมือนกัน คือ

sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&“%’ and ContactName like ‘%”&request.form(“ctn”)&“%’”

(request.form(“cpn”) คือ สิ่งที่ผู้ใช้ใส่ลงมาในช่อง company name
request.form(“ctn”) คือ สิ่งที่ผู้ใช้ใส่ลงมาในช่อง contact name)


dynamic :

เมื่อผู้ใช้ใส่ input company name อย่างเดียว จะต้องได้
sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&”%’”

เมื่อผู้ใช้ใส่ contact name อย่างเดียว จะต้องได้
sqlString = “select * from Customers where ContactName like ‘%”&request.form(“ctn”)&”%’”

เมื่อผู้ใช้ใส่ input ทั้งสองค่า จะต้องได้
sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&”%’ and ContactName like ‘%”&request.form(“ctn”)&”%’”

จะสังเกตว่า ในการ search แต่ละครั้ง sql ที่ใช้ query จะไม่เหมือนกันเลย

นี่แหละจึงเรียกว่าเป็น dynamic database คือมีการเปลี่ยนแปลงตลอดทุกครั้งที่ query

ทีนี้มาดูกันว่า เราจะต้องเขียนยังไง เพื่อให้มันเป็น dynamic database

ก็ง่ายๆ ใส่ IF เข้าไปเช็ค และทำการ ต่อ sql string แค่นั้นเอง

Dim sqlString
sqlString = “select * from Customers “
If len(request.form(“cpn”)) > 0 Then
sqlString = sqlString & “where CompanyName like ‘%”&request.form(“cpn”)&”%’ “
If len(request.form(“ctn”)) > 0 Then
sqlString = sqlString & “and ContactName like ‘%”&request.form(“ctn”)&”%’”
End If
ElseIf len(request.form(“ctn”)) > 0 Then
sqlString = sqlString & “where ContactName like ‘%”&request.form(“ctn”)&”%’ “
End If

(ในที่นี้ใช้ภาษา asp ในการเขียน ซึ่งเป็น VBScript ดังนั้นจึงมี syntax คล้ายๆ ภาษา VB นั่นเอง)

ถ้าเป็นภาษาอื่นๆ ก็ทำได้เช่นเดียวกัน

ดูตัวอย่าง code : aspWithNorthwind.rar

Categories Category: Computer, Internship Tags Tags: , , ,

4 Comments

  1. ch_a_m_p says:

    เล่นงี้เลยเรอะเพ่!

  2. admin says:

    ไม่ว่างอัพเลย ก็ต้องแบบนี้กันลืมไว้ก่อน – -*

  3. KidsDev says:

    ระวัง sql injection ด้วยนะ…
    (asp ไม่รู้เหมือนกัน – -”)

  4. มะช่าย dynamic database น๊าาา ต้อง dynamic query น๊าาา ส่วนเรื่อง sql injection นี่จะเอาไว้สอนวิธีป้องกันทีหลังนะจ๊ะ อิอิ

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>