|
|
|
สอบถาม เรื่องการ Login แบบสถานะผู้ใช้งาน แบบแยกเทเบิ้ลการเก็บข้อมูลของผู้ใช้ |
|
|
|
|
|
|
|
ลองใช้ UNION ดูครับ
http://dev.mysql.com/doc/refman/5.0/en/union.html
Code (SQL)
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
|
|
|
|
|
Date :
2013-11-20 07:05:38 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมไม่เล็ก....เอ้ย ไม่แยกตารางครับ ... มี status สักฟิลด์ ....
|
|
|
|
|
Date :
2013-11-20 08:02:29 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จริงๆ แค่คิดว่า นักเรียน อาจารย์ ผู้ดูแล เป็นบุคคล และเพิ่ม status ก็จบแล้ว
|
|
|
|
|
Date :
2013-11-20 08:17:34 |
By :
geidtiphong |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตาราง login
| id | user | pass | type | status |
ตัวอย่างข้อมูล
| 1 | test | 1234 | อาจารย์ | 2 |
| 2 | stu | 1234 | นักเรียน | 1 |
| 3 | admin | 1234 | ผู้ดูแลระบบ | 3 |
ผมจะใช้หน้าหลักหน้าเดียว
แต่ซ่อนฟังก์ชั่นให้ใช้งานเฉพาะโดยใช้ if ดัก status ไว้ครับ (ประหยัดได้หลายหน้าเลย)
|
|
|
|
|
Date :
2013-11-20 08:38:07 |
By :
TRIBIIZ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 9 เขียนโดย : TRIBIIZ เมื่อวันที่ 2013-11-20 08:38:07
เฉพาะตาราง Login ผมมีความคิดเห็นเพิ่มเติมดังนี้ครับ เปลี่ยนชื่อฟิวด์
ID เปลี่ยนเป็น xzyabcxxxyyy
User เปลี่ยนเป็น xxxaaabbbcccz
Password เปลี่ยนเป็น yyy123zzz77
เหตุผล : ป้องกันการเดาได้ในระดับหนึ่ง
@ เจ้าของกระทู้ "จะทำยังไงให้สามารถเข้าระบบโดยให้วิ่งไปที่หน้าหลักของแต่ละผู้ใช้แต่ละประเภท"
ผมไม่แน่ใจว่าคุณจะมองภาพโดยรวมออกหรือไม่?
|
|
|
|
|
Date :
2013-11-20 08:54:26 |
By :
love9713 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<body>
<?php
include "connect.php";
if ($_POST[button] == 'Submit'){
$sql = "SELECT * FROM member WHERE mem_user='$_POST[mem_user]' AND mem_pass='$_POST[mem_pass]'";
$query = mysql_query($sql,$objConnect);
$result = mysql_fetch_array($query);
$num = mysql_num_rows($query);
if($num <= 0){
echo "กรุณาตรวจสอบชื่อผู้ใช้และรหัสผ่าน";
}else{
if($result[mem_type] == 1){
echo "<script>window.location='Webboard.php';</script>";
}else{
echo "<script>window.location='NewQuestion.php';</script>";
}
}
}
?>
<form id="form1" name="form1" method="post" action="">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6%" height="24%" valign="top">User</td>
<td width="94%" valign="top"><input type="text" name="mem_user"/></td>
</tr>
<tr>
<td width="6%" height="24%" valign="top">Pass</td>
<td width="94%" valign="top"><input type="password" name="mem_pass"/></td>
</tr>
<tr>
<td width="6%" height="24%" valign="top"></td>
<td width="94%" valign="top"><input type="submit" name="button" value="Submit"/></td>
</tr>
</table>
</form>
</body>
แบบนี้ผมพอจะทำได้ครับ คือแบบรวมกันแล้วกำหนด ให้เช็คที่ field ใด field หนึ่ง (mem_type)
แต่หาก ทั้ง 3 table เก็บข้อมูล ไม่เท่ากันหรือต่างกันล่ะครับ
เราจะทำยังไง ผมก็เลยลองจับมันแยกกัน เช่นว่า student 20field, teacher 15 field, admin 10field แบบนี้อ่ะครับ
จะยุบรวมกันได้มั๊ยครับ แล้วเวลาทำ Normalization จะได้ถึง 3NF หรือป่าว ... ขอบคุณครับ
|
|
|
|
|
Date :
2013-11-20 17:19:33 |
By :
sabaitip |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมเข้าใจนะว่าทำใมต้องแยกตาราง เพราะนักเรียนก็เก็บชื่อเพศนามสกุลอาจารย์ก็อาจจะเก็บ ชื่อเพศ เงินเดือน วุฒิ
มันเลยรวมกันไม่ได้ไช่ไหมครับ เพราะหากรวมกันมา ตายหละหว่า นักเรียนไม่มีเงินเดือน T_T
ดังนั้น จขกท เลยใช้วิธีเก็บแยกสินะครับ
ดังนั้นเช็คไปเลยสามตารางครับ ไล่เช็คเลย แต่มีข้อแม้ว่า สิ่งที่เช็คต้องเป็นเอกลักษณ์นะ ไม่ซ้ำกันทั้งสามตาราง ( ไม่ไช่แค่ไม่ซ้ำในตารางตัวเอง ตารางอื่นๆต้องไม่ซ้ำด้วย)
แนวคิดหลักๆก็คือนำไปนับแถวทั้ง สามตารางครับ :) เดี๋ยวว่างๆจะเขียนให้ดู
|
|
|
|
|
Date :
2013-11-20 17:35:19 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากกระทู้นี้ ก็เก็บได้ทั้ง 2 แบบ จะแยกหรือจะรวม
ถ้ารวมตาราง
ตาราง user เก็บ
1.id_user ออโต้อินครีเม้นท์
2.usermane เก็ยเป็นอะไรก็ว่าไป
3.password เข้ารหัสไม่เข้าก็ว่าไป
4. status 1=student 2=teacher 3=admin
- แต่ตารางเก็บข้อมูล ประวัติก็แยกกันซะ (หากประวัติเยอะ ก็แยกย่อยลงไปอีกได้)
ขั้นตอนเรียกดู
1.เวลาล็อกอินเข้ามาก็เช็ค สมมุติ ล็อกอินผ่าน ได้ id_user = 8 status=2 อ้าวอาจารย์นี่หว่า
ก็สั่งให้วิ่งไปเพจอาจารย์ แล้วก็ไปคิวรี่ข้อมูลต่าง ๆ ของอาจารย์ ที่ id_user = 8 จะแยกย่อยไปอีกกี่ตาราง ก็แล้วแต่
จะวนลูปโชว์คว่ำโชว์หงาย อะไรก็ว่าไป
ถ้าแยกตาราง user ไว้ 3 เลยก็ได้
แต่ก่อนล็อกอินก็ให้เลือกหน่อยว่าสถานะคุณเป็นอะไร...เวลาเลือกจะได้มีเงื่อนไขไปเลยว่าจะไปคิวรี่ในตารางใครตารางมัน
|
|
|
|
|
Date :
2013-11-20 17:54:54 |
By :
telesyn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดท้าย : อยากเก็บแบบไหนก็เก็บ แต่ถ้า join ไม่เป็น เขียนคิวรี่ไม่แม่น ก็ให้มันคิวรี่หลาย ๆ ตารางได้
อีกอัน คิดได้ว่า แยกเก็บ ตาราง user 3 ตาราง แล้วพวกประวัติก็ย่อย ๆ ลงไปอีก แยกให้หมด สนุกดี
|
|
|
|
|
Date :
2013-11-20 17:57:09 |
By :
telesyn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$strTeach = "SELECT * FROM ตารางครู WHERE อะไรก็ตามนั้น";
$queryTeach = mysql_query($strTeach)or die(mysql_error());
$teacher = mysql_num_rows($queryTeach);
$strStu = "SELECT * FROM ตารางนักเรียน WHERE อะไรก็ตามนั้น";
$queryStu = mysql_query($strStu)or die(mysql_error());
$stu = mysql_num_rows($queryStu);
if($teacher == 0 and $stu == 1)
{
หน้าเว็บนักเรียน
}
if($teacher == 1 and $stu == 0)
{
หน้าเว็บครู
}
else
{
Login ผิดพลาด
}
|
|
|
|
|
Date :
2013-11-20 23:15:17 |
By :
TRIBIIZ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมได้ปรับเปลี่ยนผู้ใช้ ตามที่ลองได้ทำ database ไปก่อนหน้านี้นะครับ
ประกอบด้วย
tb1 คือ admin
adm_id | adm_user | adm_pass
tb2 คือ boss
bos_id | bos_user | bos_pass
tb3 คือ user
use_id | use_user | use_pass
จากที่ให้วิ่งไปหน้าของแต่ผู้ใช้ เปลี่ยนมาให้ echo ข้อมูลขึ้นมาเท่านั้น (หน้าที่ต้องการให้วิ่งไปยังไม่ได้ทำ)
Code (PHP)
<body>
<?php
include "connect.php";
if ($_POST[button] == 'Submit'){
$strAdmin = "SELECT * FROM admin WHERE adm_user='$_POST[adm_user]' AND adm_pass='$_POST[adm_pass]'";
$queryAdmin = mysql_query($strAdmin)or die(mysql_error());
$admin = mysql_num_rows($queryAdmin);
$strBoss = "SELECT * FROM boss WHERE bos_user='$_POST[bos_user]' AND bos_pass='$_POST[bos_pass]'";
$queryBoss = mysql_query($strBoss)or die(mysql_error());
$boss = mysql_num_rows($queryBoss);
$strUser = "SELECT * FROM user WHERE use_user='$_POST[use_user]' AND use_pass='$_POST[use_pass]'";
$queryUser = mysql_query($strUser)or die(mysql_error());
$user = mysql_num_rows($queryUser);
if($admin == 1 and $boss == 0 and $user == 0){
echo "สวัสดี Admin";
}else{
if($admin == 0 and $boss == 1 and $user == 0){
echo "สวัสดี Boss";
}else{
if($admin == 0 and $boss == 0 and $user == 1){
echo "สวัสดี User";
}else{
echo "กรุณาตรวจชื่อผู้ใช้หรือรหัสผ่าน";
}
}
}
}
?>
<form id="form1" name="form1" method="post" action="">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6%" height="24%" valign="top">User</td>
<td width="94%" valign="top"><input type="text" name="adm_user"/></td>
</tr>
<tr>
<td width="6%" height="24%" valign="top">Pass</td>
<td width="94%" valign="top"><input type="password" name="adm_pass"/></td>
</tr>
<tr>
<td width="6%" height="24%" valign="top"></td>
<td width="94%" valign="top"><input type="submit" name="button" value="Submit"/></td>
</tr>
</table>
</form>
</body>
แต่ว่าเข้าได้เฉพาะส่วนของ admin เท่านั้น
แต่ส่วนของ boss และ user ไม่ได้
ผมได้ลองแก้ไขดูแล้วน่าจะมาจาก input ที่ รับค่าของ admin อยู่ ไม่ได้รับค่า boss และ user
พี่ๆ พอจะมีวิธีกรับเปลี่ยนยังไงอ่ะครับ ให้รับ input ได้ทั้ง 3 ผู้ใช้
และรบกวนอธิบายในส่วนนี้ if($admin == 0 and $boss == 1 and $user == 0) ให้ด้วยนะครับ ขอบคุณมากครับ
|
ประวัติการแก้ไข 2013-11-21 04:47:36 2013-11-21 04:49:06 2013-11-21 04:50:03 2013-11-21 04:57:15
|
|
|
|
Date :
2013-11-21 04:46:42 |
By :
sabaitip |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เห็นด้วยกับการไม่แยกตารางนะมันีแค่นี้เองไม่ต้องแยกก็ได้มั้ง (ส่วนตัว)
วิธีคิดง่ายๆ คือหลังจากตรวจสอบแหละว่า ชื่อผู้้ใช้ และรหัสถูกก็ดึง สถานะออกมาเช็คต่ออีกครั้งแล้วก็ว่างเงื่อนไขในสถานะแต่ละสถานะไปหน้าหลักของตนเองก็จบแล้ว
|
|
|
|
|
Date :
2013-11-21 05:14:48 |
By :
naya2007 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|