ผมเขียนระบบเว็บ php อันหนึ่งใกล้เสร็จเเล้ว แต่จะสร้างหน้าใหม่ยังไงครับ

เริ่มโดย Fallen, 08 สิงหาคม 2017, 15:31:43

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Fallen

ผมกำลังเขียนเว็บ php เล็กอันหนึ่ง
ตอนนี้ใกล้เสร็จเเล้ว ขาดแต่ว่า จะสร้างหน้าใหม่ ยังไงครับ?


มันมีแค่ตารางเดียว  แล้วในตารางนั้นก็มี 5 column อ้ะ



หน้าเว็บโชว์ทั้งหมด show.php




แต่จะสร้างหน้าใหม่ ยังไงเหรอครับ
ให้แต่ละหน้าแยกแสดงเป็น url แต่ลหน้า มีข้อมูล เป็น TOPIC1 + content1 เป็นแบบนี้ครับ

พอกด  domain.com/topic1 เข้าไปจะเป็น
--------
แสดง TOPIC1
แสดง content1
--------


พอกด  domain.com/topic2 เข้าไปจะเป็น
--------
แสดง TOPIC2
แสดง content2
--------


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





[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

thaisew

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

มีอีกหลายที่ลองๆดูครับ


sputtaro

การเพิ่มหน้า ก็คือการ Insert เอาข้อมูลไปเก็บในฐานข้อมูลโดยใช้ฟอร์มเป็นตัวจัดการส่งค่า
ตัวอย่าง ตามลิ้งครับ
https://www.w3schools.com/php/php_mysql_insert.asp

ฟอร์มส่งข้อมูล ลองดูตามลิ้งค์นี้ครับ
https://www.tutorialrepublic.com/php-tutorial/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

***********************

มันยากไปในตอนนี้
ค่อยๆเริ่มไปก่อนก็ได้ครับ
ความผิดพลาดจะช่วยให้เราดีขึ้น

Fallen

ขอบคุณทุกท่านครับ ผมอาจจะถามผิดไปหน่อยครับ
ที่ถูกคือ เพิ่มข้อมูล ลบ แก้ไขได้หมดเเล้วววครับ
รวมถึงดึงข้อมูลทั้งหมดออกมาแสดงได้เเล้ว ในคราวเดียวเลย

แต่ติดเเค่จะเอา ข้อมูลในแต่ละเเถว ออกมาแสดงเพียง 1 หน้า ของแต่ละแถวได้อย่างไรครับ

เช่น

domain.com?id=1
เวลาเรากดเข้าลิ้งนั้น มันจะโชว์ 1 หน้า ซึ่งดึงข้อมูลจาก แถวของ id1 นั้น

จะได้หน้าที่แสดงข้อมูลดังนี้
------
หัวข้อ1
เนื้อหา1
-------


แสดงแค่นั้นอ่ะ
เขียนโค๊ดอย่างไรเหรอครับ

อยากทำแบบนี้ได้อ่ะ



ได้โปรดชี้แนะผมที  :'(
[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

sputtaro

<?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

Fallen

ขอบคุณที่ช่วยเขียนให้ครับ ทำตามแล้ว
ปรากฏว่าได้ผลคือ ไม่ว่าจะใส่ 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

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

:'( :'(
[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]


sputtaro

<?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

+

:wanwan019:

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

[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

sputtaro


Fallen

[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

Fallen

การอ้างอิงเรียกหน้าจาก 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
มันก็จะเรียกได้เหมือนกัน

เขาแก้ปัญหานี้ยังไงเหรอครับ?
[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

sputtaro

สิ่งที่คุณถาม คือหลักการ ในการเขียนหน้า 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");
}

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

******************

ในรายละเอียดจริงๆ มันจะมีเยอะกว่านี้นะครับ
นี่แค่แนวทางการเขียนของผม

Fallen

อ้างถึงจาก: sputtaro ใน 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");
}

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


:wanwan017: :wanwan004:

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

ปล. ปกติท่านมีรับสอนหรือเปล่าครับ อยู่เเถวไหนเหรอครับ
[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

sputtaro


infamous

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

สร้างหน้า 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

:P

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

[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]

sputtaro

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




Fallen

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

:wanwan004: :wanwan017:


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


:wanwan019:
[direct=https://www.cymiz.com/]ประกันภัย[/direct]
[direct=https://www.cymiz.com/promotion/]ประกันรถยนต์ พรบ มอเตอร์ไซต์ ราคาสมาชิก[/direct]
[direct=http://cymiz.com/].[direct=http://vir9.com].[/direct][/direct]