ให้คะแนนเวปร้านอาหาร
ตอนนี้ทำเวบเกี่ยวกับร้านอาหารอยู่ครับ อยากจะให้คะแนนร้านอาหาร โดยที่ตรงหน้าร้านอาหารแต่ล้ะร้านจะมีปุ่ม ชอบ กับ ไม่ชอบ
ถ้าหากเลือกชอบก็จะบวกคะแนนให้กับร้านนั้น 1 คะแนน แต่ถ้าไม่ชอบก็จะลบคะแนนของร้านนั้น 1 คะแนน และถ้าร้านไหนได้คะแนนน้อยไปกว่า -5 แล้วก็จะลบร้านนั้นออกจากระบบ โดยที่คนนึงจะโหวตร้านอาหารร้านนึงได้เพียง 1 ครั้ง ต้องทำอย่างไรครับ
ถ้าหากเลือกชอบก็จะบวกคะแนนให้กับร้านนั้น 1 คะแนน แต่ถ้าไม่ชอบก็จะลบคะแนนของร้านนั้น 1 คะแนน และถ้าร้านไหนได้คะแนนน้อยไปกว่า -5 แล้วก็จะลบร้านนั้นออกจากระบบ โดยที่คนนึงจะโหวตร้านอาหารร้านนึงได้เพียง 1 ครั้ง ต้องทำอย่างไรครับ
การเขียนโค้ดจากแนวคิด คำแนะนำคือ
1.ทำความเข้าใจแนวคิด และ ขั้นตอน อย่างละเอียดก่อน ถ้าไม่เข้าใจ แปลงแนวคิดเป็นโค้ดไม่ได้
2.แตกความคิดออกเป็นขั้นตอน ที่ควรทำตามลำดับ โดยทั่วไป จะแบ่งออกเป็น
2.1 input หมายถึงขั้นตอนการ รับ ข้อมูล ข้อมูลมาได้อย่างไร event เพื่อ รับค่า
2.2 ประมวลผล เอา input ไปประมวลผล ตามความต้องการ
2.3 เอาผลลัพท์ กลับไป แสดงผล
สิ่งที่ผมเห็นคือ น่าจะเข้าใจขั้นตอนของงานได้ดี เนื่องจาก อธิบายความต้องการได้
อย่างแรกคือ input ง่ายๆคือ การ vote คะแนนละครับ ออกแบบปุ่ม และ event ให้เรียบร้อย ในกรณีนี้ สามารถใช้งาน Ajax ได้ เพื่อให้ไม่จำเป็นต้อง refresh หน้า เมือมีการ vote เมื่อกด vote ก็จะไปขั้ตอนที่ 2 ต่อไป
อย่างที่ 2 รับค่าจาก Ajax ไปบันทึกผลคะแนน vote ด้วยการ บวกลบ ค่าคะแนนตามที่ต้องการ เสร็จแล้วบันทึก ขั้นตอนนี้ เราสามมารถส่งค่าคะแนนล่าสุด กลับก็ได้นะครับ เพื่อสามารถนำไปใช้แสดงได้ทันที
ขั้นตอนสุดท้าย รับค่าที่ได้กลับมาจากส่งไปในขั้นตอนที่ 2 เราอาจเอาผลลัพท์ที่ได้มาแสดงผล vote ได้ทันที รวมถึงว่า หากคะแนน น้อยกว่าที่กำหนด ให้ลบไปเลยด้วยก็ได้
ทั้งหมดด้านบน สามารถทำได้โดยไม่ต้อง refresh หน้า หากใช้ Ajax
ส่วนการจำกัดการ vote 1 คน ต่อ 1 ครั้ง ไม่ได้บอกว่า ต่อวัน หรืออย่างไร โดยปกติ ก็ให้บันทึกการ vote ไว้ละครับ ด้วย วิธีใดก็ได้ เช่น ลง db ลง cookie หรือ อะไรก้ได้ตามถนัด ว่า คนนี้ได้ vote แล้ว (ถ้าเป็นบุุคลทั่วไป อาจต้องใช้ ip หรือ session ในดารยืนยันตัวตนว่าใคร vote) ซึ่งการตรวจสอบ สามารถทำได้ในขั้นตอนที่ 2 ครับ
การจำกัดการ vote ไม่มีวิธีที่สมบูรณ์ 100% นะครับ ทุกวิธีเท่าที่นึกออกมีช่องว่างให้โกงได้ทั้งนั้น (ยาก-ง่าย ต่างกัน) บนเว็บมีคำอธิบายเกี่ยวกับเรื่องนี้อยู่ ลองหาอ่านดูครับ ตัวอย่างโค้ด vote ก็ดูได้จาก Sticker Vote ครับ