ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingผมเขียนระบบเว็บ php อันหนึ่งใกล้เสร็จเเล้ว แต่จะสร้างหน้าใหม่ยังไงครับ
หน้า: 1 2 [ทั้งหมด]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ผมเขียนระบบเว็บ php อันหนึ่งใกล้เสร็จเเล้ว แต่จะสร้างหน้าใหม่ยังไงครับ  (อ่าน 3261 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
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
--------


ช่วยชี้แนะด้วยครับ
 wanwan017





บันทึกการเข้า

thaisew
ก๊วนเสียว
*

พลังน้ำใจ: 19
ออฟไลน์ ออฟไลน์

กระทู้: 274



ดูรายละเอียด
« ตอบ #1 เมื่อ: 08 สิงหาคม 2017, 15:48:50 »

ตัองศึกษาการ get และ post เพิ่มเติม ครับแล้ว ได้ค่ามาก็เอาไป query ต่อ
ลองดูจากลิ้งนี้ตรับ https://www.tutorialspoint.com/php/php_get_post.htm

มีอีกหลายที่ลองๆดูครับ
บันทึกการเข้า
picharnan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 90
ออฟไลน์ ออฟไลน์

กระทู้: 1,400



ดูรายละเอียด
« ตอบ #2 เมื่อ: 08 สิงหาคม 2017, 15:52:53 »

ลองอ่านกระทู้นี้ดูครับ

http://www.thaiseoboard.com/index.php/topic,16784.0.html
บันทึกการเข้า
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

แก้อย่างไรดีครับ อีกนิดเดียวเท่านั้นนน

 Cry Cry
« แก้ไขครั้งสุดท้าย: 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 »

+

 wanwan019

ได้เเล้ว ขอบคุณเป็นอย่างสูงครับ
แก้ตรงนี้เอง $sql = "SELECT id, content, topic FROM member WHERE id=$id";

บันทึกการเข้า

sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #10 เมื่อ: 08 สิงหาคม 2017, 17:36:28 »

  wanwan020
ยินดีด้วยนะครับ
บันทึกการเข้า
Fallen
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 162
ออฟไลน์ ออฟไลน์

กระทู้: 2,751



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 08 สิงหาคม 2017, 17:48:32 »

  wanwan020
ยินดีด้วยนะครับ


ขอบคุณมากครับ

 wanwan017 wanwan019


บันทึกการเข้า

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");
}

นี่เป็นแนวทางแบบของผมนะครับ


 wanwan017 wanwan004

ขอบคุณครับ ผมจะลองงมดู อิอิ

ปล. ปกติท่านมีรับสอนหรือเปล่าครับ อยู่เเถวไหนเหรอครับ
บันทึกการเข้า

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

 Tongue

อ้างถึง
ลองทดสอบ โดยเพิ่ม เร็คคอร์ด
id=4, topic=หัวข้อ2, content=เนื้อหาหัวข้อ4 ดู
แล้วเรียก domain.com/หัวข้อ2


บันทึกการเข้า

sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #18 เมื่อ: 10 สิงหาคม 2017, 09:41:54 »

การเปลี่ยนรูปแบบของ url ทำได้โดยใช้ความสามารถของเว็บเซอเวอร์
โดยการเขียนคำสั่งไว้ในไฟล์ .htaccess
ศึกษา พื้นฐานความรู้เกี่ยวกับไฟล์ htaccess
และ แนวทางการเขียน URL Rewriting
How To Rewrite URLs with mod_rewrite for Apache on Ubuntu 16.04


 
« แก้ไขครั้งสุดท้าย: 10 สิงหาคม 2017, 09:45:15 โดย sputtaro » บันทึกการเข้า
Fallen
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 162
ออฟไลน์ ออฟไลน์

กระทู้: 2,751



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 10 สิงหาคม 2017, 11:11:29 »

ต้องใช้ htaccess นี่เอง
ผมก็นึกว่ามันทำได้เลย อิอิอิ
ขอบคุณครับ

 wanwan004 wanwan017


ทำได้เเล้วว
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ single.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ single.php?id=$1


 wanwan019
« แก้ไขครั้งสุดท้าย: 10 สิงหาคม 2017, 13:57:40 โดย Fallen » บันทึกการเข้า

sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #20 เมื่อ: 10 สิงหาคม 2017, 14:40:50 »

ถ้าจบโปรเจคเล็กๆนี้ได้ ผมคิดว่า เป็นการเริ่มต้นของ PHP Developer ที่ดีนะครับ
และอย่าลืมทบทวน และตรวจตรวจสอบตัวเองเสมอ
ตั้งแต่ แนวทางการเขียนโค๊ด PHP เบื้องต้น
หรือแม้กระทั่ง 10 อย่างที่คุณควรทำก่อนเป็น PHP Developer ที่ดี

หวังว่าจะมีนักพัฒนา PHP ที่เก่งฉกาจเพิ่มขึ้นอีกคนนะครับ ขออวยพรด้วยใจจริง
บันทึกการเข้า
Fallen
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 162
ออฟไลน์ ออฟไลน์

กระทู้: 2,751



ดูรายละเอียด เว็บไซต์
« ตอบ #21 เมื่อ: 11 สิงหาคม 2017, 09:41:01 »

ถ้าจบโปรเจคเล็กๆนี้ได้ ผมคิดว่า เป็นการเริ่มต้นของ PHP Developer ที่ดีนะครับ
และอย่าลืมทบทวน และตรวจตรวจสอบตัวเองเสมอ
ตั้งแต่ แนวทางการเขียนโค๊ด PHP เบื้องต้น
หรือแม้กระทั่ง 10 อย่างที่คุณควรทำก่อนเป็น PHP Developer ที่ดี

หวังว่าจะมีนักพัฒนา PHP ที่เก่งฉกาจเพิ่มขึ้นอีกคนนะครับ ขออวยพรด้วยใจจริง

 wanwan004
ขอบคุณมากครับ สำเร็จได้เพราะท่านเเท้ๆเลย อิอิ จริงๆ ผมเขียนไม่เป็นอะครับ อาศัยเครื่องมือเอามารวมกัน
ด้วยความตั้งใจอยากทำระบบมาใช้งานเเทนเว็บบอร์ด ที่โพสได้จากระบบ comment ของ facebook เเค่นั้นเองอ่ะ
อาจจะมีบักนะ (ท่านไหนผ่านมา บอกผมม่างนะ จะได้แก้ไข อิอิ)

 wanwan017

นี่ครับ (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 ลบ แก้ได้เลย

 Tongue

ผมจึงเอา 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 ไปหน้าอินเด็กซ์

***************************
ลองหาสคริปท์ฟรีมาแกะดูก่อนนะครับ
ระบบการเช็คยูสเซอร์ สำคัญมาก
หวังว่าจะเป็นประโยชน์นะครับ


ขอบคุณมากนะครับ wanwan017
บันทึกการเข้า

doodee17
Newbie
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 15



ดูรายละเอียด
« ตอบ #26 เมื่อ: 12 สิงหาคม 2017, 05:43:42 »

ข้อมูลดีดี

ขอเก็บความรู้ด้วยครับ
บันทึกการเข้า
หน้า: 1 2 [ทั้งหมด]   ขึ้นบน
พิมพ์