ผมเป็นคนหนึ่งที่เข้าไปห้อง tech ของเว็บ pantip.com ทุกวัน ตอบบ้างไม่ตอบบ้าง ขึ้นอยู่กับคำถาม และวันนี้ผมเจอกับคำถามหนึ่ง จริงๆคำถามในทำนองนี้ผมเจอที่นั่นบ่อย แต่ก็ไม่ได้เขียนแนะนำอะไรไป วันนี้เอาสักหน่อยเถอะ
ผมได้เขียนส่งค่า index.php?page=1 ครับ แล้วในหน้า index ก็เขียนโค้ดไว้ว่า ถ้า $page==1 ให้เิปิดหน้า support.php แต่ปรากฏว่า มันก็ไม่ยอมเปิดให้ครับ มันเปิดแต่หน้า index.php ให้ตลอด ซึ่งรันในเครื่องสามารถใช้งานได้ปกติ เป็น php v.5 แต่พออัพขึ้น server ก็เป้นอย่างที่บอกครับ ช่วยหน่อยครับ
เมื่อมองไปที่คำถาม สิ่งที่ท่านผู้ถามทำก็คือ ส่งค่าตัวแปร get ชื่อ page มีค่าเท่ากับ 1 กลับหน้าเดิม แล้วก็มีส่วนของโค้ด ที่คอยเช็กตัวแปร ถ้าเท่ากับ 1 ก็ให้เปิดหน้า support
ประเด็นที่ผมจะพูด คือตรงนี้ $page==1 ตัวแปรตัวนี้เป็นตัวแปร get แต่ท่านเจ้าของคำถามเขียนเหมือนตัวแปรธรรมดา จริงๆแล้ว php อนุญาติให้เขียนในลักษณะนี้ได้ แต่ php.ini จะต้องเซ็ต register_global = on ไว้ คือหมายถึง ให้สามารถเข้าถึงตัวแปร get หรือ post โดยใช้ลักษณะการเขียนแบบตัวแปรธรรมดา
ซึ่งการเขียนลักษณะนี้เป็นสิ่งที่ไม่ควรทำเป็นอย่างยิ่ง เพราะ
1. โค้ดดูไม่ออกเลยว่า มันเป็นตัวแปรธรรมดา หรือตัวแปรที่เกิดจากการส่งค่าผ่านฟอร์ม หรือผ่าน url ทำให้ตีความโค้ดยาก
2. บางโฮสต์ไม่ซัพพอร์ต โฮสต์บางโฮสต์นั้น เขาจะตั้งค่า register_global = off ไว้
3. จะมีปัญหาแน่นอนในอนาคต เมื่อ php เวอร์ชั่น 6 เพราะ register_global จะเท่ากับ off มาเลย และไม่สามารถปรับแก้ได้
แล้วทีนี้เราควรจะเขียนอย่างไร ?
1. ถ้าเป็นตัวแปร get เราก็เขียนอย่างนี้ $_GET[‘page’]
2. ถ้าเป็นตัวแปร post เราก็เขียนอย่างนี้ $_POST[‘page’]
3. ถ้าเป็นตัวแปร session เราก็เขียนอย่างนี้ $_SESSION[‘page’]
4. ถ้าเป็นตัวแปร environment เราก็เขียนอย่างนี้ $_SERVER[‘REMOTE_ADDR’]
ประโยชน์ที่จะได้รับ
1. ดูตัวแปรแล้วรู้ถึงที่มาของมันเลย
2. ซัพพอร์ตทุกโฮสต์
3. อนาคตหมดปัญหา
เห็นอย่างนี้แล้ว เลิกเสียเถอะครับ กับพฤติกรรมการใช้ตัวแปรแบบเดิมๆ
mrsitti says:
14/10/2552 at 14/10/2552
เห็นด้วยอย่างแรงครับ
ขอร่วมบ่นเพิ่ม
: นิสัยเสียๆ ในการเขียนโค้ดแบบมักง่ายมันถูกปลูกฝังมาตั้งแต่สมัยเรียนเลยครับ โดยเฉพาะการรับส่งตัวแปร และนิสัยที่ว่ามันเคยเป็นของผมด้วยดิ
: ตำราสอนการเขียนโปรแกรมในบ้านเรา ก็มักจะมองข้ามไปเรื่องหลักการรับส่งตัวแปร (ไปหาเปิดดูได้เลย) ในขณะที่ตำราฝรั่งจะยึดหลักโครงสร้างภาษาโปรแกรมที่ใช้เขียน
: ใครที่ทำ SEO จะรู้ Search Engine ต่าง โดยเฉพาะ กู้เกิ้ลจะชอบเว็บที่เขียนถูกต้องตามหลักภาษา
… เท่าที่สังเกตจากน้องที่ทำงาน ส่วนใหญ่ ไม่ได้ศึกษาพื้นฐานของ PHP มาเลย อยู่ๆ ก็ไปเอาโค้ด PHP มาดู+ปรับ+เปลี่ยน+ลบ+แก้ โดยไม่รู้ว่าหลักการเป็นอย่างไร เอาให้มันได้ผลออกมาตามที่ปรับก็แล้วกัน …
ดีใจครับที่ select2web ได้นำเรื่องนี้มาบอก
ผู้ที่เริ่มเขียนเว็บโดยเฉพาะท่านที่ใช้ PHP ถ้ายังใช้ register_global = on อยู่ ด้วยเหตุผลที่ว่ามันง่ายดี ผมก็ขอรับรองด้วยเส้นผมหงอกๆ หลายๆ เส้นของผมคร้บว่า งานช้างรออยู่ และยิ่งถ้าเป็นมือปืนรับจ้างทำเว็บ-เขียนสคริปด้วยแล้วยิ่งต้องรีบเลิกนิสัยส่งตัวแปรแล้วไม่ประกาศตัวแปรเพื่อรับค่า
เอาเป็นว่า select2web ของเราอาจได้เจอ “คำถามเซ็งเป็ด” อีกแน่ๆ ถ้าเว็บมาสเตอร์หน้าใหม่ของบ้านเรายังไม่ชอบศึกษาพื้นฐานที่ถูกต้องและตำราบ้านเรายังเขียนขายอย่างมักง่ายอยู่
จงสู้ต่อไปนะ select2web
7 says:
15/10/2552 at 15/10/2552
ขอแย้งข้างบนนิดนึง
google มันจะไปรู้ได้ไง ว่าเวปนั้นเขียน php ยังไง ถ้ามันรู้ เวปเราก็เปลือย code แล้วสิครับ
7 says:
15/10/2552 at 15/10/2552
หนังสือสอนบ้านเรามักจะสอนว่าข้อดีของ php คือง่าย โคตรๆ ไม่ต้องทำอะไรวุ่นวาย เขียนง่ายๆ ก็ได้ผลลัพท์ออกมาแล้ว ดังนั้น การรับค่าโดยไม่สนที่มาของมัน จึงเป็นหนึ่งในความง่ายของ php
ดังนั้นการจะมารู้อะไรวุ่นวาย ต้องทำแบบนั้นแบบนี้ เพื่อไม่ให้เกิดปัญหายังงั้นยังงี้ มันจะทำให้ php มันไม่ง่ายอย่างที่โฆษณาไว้
ความรู้พวกนี้จึงเหมาะกับคนที่มีพื้นฐานนิดหน่อยแล้ว ค่อยบอกกัน จะเหมาะกว่าบอกกันตั้งแต่ต้น แต่ต่อไปถ้าอนาคตไม่สามารถเขียนแบบนี้ได้อีก ค่อยปรับการเรียนการสอนเสียใหม่
administrator says:
16/10/2552 at 16/10/2552
เรื่องการศึกษาพื้นฐานนี่รู้สึกว่า จะอันตรายขึ้นเรื่อยๆ หลายคนที่ถามปัญหาผม ผมจะถามกลับไปเสมอๆ ว่ามีหนังสือหรือเปล่า ถ้าไม่มีหนังสือไปซื้อมาอ่าน บทที่ 1-5 ก่อนแล้วค่อยถาม
บางคนบทต้นๆ ไม่ยอมอ่าน อาจจะเพราะคิดว่ามันไม่มีอะไร หรือยังไงก็ไม่ทราบ ทั้งที่จริงๆแล้วเป็นเรื่องที่สำคัญที่สุด ไม่งั้นจะเอามาไว้ข้างหน้าทำไม
ผมมักจะพูดย้ำอยู่เรื่อยๆครับว่า ไปอ่านบทที่หนึ่ง ปิดหนังสือแล้วถามตัวเองว่า เขาอยากให้เรารู้อะไรในบทนี้ ถ้าตอบตัวเองไม่ได้ อ่านใหม่ แล้วก็ทำไปอย่างนี้เรื่อยๆ ทีละบท
แต่ก็อย่างว่า บางคนใจร้อนเกินไป
mrsitti says:
16/10/2552 at 16/10/2552
เห็นด้วยกับความคิดของท่าน platoosom และ ท่าน 7 ครับว่า “พื้นฐานสำคัญมากๆ” และเพราะไอ้ความชอบของง่ายๆ และใจร้อนนี่หรือเปล่าไม่รู้ ที่ทำให้น้องๆ ของผมมักพลาดเรื่องง่ายๆ เรื่อย (ประเภทไม่ชอบอ่านคู่มือ ซื้อหนังสือมา ก็เปิดหาไอ้ที่อยากได้ สมใจแล้วก็ปิดเลย)
สำหรับที่ท่าน 7 แย้งมา ผมก็ได้รับคำแนะนำจากคนที่เขาทำ SEO ครับ ส่วนที่ว่าเฮีย google จะรู้ได้อย่างไรนี่ ผมว่าไม่น่าจะยากครับ ขนาดค้นหาคำที่เป็นรูปภาพและ Flash เฮียยังทำได้เลยครับ (Google ค้นหาคำที่เป็นรูปภาพหรือFlash ได้แว้วววว)
อีกเรื่องสำหรับท่านที่เขียนเว็บ ลองใช้ Chrome เปิดหน้าเว็บ แล้วคลิกขวาที่หน้าเว็บ-> คลิกคำสั่ง ตรวจสอบองค์ประกอบ มันจะเปิด Developer Tools มาวิเคราะห์หน้าเว็บให้ … อันนี้ดีครับ ทำให้รู้นิสัยการเขียนโค้ดของเราขึ้นมาบ้าง ….
ไม่รู้อีกว่า google ก็จะเอาผลจากการวิเคราะห์สรุปที่ได้ จัดเก็บใน index และใครทำได้ถูกใจเฮีย เฮียก็จะให้ทิปโดยบอกคนที่ค้นหาว่า “เว็บไอ้นี่มันมีอยู่บนโลกนี่นะจ๊ะ” อะไรประมาณนี้หรือเปล่า)
… เอาเป็นว่าอะไรที่จะช่วยให้เพื่อนๆ น้องๆ ลูกๆ หลานๆ ของเรา มีนิสัยชอบ “อ่านบทที่หนึ่งก่อน” กันดีกว่า จะได้ไม่พลาดเรื่องง่ายๆ สบายเรื่องยากๆ
ขอบคุณครับ
administrator says:
16/10/2552 at 16/10/2552
มีนิสัยชอบ “อ่านบทที่หนึ่งก่อน” กันดีกว่า จะได้ไม่พลาดเรื่องง่ายๆ สบายเรื่องยากๆ
สุดยอดครับ
Luffy says:
18/10/2552 at 18/10/2552
นอกเรื่องหน่อยนะครับ
พึ่งเข้าครั้งแรก
อยากจะบอกว่าเว็บนี้ดีมากๆเลยครับ
อ่านแล้วเข้าใจง่ายมากเลย
ขอบคุณมากครับ ^^
k-66 says:
19/10/2552 at 19/10/2552
จาก ค.ห. 5 นะครับ
google ชอบเว็บที่เขียนโค้ดถูกไวยากรณ์ครับ แต่หมายถึงพวก XHTML หรือ HTML น่ะครับ (ที่ควรจะ valid ผ่าน) ….
ส่วน ไฟล์ php นี่ …. ยังไง ก็อ่านไม่ได้ครับ เพราะ google มันก็มีพฤติกรรมเหมือนๆ user เรานี่้แหละครับ เราจะเห็นแต่หน้าเว็บ (เอกสาร HTML) แต่เราไม่มีทางมองเห็นคำสั่ง php เลยครับ (เพราะเป็นคำสั่งที่ใช้ประมวลผลลัพท์ออกมาให้เราน่ะครับ และผลลัพท์ที่เราเห็นมันก็ html เท่านั้นน่ะแหละครับ)
mrsitti says:
19/10/2552 at 19/10/2552
ขอบพระคุณที่เพิ่มเติมมานะครับ …
อย่างนี้ทำให้บ้านเราน่าอยู่มากขึ้นเยอะเลย
จากการแตกลายของความคิดเห็นนี้จากผู้รู้ สงสัยท่าน platoosom ต้องพิจารณาเรื่องเทคนิก SEO แล้วมังครับ
ขอบพระคุณเพื่อนๆ ที่ช่วยกันเสริม ให้เป็นไปในทิศทางที่ถูกต้องครับ
มีอะไรดีก็เอามาแชร์เพื่อนๆ อีกนะครับ
ขอบคุณครับ
administrator says:
19/10/2552 at 19/10/2552
เรื่องเสียว (SEO) พอทราบนิดหน่อย ไม่กล้าแสดงความรู้น้อยของตัวออกมา
ยังไงก็ตาม ถ้าผมเจอหรือเห็นว่าเทคนิคบางอย่าง ควรแก่การนำเสนอ ก็จะเอามาเล่าสู่กันฟังครับ
จริงๆแล้ว เว็บผมนี้ก็แอบเสียวเล็กๆอยู่เหมือนกัน ถ้าจะให้เสียวกันทั้งประเทศต้องลองแวะเยี่ยม http://www.thaiseoboard.com ดูครับ ที่นั่น เสียวกันเป็นอาหารหลัก ทีเดียว
mrsitti says:
19/10/2552 at 19/10/2552
แวะไปเยี่ยมบ้านเสียว (SEO) มาแล้วครับ ยิ่งใหญ่มากๆ
เอาไว้ให้ชีวิตหนีเสียวไม่พ้นผมคงจะได้ไปหมกกตัวอยู่ในนั่นแน่น ข้อมูลดีๆ เยอะแยะเลย
ช่วงนี้ก็ขออยู่กับ select2web ก่อนละกัน อยากรู้ว่าโตขึ้นหน้าตาจะเป็นอย่างไร
สุ้ๆ
Kenessar says:
15/11/2552 at 15/11/2552
จริงครับ ควรจะเลิกซะที จะดีกว่า บางคนเขามักจะเถียง เวลาส่งข้่อมูลมาจากฟอร์ม ด้วยวิธีแบบ POST เขาก็เขียนแบบตัวแปรเพียวๆแบบนี้ ผมก็บอกเขานะเขียนแบบนี้ไม่ดี เขาก็เถียงใหญ่ เขียนแบบนี้ก็ได้ จะเขียนให้ยากทำไม
ผมเลยแกล้งใส่ query string ให้ดู ว่าเขียนแบบตัวแปรเพียวๆ ไม่มี $_POST น่ะ แฮ็กง่ายมากกกกกกกกกกกกกกกกกกกกก
Big Yai says:
24/11/2552 at 24/11/2552
ผมดีใจที่มีคนสนใจในเรื่อง convention ในการเขียน code ซึ่งจะมีหลักการ(หลักกู)ของ software engineer เขาแนะนำครับ มันถือเป็นพื้นฐานเลยสำหรับการทำงานเป็นทีมของนัก software ทั้งหลาย โดยที่บ้านเรามักมองข้ามเรื่องเหล่านี้ครับ ผมเห็นดีด้วย เพราะผมเจอมาแล้วครับ ที่เขียน code โดยไม่มีการบอกว่าเป็น super global หรือไม่ ในโปรแกรมที่เขียนใน style ของ PHP < 5.0 ครับ ทำให้แกะ code ยากมากจนเลิกแกะครับ 5555
Ads says:
20/01/2553 at 20/01/2553
ผมว่าหนังสือหลายๆเล่มก็เขียนไม่เหมือนกัน
บางทีก็งงว่าอย่างไหนกันแน่ที่ถูกต้อง
เลยต้องลองผิดลองถูกกันไปเอง
administrator says:
20/01/2553 at 20/01/2553
จริงๆแล้ว ผมว่ามันก็ถูกทุกเล่ม แต่มันถูกในช่วงเวลาหนึ่งๆ เท่านั้น พอเวลาเปลี่ยนไป เทคโนโลยีหรือเวอร์ชั่นของภาษาเปลี่ยนไป มันก็ไม่ค่อยถูกแล้ว
เด็กบางคนก็ทะลึ่งชอบใช้หนังสือเก่า ไม่อยากซื้อใหม่ เพราะคิดว่าตัวเองจะใช้แค่เทอมเดียว ตกทอดกันมาตั้งแต่รุ่นปู่สู่รุ่นหลาน