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

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

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

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

sputtaro

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

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

Fallen

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

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

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

:wanwan017:

นี่ครับ (user=1 / pw = 1)
url ปกติ goo.gl/8cd5A3
url rewrite goo.gl/UxC5My

[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
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 ....

ค่อยๆปรับแก้ไปเรื่อยๆนะครับ

Fallen

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

ค่อยๆปรับแก้ไปเรื่อยๆนะครับ




ขอบคุณมากครับ ผมเพิ่งเห็นไฟล์ delete และ add มันไม่มีโค๊ดของการล๊อกอินเลย
ดังนั้นถ้ารุ้ path มันก็พิมพ์ url ใส่ id ลบ แก้ได้เลย

:P

ผมจึงเอา 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>

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

sputtaro

ระบบล็อกอินสำหรับการใช้งานหลายๆคนที่ดี มีประสิทธิภาพ มักจะซับซ้อน เก็บข้อมูลจำนวนมากพอสมควร

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

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

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

โดยทั่วไปที่ผมออกแบบ จะใช้เซสชั่นที่ไม่ใช่ชื่อ 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 ไปหน้าอินเด็กซ์

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

Fallen

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

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


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