Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > แนวทางการแก้ไขCode จากหนังสือสร้างWeb Application อย่างมืออาชีพด้วย PHPฉบับ Workshop เล่ม 2.>>Basket_cal.php ที่เป็นปัญหา



 

แนวทางการแก้ไขCode จากหนังสือสร้างWeb Application อย่างมืออาชีพด้วย PHPฉบับ Workshop เล่ม 2.>>Basket_cal.php ที่เป็นปัญหา

 



Topic : 069913

Guest




สวัสดีครับ ผมคุณบอลล์ ทำงานสายคอมพิวเตอร์ ปัจจุบันมีร้านอีคอมเมอร์สเป็นของตัวเอง ขอใช้กระดานนี้แบ่งปันประสบการณ์ Code ที่เป็นปัญหา จากหนังสือเล่มข้างต้น แนวทางการแก้ปัญหาไฟล์ Basket_cal.php ของผมมีดังนี้

ข้อแรก หน้า 230 ไฟล์ปัญหาแรก basket_add.php ตัวนี้ เป็นปัญหาจากการเปิด session ขึ้นมาเพื่อใช้งาน แล้วตัวแปรที่ใช้เซสชั่นก็ดันเป็น อาเรย์เข้าไปอีก เล่นเอามือใหม่ ที่เกือบงง แกะโค้ดกันไม่ผ่านเป็นส่วนมาก
ข้อนี้ ขอให้ทบทวนกันก่อนว่า การเปิด session มี หลักๆ 2 แบบ คือ

1.เปิดการใช้งานแบบ ฟังก์ชั่น คือแบบนี้ session__register() ซึ่งเหมือนในหนังสือใช้ ในหน้า 230 แต่มีเงื่อนไขทาง Server ว่า ใน ไฟล์ php.ini ตัว register_globals จะต้องset ค่าเป็น On ไม่งั้นใช้งานไม่ได้ ทำไม เพราะ Server จำนวนมากเลยที่เดียวที่ไม่เซ็ทให้เป็น On เนื่องจากการเปิด session แบบนี้ไม่ค่อยปลอดภัย ผมเชื่อว่า คนที่ใช้ SERVER ต่างประเทศจะพบกรณีนี้มากที่สุด ในไทยหากไม่ได้ก็คือสาเหตุเดียวกัน หากคุณเข้าถึง php.ini ได้ ไปเซ็ทเสียก็จบเรื่องครับ

2.กรณีที่ไม่ได้ ให้ใช้การเปิด session แบบ ผ่านอาร์เรย์ ทำไมไม่แนะนำแบบ คุั้กกี้ นั่นเพราะ ลูกค้า บางส่วนบางองค์กร เขาปรับระดับความปลอดภัยสูงมากในตัว Browser จบครับ โปรแกรมที่เขียนไปใช้ไม่ได้ ตัดปัญหา เอาอันนี้เลยผ่านอาร์เรย์
เพราะทั้งปลอดภัยและเข้าได้กับทุกระบบ เป็นแบบนี้ $_SESSION["ตัวแปร"];

ทีนี้ปรับอย่างไร หน้า 230 ไฟล์ basket_add.php

ส่วนหัวที่เริ่มมีการเปิดเซสชั่น แบบฟังก์ชั่น ให้เราแก้เป็นแบบผ่านอาร์เรย์ทั้งหมด ดังตัวอย่างนี้

จากของเดิม session_register("sess_id"); ให้เปลี่ยนเป็น $_SESSION["sess_id"]; แก้ให้หมดทุกตัว


ถัดลงมา หากยังไม่โอนค่าตัวแปรที่ประกาศผ่านเซสชั่น ก็ให้เอา $_SESSION["sess_id"] ไป paste ทับตัวแปร $sess_id ในวงเล็บ
ของ else if ด้วย อย่าลืม copy ไปทั้งหมดเลย

จากนั้น ล่างสุดของหน้า 230 จะเป็นส่วนรับค่าที่เป็นจากฐานข้อมูล มาใส่เรียงกันเป็นอาร์เรย์ ในแต่ละตัวแปร ให้จัดการโอนค่าดังนี้

$_SESSION["sess_id"][] = $rs[id_prd];

เป็นต้นทำจนครบทุกตัว เท่านี้ก็จะทำให้ เซสชั่น ทุกตัวมีค่าอยู่ภายในตัวแปรแต่ละตัว พร้อมนำไปใช้ ซึ่งต้องไปประสานกับไฟล์ basket.php ต่อไป จบส่วนที่หนึ่ง

ส่วนที่สอง ไฟล์ basket.php

ส่วนนี้คือรับค่าจากในอาร์เรย์ของแต่ละตัวแปร ที่ใช้ SESSION เป็นทางผ่านที่เราเพิ่งประกาศไปนั้น มาใช้งาน ให้เติม สคริปต์ต่อไปนี้ในส่วนหัว คือ

$sess_id = $_SESSION["sess_id"]; แล้วก็ทำจนครบทุกตัว จากที่มันส่งมาจากหน้า basket_add.php

อ้อ อย่าลืมว่า ต้องมีการเปิดใช้ session โดยรวมในส่วนหัวก่อนทุกหน้าที่จะมีการใช้ session คือ

<?
session_start();
?> ห้ามลืม


อีกตัวที่เป็นตัวสะกัดดาวรุ่ง อยู่ในหน้า 233 หากเราหวังจะเอามาแก้ๆ ก็อปๆ รับรองยังไงก็ไม่ผ่าน เพราะแม้โค้ดจะถูกต้องแต่ เขียนสคริปต์แบบ ไร้ทิศทาง มันก็ไม่ทำงาน ดูที่ท้ายของตัวสคริปต์ เห็นกันไหม 2 บรรทัด ท้ายสุด ก่อนจะปิด form มีอะไร
มันคือการฝากส่งค่า อีก 2 ตัว ไปกับ form เพื่อไปยังหน้า basket_cal ซึ่งผมว่า น้อยคนจะเห็น และแม้จะแก้ไขโค้ดทั้งหมด
มาแล้ว ได้แล้วแต่พอจะกดให้ไป คำนวณใหม่ มันก็ไม่ไป กดไป สั่งซื้อสินค้า มันก็ไม่ไปอีก เพราะอะไร มาดูกัน

2 บรรทัดนี้ จะมีตัวแปร 2 ตัวที่ไปยังหน้า basket_cal คือ calculate กับ complete เห็นไหมครับ เห็นแล้ว ผมถามหน่อย
หากจะใช้งานในหน้าต่อไปต้องทำอย่างไร ตอบได้ไหม ไม่ได้ ต้องกลับไปเรียนใหม่ อย่ารีบครับ ตอบว่า มันต้องรับค่าในหน้า
basket_cal สิครับ

คำถามต่อไป ให้ไปหน้า 234 เป็นสคริปต์ของ basket_cal ดูสิครับ เห็นไหม มีส่วนไหนเขียนไว้่รับค่า $calculate กับ $complete บ้าง
ไม่มีนะครับ ตรงนี้ล่ะ ที่มือใหม่จำนวนมาก ผ่านหนังสือเล่มนี้ไม่ได้ ต้องมี อีก 2 ประโยคครับ

คือ $calculate = $_POST[calculate]; และ
$complete =$_POST[complete];
ครับ

หาก Post ไม่ได้ให้ใช้ GET แทนครับ

นี่ล่ะที่มาของปัญหา ขึ้นหน้าขาวไม่ทำงาน ครับ ที่หลายคนงงว่า เพราะอะไร ลองอ่านสคริปต์ basket_cal.php 4-5 บรรทัดสุดท้ายดูครับจะพบว่า อ๋อมันยังนี้นี่เอง

แต่ข่าวร้ายคือ ที่ผมพบ มันก็ยังไม่ทำงานอยู่ดี เพราะเลข จำนวนการสั่งซื้อยังเหมือนเดิม ข้อนี้ ใครทำผ่านขอให้มาเฉลยด้วย

ส่วนของผม ผมคิดต่างครับ มาถึงแบบนี้แล้ว เมื่อมันทำงานโดยสามารถผ่านหน้า backet_cal ไปยังหน้า อื่นได้ ใน4-5 บรรทัดสุดท้าย
ไม่ง้อครับ ผมใช้มันเป็นทางผ่าน ดิบๆ เลย ผมเขียนโดยค่า เซสชั่น มันก็ใหม่ๆ จากที่เราปรับมา ใช่ไหม เราก็เอามันไปลง ฐานข้อมูลสิครับ
เท่านี้เอง โดยมีแนวทางดังนี้

1.สร้างอีกหน้าขึ้นมา ให้ชื่อ takesession.php เอามารับค่าเซสชั่นใหม่ ที่เราเปลี่ยนตัวเลขจำนวนชิ้น พร้อมรับรายละเอีดยชื่อต่างๆ ของผู้ซื้อมาเลยพร้อมกัน ไปลอกมาจาก prd_order.php ง่ายๆ ไล่สคริปต์ดีๆ ว่ามันต้องไปไฟล์ไหนต่อก็ลอกมา อ้อแต่ขอให้สร้างฐานข้อมูลต่างหากออกมาใหม่หมดนะครับ แต่ฟิลด์ ต้องชื่อเดียวกัน ห้ามเปลี่ยน

2.แทนที่จะจบเลยไม่ครับ เราให้มันลงฐานข้อมูลเสร็จ ยังให้มันมาหน้าไว้ดูของใหม่ ที่ปรับแล้ว อาจจะชือ ok_view.php โดยใช้มีการเอาค่า ของหมายเลขการสั่งซื้อล่าสุดมาเปิดด้วย ตรงนี้ต้องโมกันดู ไม่ยาก เพื่ออะไร เพื่อจะได้เห็นว่า เออนี่
เป็นรายการใหม่ของคุณนะ

3.จากนั้นกดที่หมายเลขสั่งซื้อล่าสุด มันคือ ref_id_order ครับ ลองดูในตารางกันนะครับ ก็จะไปยังรายละเอียดว่า ผู้ซื้อคนนี้สั่งอะไรบ้างกี่ชิ้น ตรงนี้ไปเอามาจาก ไฟล์ส่วนหลังร้าน order list ใน admin_menu.php ครับ ของ admin ลบ password ออกด้วย

4. เมื่อมีชื่อคำสั่งซื้อ มีชื่คนสั่ง คุณก็ใช้สคริปต์ ไปเปิดฐานข้อมูลมาได้ ที่ละตัว กดของตัวแรก ก็เข้าไปแก้ ให้มัน ไป update ที่ฐานเดิม
เท่านี้ก็เปลี่ยนเลขได้แล้ว แล้วก็วนมาหน้าของข้อ 3. แก้ตัวอื่นต่อ แบบนี้ไปเรื่อย เอาตัวอย่างจากของ admin_menu.php ครับ

5. เสร็จแล้วจบ การคำนวณใหม่ กดส่งไปเอาระบบให้ admin ตรวจคำสั่งซื้อได้เลย หรือ เขียนให้มันลิงค์บัตรเครติดจ่ายเงินก็จบครับ

ผมทำแบบนี้และใช้งานได้อย่างดีครับ ลองนำไปพัฒนาต่อยอดกันดูครับ สวัสดี
ให้ไว้เป็นวิทยาทาน ในฐานะเพื่อนผู้ผ่านประสบการณ์เดียวกันมา ถึงตาคุณล่ะ โชคดี :0)



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-12-05 09:28:24 By : คุณบอลล์ ช. View : 2636 Reply : 2
 

 

No. 1

Guest


เพิ่มเติมอีกหน่อย

1. จงระวังเรื่องการคำนวณตัวเลข ซ้ำ ว่าต้องถูกเสมอ หากผิด ลูกค้าหนีหมด
2. ขั้นตอนแล้วแต่ใครจะเพิ่มลด ตามสบาย
3.ข้อ 2 กับ 3 เชื่อมโยงกัน ควรอยู่คนละไฟล์ ไปละเอียดที่ 3






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-05 09:40:43 By : คุณบอลล์ ช.
 


 

No. 2

Guest


ใครมีคำถามเพิืมเติม ฝากไว้ได้ครับ ผมจะเข้ามาตอบ

คุณบอลล์ ช.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-07 14:22:06 By : คุณบอลล์ ช.
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : แนวทางการแก้ไขCode จากหนังสือสร้างWeb Application อย่างมืออาชีพด้วย PHPฉบับ Workshop เล่ม 2.>>Basket_cal.php ที่เป็นปัญหา
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่