Sat 7 Oct 2006 03:05:12
สวัสดีครับ
ขอคำแนะนำด้วยครับ ผมกำลังเขียนโปรแกรมให้กับ user และ member เข้ามา search หาข้อมูล โดยผลจากการ search ที่ได้จะแตกต่างกันระหว่าง user กับ member ดังนี้
- เมื่อ member กรอก username และ password โปรแกรมจะมีการเช็ค username และ password จากฐานข้อมูล Mysql ดังนี้
<html>
<body>
<?
if($username!=" " && $password!= " ")
{
$link=mysql_connect("localhost", "root", "");
mysql_select_db("test", $link);
$sql="select * from test where username='$u' and password='$p'";
$result=mysql_query($sql,$link);
$row=mysql_num_rows($result);
if($row>=1)
{
session_start();
session_register("active");
session_register("username");
session_register("password");
$active="ok";
$username=$u;
$password=$p;
print("Welcome member to our website");
}
else
print("Error login");
}
?>
</body>
</html>
ตอน login เข้ามานั้น ผมใช้ session นั้นจำ code username และ password
- โปรแกรมส่วนนี้เป็นส่วนที่ประเมินผล เมื่อ user และ member ได้ทำการ search หาข้อมูลครับ
<?
session_start();
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
if($active=="ok")
{
mysql_select_db("test",$link);
$sql = "SELECT * FROM test WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_POST["alphabet"]."'";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td></tr>");
while($row=mysql_fetch_array($res))
print("<tr>");
print("<td></td><td>$row[company]</td><td>$row[email]</td><td>$row[country]</td></tr>");
print("<table>");
}
else
{
mysql_select_db("test",$link);
$sql = "SELECT * FROM test WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_POST["alphabet"]."'";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td></tr>");
while($row=mysql_fetch_array($res))
print("<tr>");
print("<td></td><td>$row[company]</td><td>Member only</td><td>$row[country]</td></tr>");
print("<table>");
}
}
?>
โปรแกรมนี้จะเริ่มต้นโดย session start();
ถ้า if($active==ok) หมายถึงเป็น member ให้ผลจากการ search นั้นโชว์ email แต่ถ้า
Else หมายถึงเป็น user ให้ผลการ search นั้นโชว์ Member only ซึ่งหมายถึงว่า user ต้องสมัครเป็น member เสียก่อน ถึงจะสามารถดูรายละเอียดของ email ได้
คำถาม
- ผมใช้ session เป็นตัวเช็ค login ที่ member key เข้ามา ซึ่งในทุกหน้าที่จะมีการประมวลผลนั้น จะต้องเขียน session start() ทุกครั้งใช่ไหมครับ?
- ในส่วนของการประเมินผลในข้อ 2 นั้น ในส่วนของ else นั้น ครอบคลุม user ที่เข้ามาในเว็บโดยไม่ได้ key username และ password ใช่ไหมครับ?
- ทุกๆหน้าที่มีการประมวลผลนั้น ผมจะต้องมีการคำสั่ง if และ else ตลอดเลยใช่ไหมครับ โดย if ถ้าใช่ หมายถึง member ถ้า else ไม่ใช่ จะหมายถึง member ที่ key login และ password ผิด ให้กลับไป key ใหม่ และ user ที่เข้ามาในเว็บเพื่อเข้ามา search เพื่อดูข้อมูล โดยไม่ต้อง key username และ password แต่สามารถดูข้อมูลได้เป็นบางส่วนเท่านั้น
ขอคำแนะนำด้วยครับ คือเข้าใจว่าจะเขียนอย่างไร แต่พอจะเขียนเป็นโปรแกรมอคมพิวเตอร์ เริ่มมีความรู้สึกว่าตัวเองสับสนแล้วครับ
กรุณาแนะนำด้วยครับ
อนันต์
1. ผิดตรงที่ session_start() ต้องอยู่ส่วนบนสุดครับ การจะวาง session_start() นั้นให้วางก่อนมีการ echo หรือ html tag ทั้งหมด หรือให้ง่ายๆ ก็ให้อยู่บรรทัดแรกครับ
2. แนะนำให้ใช้ $active, $username, $password แนะนำให้เปลี่ยนเป็น $_SESSION["active"], $_SESSION["username"], $_SESSION["password"] แทนครับ
3. ถ้าค่า password ไม่ได้ใช้ในการทำงาน ส่วนตัวผมแนะนำให้ไม่ควร register ไว้หรือไม่ควรใส่ไว้ในตัวแปร session ครับเพื่อความปลอดภัย
4. การ search หาข้อมูลนั้นได้ผลออกมาเหมือนกัน เพียงแต่แสดงผลไม่เหมือนกันเท่านั้น ดังนั้นสามารถย่อโค๊ดลงได้อีกครับ
<?
$link=mysql_connect("localhost","root","");
mysql_select_db("test",$link);
$sql = "SELECT * FROM test WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_POST["alphabet"]."'";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td></tr>");
while($row=mysql_fetch_array($res, MYSQL_ASSOC))
print("<tr>");
print("<td></td><td>".$row["company"]."</td><td>".((isset($_SESSION["active"]) && $_SESSION["active"] == "ok")?$row["email"]:"Member only")."</td><td>".$row["country"]."</td></tr>");
}
print("<table>");
?>
จากโค๊ดทั้งหมดย่อได้ตามด้านบนครับ สีแดงคือส่วนที่เช็คว่ามีการ set ค่าตัวแปร $_SESSION["active"] หรือไม่ถ้ามีการ set ค่าไว้แล้วมีค่าเป็น ok หรือไม่ ถ้าใช่ก็ให้แสดงอีเมล์ ถ้าไม่ใช่ก็ให้แสดงข้อความว่า Member only
ส่วนสีเขียวนั้นคือ Option ของ mysql_fetch_array() เพื่อให้มีการสร้างเฉพาะ associative array เท่านั้นครับ ทำให้ตัวแปร $row ที่ได้จะมีขนาดเล็กลง 2 เท่าจะเห็นประโยชน์มากตอนทำการ handle ข้อมูลจำนวนมากๆครับ
Tue 10 Oct 2006 23:03:47
สวัสดีครับ
ขอขอบคุณสำหรับคำแนะนำในเรื่องของ session ดังนี้ ครับ
2. แนะนำให้ใช้ $active, $username, $password แนะนำให้เปลี่ยนเป็น $_SESSION["active"], $_SESSION["username"], $_SESSION["password"] แทนครับ
3. ถ้าค่า password ไม่ได้ใช้ในการทำงาน ส่วนตัวผมแนะนำให้ไม่ควร register ไว้หรือไม่ควรใส่ไว้ในตัวแปร session ครับเพื่อความปลอดภัย
ผมมีข้อสงสัยดังนี้ครับ
1. ค่า password ไม่ได้ใช้ในการทำงาน? นั้นหมายถึงอย่างไรครับ ปรกติหน้าที่ของ password จะใช้ในการตรวจสอบว่าเป็น member ใช่หรือไม่ เพื่อแยกออกจากบุคคลทั่วไป
2. ที่คุณแนะนำว่าไม่ควร register ไว้ หรือไม่ควรใส่ไว้ในตัวแปร session เพื่อความปลอดภัย ซึ่งหมายถึงต้องเขียนโปรแกรมแบบที่ 1 หรือแบบที่ 2 ครับ
แบบที่ 1
<?
if ($username!=" " && $password!=" ")
{
$link=mysql_connect("localhost", "root", "");
mysql_select_db("company", $link);
$sql="select * from company where username='$u' and password='$p'";
$result=mysql_query($sql, $link);
$row=mysql_num_rows($result);
if ($row>=1)
{
session_start();
session_register("active");
session_register("username");
session_register("password");
$_SESSION["active"]="ok";
$_SESSION["username"]=$u;
$_SESSION["password"]=$p;
print("Welcome member $company to our website");
}
else
print("Error login");
}
else
{
print("Error no any data!!<br>");
print("Please login first.");
}
?>
แบบที่ 2
<?
if ($username!=" " && $password!=" ")
{
$link=mysql_connect("localhost", "root", "");
mysql_select_db("company", $link);
$sql="select * from company where username='$u' and password='$p'";
$result=mysql_query($sql, $link);
$row=mysql_num_rows($result);
if ($row>=1)
{
session_start();
session_register("active");
session_register("username");
$_SESSION["active"]="ok";
$_SESSION["username"]=$u;
print("Welcome member $company to our website");
}
else
print("Error login");
}
else
{
print("Error no any data!!<br>");
print("Please login first.");
}
?>
Wed 11 Oct 2006 07:44:21
สวัสดีครับ
ขอบคุณมากครับ และผมคิดว่าตอนนี้ผมกำลังมีปัญหาในเรื่องของ member เข้ามา register แล้วครับ เพราะว่า ไม่ว่าจะ key อักษรใดๆเข้าไปใน username และ password ปรากฎว่าผ่านหมดเลยครับ
คงต้องขอรบกวนช่วยแนะนำด้วยครับ
อ่อ กลับมานั่งอ่าน reply ข้างบนผมลืม comment เรื่องการรับค่าจาก form แนะนำให้ใช้ $_POST[] ดีกว่าครับ
Wed 11 Oct 2006 15:09:01
สวัสดีครับ และขอขอบคุณที่กรุณาช่วยเหลืออยู่เสมอ
ผมกำลังทดสอบในเรื่องของ การ register โดยใช้ session โดยผมเขียน file มา 2 files ได้แก่
1. session_form.html เป็น file แบบฟอร์มให้ member คีย์ username (usn) และ password (psw) โดยผมเขียนโปรแกรมดังนี้ครับ
<html>
<body>
<Form action="session_login.php" method=post name=a>
Username<input type="text" name="usn" size="20"><br>
Password <input type="password" name="psw" size="20"><br>
<input type="submit" value="submit">
</form>
</body>
</html>
2. session_login.php เป็น file ที่รับข้อมูล username และ password มาจาก file ที่หนึ่ง (session_form.html) ซึ่งผมเขียนโปรแกรมดังนี้
?
if($usn!=" " && $psw!= " ")
{
$link=mysql_connect("localhost", "root", "");
mysql_select_db("company", $link);
$sql="select email1 from company where usn='$u' and psw='$p'";
$result=mysql_query($sql,$link);
$row=mysql_num_rows($result);
if($row>=1)
{
session_start();
session_register("active");
session_register("usn");
$_SESSION["active"]="ok";
$_SESSION["usn"]=$u;
print("Welcome member to our website");
}
else
print("Error login");
}
?>
ผลปรากฎว่ายังไม่ได้ใส่ username กับ password แล้ว กด enter เลย ได้ผลเป็น "Welcome member to our website".
ซึ่งมันผิดครับ คงต้องรบกวนช่วยแนะนำด้วยครับ
อนันต์
ลองเปลี่ยนเป็น
if($_POST["usn"] !=" " && $_POST["psw"] != " ")
Wed 11 Oct 2006 21:53:32
สวัสดีครับ และขอขอบคุณที่กรุณาแนะนำ ผมได้ลองเปลี่ยนแล้วครับ ปรากฎว่าkey อะไรเข้าไปใน username หรือ password ก็ยังแสดง Welcome member to our website
คงต้องรบกวนช่วยแนะนำด้วยครับ
<?
if($_POST["usn"] !=" " && $_POST["psw"] != " ")
{
$link=mysql_connect("localhost", "root", "");
mysql_select_db("company", $link);
$sql="select email1 from company where usn='$u' and psw='$p'";
$result=mysql_query($sql,$link);
$row=mysql_num_rows($result);
if($row>=1)
{
session_start();
session_register("active");
session_register("usn");
$_SESSION["active"]="ok";
$_SESSION["usn"]=$u;
print("Welcome member to our website");
}
else
print("Error login");
}
?>
Wed 11 Oct 2006 22:06:54
สวัสดีครับ ผมแก้ได้แล้วครับ ต้องเปลี่ยนจาก $u เป็น $usn และ $p เป็น $psw ผมสับสนในเรื่องตัวแปรครับ
ขอขอบคุณอีกครั้งครับ
อนันต์

















