Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« เมื่อ: 08 สิงหาคม 2017, 15:31:43 » |
|
ผมกำลังเขียนเว็บ php เล็กอันหนึ่ง ตอนนี้ใกล้เสร็จเเล้ว ขาดแต่ว่า จะสร้างหน้าใหม่ ยังไงครับ? มันมีแค่ตารางเดียว แล้วในตารางนั้นก็มี 5 column อ้ะ หน้าเว็บโชว์ทั้งหมด show.php แต่จะสร้างหน้าใหม่ ยังไงเหรอครับให้แต่ละหน้าแยกแสดงเป็น url แต่ลหน้า มีข้อมูล เป็น TOPIC1 + content1 เป็นแบบนี้ครับ พอกด domain.com/topic1 เข้าไปจะเป็น -------- แสดง TOPIC1 แสดง content1 -------- พอกด domain.com/topic2 เข้าไปจะเป็น -------- แสดง TOPIC2 แสดง content2 -------- ช่วยชี้แนะด้วยครับ
|
|
|
บันทึกการเข้า
|
|
|
|
|
picharnan
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 90
ออฟไลน์
กระทู้: 1,400
|
|
« ตอบ #2 เมื่อ: 08 สิงหาคม 2017, 15:52:53 » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #3 เมื่อ: 08 สิงหาคม 2017, 16:01:22 » |
|
การเพิ่มหน้า ก็คือการ Insert เอาข้อมูลไปเก็บในฐานข้อมูลโดยใช้ฟอร์มเป็นตัวจัดการส่งค่า ตัวอย่าง ตามลิ้งครับ https://www.w3schools.com/php/php_mysql_insert.asp ฟอร์มส่งข้อมูล ลองดูตามลิ้งค์นี้ครับ https://www.tutorialrepublic.c...ial/php-mysql-insert-query.php ในลิ้งที่ให้ไว้ จะมีเมนูด้านซ้ายมือ ลองเลือกดูครับ มีทั้ง update ไว้แก้ไขข้อมูล delete และอื่นๆ พอเป็นแนวทางในการเริ่มต้นที่ดี *************** ไหนๆแล้ว ก็อยากบอกเพิ่มเติมว่า ควรเริ่มต้นด้วยการออกแบบโครงสร้างตารางให้ดีด้วยนะครับ เช่น ฟิลด์ topic ควรตั้งค่าให้เป็น unique ซึ่งจะทำให้ ในฟิลด์นี้ ไม่มีข้อความที่ซ้ำกันได้เลย (ถ้าคุณพยายาม insert ข้อความที่ซ้ำกันเข้าไปยัง topic มันจะเออร์เรอร์) ซึ่งก็คือ ไม่สามารถเพิ่มเข้าไปในฐานข้อมูลได้ เงื่อนไขนี้มีข้อดีคือ คุณใช้การส่งค่าแบบ domainname.com/หัวข้อ1 ได้โดยไม่ต้องกลัวว่าจะเกิดความผิดพลาด(ถ้า หัวข้อ1 มีอยู่จริง) แต่ถ้าคุณไม่ทำให้มันเป็น unique เวลาเรียก หัวข้อ1 แล้วบังเอิญมันมี หัวข้อ1 อยู่ซ้ำกัน ข้อมูล content ที่ได้ อาจไม่ตรงกับที่ต้องการได้ครับ ในกรณีนี้ การเรียกแบบ domain.com?id=1 จะให้ผลที่ถูกต้องกว่า ถ้าฟิลดฺ id มีค่าที่ไม่ซ้ำกัน ************************ ลองทดสอบ โดยเพิ่ม เร็คคอร์ด id=4, topic=หัวข้อ2, content=เนื้อหาหัวข้อ4 ดู แล้วเรียก domain.com/หัวข้อ2 *********************** มันยากไปในตอนนี้ ค่อยๆเริ่มไปก่อนก็ได้ครับ ความผิดพลาดจะช่วยให้เราดีขึ้น
|
|
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2017, 16:33:53 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #4 เมื่อ: 08 สิงหาคม 2017, 16:41:15 » |
|
ขอบคุณทุกท่านครับ ผมอาจจะถามผิดไปหน่อยครับ ที่ถูกคือ เพิ่มข้อมูล ลบ แก้ไขได้หมดเเล้วววครับ รวมถึงดึงข้อมูลทั้งหมดออกมาแสดงได้เเล้ว ในคราวเดียวเลย แต่ติดเเค่ จะเอา ข้อมูลในแต่ละเเถว ออกมาแสดงเพียง 1 หน้า ของแต่ละแถวได้อย่างไรครับเช่น domain.com?id=1 เวลาเรากดเข้าลิ้งนั้น มันจะโชว์ 1 หน้า ซึ่งดึงข้อมูลจาก แถวของ id1 นั้น จะได้หน้าที่แสดงข้อมูลดังนี้ ------ หัวข้อ1 เนื้อหา1 ------- แสดงแค่นั้นอ่ะ เขียนโค๊ดอย่างไรเหรอครับ อยากทำแบบนี้ได้อ่ะ ได้โปรดชี้แนะผมที :'(
|
|
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2017, 16:52:41 โดย Fallen »
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #5 เมื่อ: 08 สิงหาคม 2017, 16:51:20 » |
|
<?php if(isset($_GET['id'])){ $id=$_GET['id']; } $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, content, topic FROM tablename WHERE id=".$id."";//แก้ไขชื่อตาราง หรือ ฟิลด์ ด้วยนะครับ $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Topic: " . $row["topic"]. " <br>Content : " . $row["content"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?> ************* ผมก๊อปมา แล้วแก้ไขเพิ่มเติมนิดเดียวนะครับ ดูต้นฉบับที่นี่ครับ https://www.w3schools.com/php/php_mysql_select.asp
|
|
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2017, 16:55:15 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #6 เมื่อ: 08 สิงหาคม 2017, 17:22:29 » |
|
ขอบคุณที่ช่วยเขียนให้ครับ ทำตามแล้ว ปรากฏว่าได้ผลคือ ไม่ว่าจะใส่ id ไปเท่าไรมันก็จะโชว์ทั้งหมดเลยครับ เช่น domain.com?id= 1 มันก็จะโชว์ id: 1 - Topic: หัวข้อ1 Content : เนื้อหาหัวข้อ1 id: 2 - Topic: หัวข้อ2 Content : เนื้อหาหัวข้อ2 id: 9 - Topic: หัวข้อ3 Content : เนื้อหาหัวข้อ3 domain.com?id= 2 มันก็จะโชว์ id: 1 - Topic: หัวข้อ1 Content : เนื้อหาหัวข้อ1 id: 2 - Topic: หัวข้อ2 Content : เนื้อหาหัวข้อ2 id: 9 - Topic: หัวข้อ3 Content : เนื้อหาหัวข้อ3 domain.com?id= 3 มันก็จะโชว์ id: 1 - Topic: หัวข้อ1 Content : เนื้อหาหัวข้อ1 id: 2 - Topic: หัวข้อ2 Content : เนื้อหาหัวข้อ2 id: 9 - Topic: หัวข้อ3 Content : เนื้อหาหัวข้อ3 แก้อย่างไรดีครับ อีกนิดเดียวเท่านั้นนน
|
|
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2017, 17:22:59 โดย Fallen »
|
บันทึกการเข้า
|
|
|
|
thaisew
ก๊วนเสียว
พลังน้ำใจ: 19
ออฟไลน์
กระทู้: 274
|
|
« ตอบ #7 เมื่อ: 08 สิงหาคม 2017, 17:26:38 » |
|
echo $sql ; มาดูหน่อยครับ
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #8 เมื่อ: 08 สิงหาคม 2017, 17:26:49 » |
|
<?php if(isset($_GET['id'])){ $id=$_GET['id']; } echo $id.'<br>';//เช็คค่า id $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB";
// Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
$sql = "SELECT id, content, topic FROM tablename WHERE id=".$id."";//แก้ไขชื่อตาราง หรือ ฟิลด์ ด้วยนะครับ
echo $sql.'<br>';//เช็คค่า sql
$result = $conn->query($sql);
if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Topic: " . $row["topic"]. " <br>Content : " . $row["content"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?>
****************** ลองดูค่าที่ได้รับ และสั่งพิมพ์ออกมาว่า ถูกต้องหรือไม่
|
|
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #9 เมื่อ: 08 สิงหาคม 2017, 17:34:20 » |
|
+ ได้เเล้ว ขอบคุณเป็นอย่างสูงครับ แก้ตรงนี้เอง $sql = "SELECT id, content, topic FROM member WHERE id=$id";
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #10 เมื่อ: 08 สิงหาคม 2017, 17:36:28 » |
|
ยินดีด้วยนะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #12 เมื่อ: 09 สิงหาคม 2017, 16:58:03 » |
|
การอ้างอิงเรียกหน้าจาก id (แบบออโต้) มันมีปัญหาอยู่อย่างคือ เช่น ตอนนี้มีข้อมูลแค่ 3 แถว
domain.com?id=1 domain.com?id=2 domain.com?id=3 (ถูกลบแล้ว) domain.com?id=4 (ถูกลบแล้ว) domain.com?id=5
1. ถ้า หน้านั้นไม่มีข้อมูล คือ ถูกลบไปแล้ว id แบบออโต้ใน database จะหายไป แต่เวลาเรียกมันก็ยังเเสดงได้แต่เป็นหน้าขาว (ไม่ error) เช่น domain.com?id=3
2. หน้าที่อื่นๆที่ยังไม่มีข้อมูล เช่น domain.com?id=6 มันก็จะเรียกได้เหมือนกัน
เขาแก้ปัญหานี้ยังไงเหรอครับ?
|
|
« แก้ไขครั้งสุดท้าย: 09 สิงหาคม 2017, 16:59:07 โดย Fallen »
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #13 เมื่อ: 09 สิงหาคม 2017, 17:22:52 » |
|
สิ่งที่คุณถาม คือหลักการ ในการเขียนหน้า details page ซึ่งผมมักจะใช้แนวทางตามนี้ครับ (ท่านอื่นๆ อาจใช้ไม่เหมือนกัน แต่ไม่ได้หมายความว่า ของท่านอื่นๆ จะไม่ดีนะครับ)
1. ตรวจสอบค่าตัวแปร 1.1 ถ้าไม่มี หรือเป็นค่าว่าง ส่งไป 404 (ถ้ากูเกิลเจอ จะแจ้งใน Webmaster Tool ว่าเป็น soft 404) 1.2 ถ้ามี ไปขั้นตอนที่ 2
2. เช็คว่า ตัวแปรนั้น มีอยู่ในฐานข้อมูลหรือไม่ 2.1 ถ้าไม่มี ส่งไป 404 (ถ้ากูเกิลเจอ จะแจ้งใน Webmaster Tool ว่าเป็น soft 404) 2.2 ถ้ามี ไปขั้นตอนที่ 3
3. ใช้ตัวแปรนั้น เรียกดูฟิลดฺอื่น ในเร็คคอร์ดเดียวกัน
โดยทั่วไป ผมทำแค่นี้ครับ
*************************************** แนวทางการเขียนโค๊ด
ข้อ 1. if(isset($_GET['productid'])){ $productid=$_GET['productid']; } else{ header("location: 404.php"); exit(); }
ข้อ 2. $result= select ... from ... where productid=$productid;
if($result==1){ show others fields.... //ข้อ 3. } else{ header("location: 404.php"); }
นี่เป็นแนวทางแบบของผมนะครับ
******************
ในรายละเอียดจริงๆ มันจะมีเยอะกว่านี้นะครับ นี่แค่แนวทางการเขียนของผม
|
|
« แก้ไขครั้งสุดท้าย: 09 สิงหาคม 2017, 17:37:14 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #14 เมื่อ: 09 สิงหาคม 2017, 17:39:34 » |
|
สิ่งที่คุณถาม คือหลักการ ในการเขียนหน้า details page ซึ่งผมมักจะใช้แนวทางตามนี้ครับ (ท่านอื่นๆ อาจใช้ไม่เหมือนกัน แต่ไม่ได้หมายความว่า ของท่านอื่นๆ จะไม่ดีนะครับ)
1. ตรวจสอบค่าตัวแปร 1.1 ถ้าไม่มี หรือเป็นค่าว่าง ส่งไป 404 (ถ้ากูเกิลเจอ จะแจ้งใน Webmaster Tool ว่าเป็น soft 404) 1.2 ถ้ามี ไปขั้นตอนที่ 2
2. เช็คว่า ตัวแปรนั้น มีอยู่ในฐานข้อมูลหรือไม่ 2.1 ถ้าไม่มี ส่งไป 404 (ถ้ากูเกิลเจอ จะแจ้งใน Webmaster Tool ว่าเป็น soft 404) 2.2 ถ้ามี ไปขั้นตอนที่ 3
3. ใช้ตัวแปรนั้น เรียกดูฟิลดฺอื่น ในเร็คคอร์ดเดียวกัน
โดยทั่วไป ผมทำแค่นี้ครับ
*************************************** แนวทางการเขียนโค๊ด
ข้อ 1. if(isset($_GET['productid'])){ $productid=$_GET['productid']; } else{ header("location: 404.php"); exit; }
ข้อ 2. $result= select ... from ... where productid=$productid;
if($result==1){ show others fields.... //ข้อ 3. } else{ header("location: 404.php"); }
นี่เป็นแนวทางแบบของผมนะครับ
ขอบคุณครับ ผมจะลองงมดู อิอิ ปล. ปกติท่านมีรับสอนหรือเปล่าครับ อยู่เเถวไหนเหรอครับ
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #15 เมื่อ: 09 สิงหาคม 2017, 17:45:47 » |
|
ผมอยู่ นครศรีฯ ครับ
|
|
|
บันทึกการเข้า
|
|
|
|
infamous
ก๊วนเสียว
พลังน้ำใจ: 14
ออฟไลน์
กระทู้: 295
|
|
« ตอบ #16 เมื่อ: 09 สิงหาคม 2017, 18:06:52 » |
|
Logic
- $result = select * from tb where id=$id - if $result then process data - else redirect to 404 or 302 page by header() using - end
ขอโทษสำหรับภาษาโปรแกรมเมอร์นะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #17 เมื่อ: 10 สิงหาคม 2017, 09:17:49 » |
|
สร้างหน้า details page แบบนี้ >> domain.com?id=1 ทำได้แล้ว แต่จะเป็นแบบนี้ >> http://domain.com/single.php?id=31 (single.php คือ โค๊ดหน้า details page ด้านบน) คำถามคือ ถ้าจะทำลิ้งแบบนี้ >> domain.com/หัวข้อ2 จะเขียน url ยังไงครับ เพราะมัน "/" ไม่ได้ เช่น http://domain.com/single.php/topic1 ลองทดสอบ โดยเพิ่ม เร็คคอร์ด id=4, topic=หัวข้อ2, content=เนื้อหาหัวข้อ4 ดู แล้วเรียก domain.com/หัวข้อ2
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #18 เมื่อ: 10 สิงหาคม 2017, 09:41:54 » |
|
|
|
« แก้ไขครั้งสุดท้าย: 10 สิงหาคม 2017, 09:45:15 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #19 เมื่อ: 10 สิงหาคม 2017, 11:11:29 » |
|
ต้องใช้ htaccess นี่เอง ผมก็นึกว่ามันทำได้เลย อิอิอิ ขอบคุณครับ ทำได้เเล้ววRewriteEngine On RewriteRule ^([a-zA-Z0-9_-]+)$ single.php?id=$1 RewriteRule ^([a-zA-Z0-9_-]+)/$ single.php?id=$1
|
|
« แก้ไขครั้งสุดท้าย: 10 สิงหาคม 2017, 13:57:40 โดย Fallen »
|
บันทึกการเข้า
|
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #21 เมื่อ: 11 สิงหาคม 2017, 09:41:01 » |
|
ขอบคุณมากครับ สำเร็จได้เพราะท่านเเท้ๆเลย อิอิ จริงๆ ผมเขียนไม่เป็นอะครับ อาศัยเครื่องมือเอามารวมกัน ด้วยความตั้งใจอยากทำระบบมาใช้งานเเทนเว็บบอร์ด ที่โพสได้จากระบบ comment ของ facebook เเค่นั้นเองอ่ะ อาจจะมีบักนะ (ท่านไหนผ่านมา บอกผมม่างนะ จะได้แก้ไข อิอิ) นี่ครับ (user=1 / pw = 1) url ปกติ goo.gl/8cd5A3 url rewrite goo.gl/UxC5My
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #22 เมื่อ: 11 สิงหาคม 2017, 10:47:03 » |
|
ผมลองเข้าไปดูแล้วครับ ที่อยากบอกคือ ล็อกอินเข้าไป แกัไขเสร็จ แล้วล๊อกเอาท์ออกมา มันยังมีคุ๊กกี้(หรือเซสชั่นค้างอยู่ ทำให้ผมลบข้อมูลได้ แม้จะล๊อกเอาท์ออกมาแล้ว ควรแก้ไขตัวนี้ด้วยครับ โดยในไฟล์ที่ล๊อกเอาท์ควรล้างค่าคุ๊กกี้ออกใหเหมด
ประมาณนี้ครับ <?php ob_start(); session_start(); $_SESSION['username'] = ''; $_SESSION['password'] = ''; session_unset(); session_destroy(); header("location: ../"); ob_end_flush(); ?>
$_SESSION['username'] กับ $_SESSION['password'] เป็นแค่ตัวอย่างที่ต้องการลบค่านะครับ แก้ให้ตรงกับของคุณ ผมพยายามสื่อว่า อย่าให้มี คุ๊กกี้ หรือ เซสชั่นหลงเหลืออยู่
**************
ส่วนในฐานข้อมูล ที่ผมมักจะทำคือ เพิ่มฟิล์ดอีก 1 ฟิลด์ เพื่อใช้สำหรับ สั่งไม่ให้แสดงผล มักกำหนดให้เป็น integer เช่น ตั้งชื่อ isactive มีค่าเป็น 1 หรือ 0 ค่าdefault คือ 1 หมายถึงให้มันแสดงผลปกติ แต่เมื่อไม่ต้องการให้แสดงผล เช่น ไว้บล็อก หรือ ระงับการแสดงผลชั่วคราว ก็กำหนดให้มีค่าเป็น 0
ในคำสั่ง MySQL เวลา SELECT ก็เพิ่มคำว่า AND isactive=1 เมื่อต้องการระงับการแสดงผล(ไม่ใช่การลบออกจากฐานข้อมูล) ก็ UPDATE ... set isactive=0 ....
ค่อยๆปรับแก้ไปเรื่อยๆนะครับ
|
|
« แก้ไขครั้งสุดท้าย: 11 สิงหาคม 2017, 10:50:23 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #23 เมื่อ: 11 สิงหาคม 2017, 15:43:12 » |
|
ผมลองเข้าไปดูแล้วครับ ที่อยากบอกคือ ล็อกอินเข้าไป แกัไขเสร็จ แล้วล๊อกเอาท์ออกมา มันยังมีคุ๊กกี้(หรือเซสชั่นค้างอยู่ ทำให้ผมลบข้อมูลได้ แม้จะล๊อกเอาท์ออกมาแล้ว ควรแก้ไขตัวนี้ด้วยครับ โดยในไฟล์ที่ล๊อกเอาท์ควรล้างค่าคุ๊กกี้ออกใหเหมด
ประมาณนี้ครับ <?php ob_start(); session_start(); $_SESSION['username'] = ''; $_SESSION['password'] = ''; session_unset(); session_destroy(); header("location: ../"); ob_end_flush(); ?>
$_SESSION['username'] กับ $_SESSION['password'] เป็นแค่ตัวอย่างที่ต้องการลบค่านะครับ แก้ให้ตรงกับของคุณ ผมพยายามสื่อว่า อย่าให้มี คุ๊กกี้ หรือ เซสชั่นหลงเหลืออยู่
**************
ส่วนในฐานข้อมูล ที่ผมมักจะทำคือ เพิ่มฟิล์ดอีก 1 ฟิลด์ เพื่อใช้สำหรับ สั่งไม่ให้แสดงผล มักกำหนดให้เป็น integer เช่น ตั้งชื่อ isactive มีค่าเป็น 1 หรือ 0 ค่าdefault คือ 1 หมายถึงให้มันแสดงผลปกติ แต่เมื่อไม่ต้องการให้แสดงผล เช่น ไว้บล็อก หรือ ระงับการแสดงผลชั่วคราว ก็กำหนดให้มีค่าเป็น 0
ในคำสั่ง MySQL เวลา SELECT ก็เพิ่มคำว่า AND isactive=1 เมื่อต้องการระงับการแสดงผล(ไม่ใช่การลบออกจากฐานข้อมูล) ก็ UPDATE ... set isactive=0 ....
ค่อยๆปรับแก้ไปเรื่อยๆนะครับ
ขอบคุณมากครับ ผมเพิ่งเห็นไฟล์ delete และ add มันไม่มีโค๊ดของการล๊อกอินเลย ดังนั้นถ้ารุ้ path มันก็พิมพ์ url ใส่ id ลบ แก้ได้เลย ผมจึงเอา code ล๊อกอิน ไปใส่ ในแต่ละไฟล์ (เเยก user/pass ) แต่กำลังงง อยู่ว่า ทำอย่างไร ให้มันเป็นแค่ login ใช้ user /pw เดียวกัน ใช้ร่วมกัน เหมือน include เข้ามาอะไรอย่างนั้นครับ หรือ ว่า เอาไปเขียนเป็นไฟล์ต่างหากครับ ไฟล์ login ผมเป็นแบบนี้อ่ะ ใส่ในหน้าของแต่ละไฟล์ที่ต้องการได้เลย <?php session_start(); $userinfo = array( '0'=>'0', '1'=>'1' );
if(isset($_GET['logout'])) { $_SESSION['username'] = ''; header('Location: ' . $_SERVER['PHP_SELF']); }
if(isset($_POST['username'])) { if($userinfo[$_POST['username']] == $_POST['password']) { $_SESSION['username'] = $_POST['username']; }else { //Invalid Login } } ?> <!--n login part1-->
<!--login part2--> <?php if($_SESSION['username']): ?> Logged in as <?=$_SESSION['username']?> <a href="?logout=1">Logout1</a>
<?php endif; ?>
<form name="login" action="" method="post"> Username:</label><input type="text" name="username" value="" /><br /> Password:<input type="password" name="password" value="" /><br /><br> <input type="submit" name="submit" value="Submit" /> </form>
|
|
|
บันทึกการเข้า
|
|
|
|
sputtaro
สมุนแก๊งเสียว
พลังน้ำใจ: 139
ออฟไลน์
กระทู้: 910
|
|
« ตอบ #24 เมื่อ: 11 สิงหาคม 2017, 16:37:46 » |
|
ระบบล็อกอินสำหรับการใช้งานหลายๆคนที่ดี มีประสิทธิภาพ มักจะซับซ้อน เก็บข้อมูลจำนวนมากพอสมควร
แต่ถ้าทำแบบใช้คนเดียว ไม่ต้องการให้ใครเข้ามายุ่ง ก็ไม่ยากครับ ผมขอแนะนำให้ใช้ หรือหาสคริปท์แจกฟรีทั่วไปมาใช้ก็ได้แล้ว แต่ที่สำตัญ คุณต้องเปลี่ยนชื่อไฟล์ ชื่อเซสชั่น ไม่ให้เหมือนชาวบ้านเขา ก็จะปลอดภัยระดับหนึ่ง
ยิ่งถ้ามีระบบตรวจสอบว่าเป็นสมาชิกที่เก็บไว้ในฐานข้อมูลด้วยหรือไม่ ก็จะเพิ่มความปลอดภัยเข้าไปอีก (ตารางเก็บรายชื่อสมาชิกก็มีแค่เราคนเดียวไงครับ สร้างฟิลด์ชื่อยากๆไว้เช็คข้อมูลที่เก็บไว้เพื่อเช็คด้วย)
****************************
โดยทั่วไปที่ผมออกแบบ จะใช้เซสชั่นที่ไม่ใช่ชื่อ username, password ผสมกับการเข้ารหัส + วันเวลา
ตัวอย่างนะครับ public function doLogin($uname,$upassword)
$crypt_username=$this->CryptInput($uname) ; $_SESSION['key1'] = $crypt_username; $_SESSION['key2'] = $uname; $crypt_password=$this->CryptInput($upassword) ; $_SESSION['key3'] = $crypt_password; date_default_timezone_set("America/New_York"); $loginday = date("Y-m-d H:i:s");
จะมี 3 เซสชั่น, มีการเข้ารหัสด้วย HMAC2 บันทึกวันเวลาที่เข้าใช้งาน และอื่นๆ ส่วนหน้าล็อกเอาท์ก็จะล้างเซสชั่นทั้งหมด
และในหน้าอื่นๆ จะเช็คว่ามีเซสชั่นครบ ถูกต้องหรือไม่ โดยผมเขียนเป็นฟังชั่น $result = $db->checkLogin($key1,$key2,$key3) ถ้า $result ไม่ถูกต้อง ก็จะ redirect ไปหน้าอินเด็กซ์
*************************** ลองหาสคริปท์ฟรีมาแกะดูก่อนนะครับ ระบบการเช็คยูสเซอร์ สำคัญมาก หวังว่าจะเป็นประโยชน์นะครับ
|
|
« แก้ไขครั้งสุดท้าย: 11 สิงหาคม 2017, 16:42:19 โดย sputtaro »
|
บันทึกการเข้า
|
|
|
|
Fallen
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 162
ออฟไลน์
กระทู้: 2,751
|
|
« ตอบ #25 เมื่อ: 11 สิงหาคม 2017, 23:32:31 » |
|
ระบบล็อกอินสำหรับการใช้งานหลายๆคนที่ดี มีประสิทธิภาพ มักจะซับซ้อน เก็บข้อมูลจำนวนมากพอสมควร
แต่ถ้าทำแบบใช้คนเดียว ไม่ต้องการให้ใครเข้ามายุ่ง ก็ไม่ยากครับ ผมขอแนะนำให้ใช้ หรือหาสคริปท์แจกฟรีทั่วไปมาใช้ก็ได้แล้ว แต่ที่สำตัญ คุณต้องเปลี่ยนชื่อไฟล์ ชื่อเซสชั่น ไม่ให้เหมือนชาวบ้านเขา ก็จะปลอดภัยระดับหนึ่ง
ยิ่งถ้ามีระบบตรวจสอบว่าเป็นสมาชิกที่เก็บไว้ในฐานข้อมูลด้วยหรือไม่ ก็จะเพิ่มความปลอดภัยเข้าไปอีก (ตารางเก็บรายชื่อสมาชิกก็มีแค่เราคนเดียวไงครับ สร้างฟิลด์ชื่อยากๆไว้เช็คข้อมูลที่เก็บไว้เพื่อเช็คด้วย)
****************************
โดยทั่วไปที่ผมออกแบบ จะใช้เซสชั่นที่ไม่ใช่ชื่อ username, password ผสมกับการเข้ารหัส + วันเวลา
ตัวอย่างนะครับ public function doLogin($uname,$upassword)
$crypt_username=$this->CryptInput($uname) ; $_SESSION['key1'] = $crypt_username; $_SESSION['key2'] = $uname; $crypt_password=$this->CryptInput($upassword) ; $_SESSION['key3'] = $crypt_password; date_default_timezone_set("America/New_York"); $loginday = date("Y-m-d H:i:s");
จะมี 3 เซสชั่น, มีการเข้ารหัสด้วย HMAC2 บันทึกวันเวลาที่เข้าใช้งาน และอื่นๆ ส่วนหน้าล็อกเอาท์ก็จะล้างเซสชั่นทั้งหมด
และในหน้าอื่นๆ จะเช็คว่ามีเซสชั่นครบ ถูกต้องหรือไม่ โดยผมเขียนเป็นฟังชั่น $result = $db->checkLogin($key1,$key2,$key3) ถ้า $result ไม่ถูกต้อง ก็จะ redirect ไปหน้าอินเด็กซ์
*************************** ลองหาสคริปท์ฟรีมาแกะดูก่อนนะครับ ระบบการเช็คยูสเซอร์ สำคัญมาก หวังว่าจะเป็นประโยชน์นะครับ
ขอบคุณมากนะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
doodee17
Newbie
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 15
|
|
« ตอบ #26 เมื่อ: 12 สิงหาคม 2017, 05:43:42 » |
|
ข้อมูลดีดี
ขอเก็บความรู้ด้วยครับ
|
|
|
บันทึกการเข้า
|
|
|
|
|
หน้า: 1 2 [ทั้งหมด] ขึ้นบน |
|