พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร
PHP development / pop up ให้ใส่ username and password
Anan
Anan
Mon 16 Oct 2006 09:58:10

สวัสดีครับ

มีเรื่องรบกวนอีกแล้วครับ โปรแกรมข้างล่างนี้ เป็นเป็นการเช็คว่าถ้าไม่เป็น member ให้แสดงในส่วนที่เป็น Email ว่า member only แต่ถ้าเป็น member แล้ว จะแสดง email ของบริษัทต่างๆให้เห็น

<?session_start()?>
<meta http-equiv="Content-Type"  content="text/html; charset=tis-620"> 
<center>
<?

$pagelen = 10 ;
$_GET["page"] = $_REQUEST['page'];
if (empty($_GET["page"] )) { $_GET["page"] =1; }

$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql = "SELECT company, country, email1 from company WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_GET["alphabet"]."'";

$res=mysql_query($sql,$link);
$num_rows=mysql_num_rows($res);

$totalpage = ceil($num_rows / $pagelen);

$goto = ($_GET["page"] -1) * $pagelen;
$sql = "SELECT company, country, email1 from company WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_GET["alphabet"]."'LIMIT $goto, $pagelen";
$res = mysql_query( $sql,$link );
  echo"<table border=1 cellpadding=3 cellspacing=0>";
  echo"<tr><td><font color='#8B0000' face='verdana' size='1'><center><b>Company</b></center></font></td>";
  echo"<td><font color='#8B0000' face='verdana' size='1'><center><b>Country</b></center></font></td>";
  echo"<td><font color='#8B0000' face='verdana' size='1'><center><b>Email</b></center></font></td></tr>";
while($row=mysql_fetch_array($res,MYSQL_ASSOC))
 {
echo"<tr><td><font color='#8B0000' face='verdana' size='1'>".$row["company"]."</font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".$row["country"]."</font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?$row["email1"]:"Member only")."</font></td></tr>";
}
echo "</table>";

if ($_GET["page"] > 1) {
 $back = $_GET["page"]  - 1;
 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."\"><img src=\"first.gif\" border=\"0\" align=\"absmiddle\" alt=\"First\"></a>\n";
 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."=".$back."\"><img src=\"previous.gif\" border=\"0\" align=\"absmiddle\" alt=\"Previous\"></a>";
}

for($i=1 ; $i<=$totalpage ; $i++) {
 if ($i == $_GET["page"] ) {
  echo " [<b><font size =+1 color=#990000>$i</font></b>] \n";
 } else  {
  echo " <a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."\">".$i."</a>";
 }
}

if ($_GET["page"] < $totalpage) {
 $next = $_GET["page"]  +1;
 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."=".$next."\"><img src=\"next.gif\" border=\"0\" align=\"absmiddle\" alt=\"Next\"></a>";
 echo " <a href=\"$PHP_SELF?page=".$totalpage."\"><img src=\"last.gif\" border=\"0\" align=\"absmiddle\" alt=\"Last\"></a> \n";
   }
}
 
?>

นอกจากสิทธิ์ของ member ที่จะเห็น email ของบริษัทต่างๆแล้ว สิทธิ์ของ member อีกอย่างหนึ่งได้แก่ การที่สามารถ click ที่ชื่อ company แล้วสามารถเห็นรายละเอียดของบริษัทนี้ๆได้ ได้แก่ ชื่อบริษัท, บุคคลที่สามารถติดต่อได้, ที่อยู่บริษัท, รายละเอียดสินค้าและกลุ่มสินค้า ซึ่งส่วนของ code โปรแกรมที่จะนำมาเขียนเพิ่มได้แก่ ส่วนที่เป็นตัวหนังสือสีแดง

echo"<tr><td><font color='#8B0000' face='verdana' size='1'>".$row["company"]."</font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".$row["country"]."</font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?$row["email1"]:"Member only")."</font></td></tr>";

ซึ่งผมคิดว่าจะต้องเขียนในส่วนของ company ให้เหมือนกับส่วนของ email ดังนี้

echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?$row["company"]:"Member only")."</font></td>

ปัญหาคือ

ผมไม่อยากให้โชว์เป็น Member only ผมอยากให้คนที่ไม่ใช่ member click ที่ชื่อบริษัทแล้ว ขึ้น pop up ขึ้นมาบอกว่า

"Member only Please enter your

user name_____________

 and password______________"

เมื่อใส่ username และ password แล้ว ก็จะเข้าสู่ระบบ member

เพราะฉะนั้นสิ่งที่ผมต้องเขียนมี 2 ส่วนได้แก่

ส่วนที่ 1 ส่วนที่เป็น pop up ว่าให้ใส่ username และ password

ส่วนที่ 2 เมื่อ member ใส่ username และ password แล้ว กลับมา click ที่ชื่อบริษัทจะ link ไปดูรายละเอียดของบริษัทนี้ได้

คิดได้แต่เขียนไม่ได้ คิดมาทั้งคืนแล้วครับ ผมคิดว่า จะต้องนำโปรแกรม

1. ส่วนที่เป็น pop up จะต้องเขียนดังนี้

<script language="javascript" type="text/javascript">
function validate(obj){
    if(obj.product.value == "0"){
       alert("Member only, please fill your username and password");
       obj.product.focus();
       return false;
     }
    return true;
}
</script>

ผมกำลังคิดแก้ในส่วนของ pop up ข้างบนนี้ แต่ไม่ทราบในส่วนของ object ว่าจะเขียนอย่างไร? คือกำลังสับสนว่าจะเขียนอย่างไร

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

อนันต์

Administrator
Mon 16 Oct 2006 12:19:14
การอ้างอิงถึง object ใน Javascript จะมีโครงสร้างตามนี้ครับ
window //เป็น browser window object
    |- document //เป็นเอกสารต่างๆที่ถูกโหลดขึ้นมาแสดงผล
          |- form //เป็น form ต่างๆที่วางอยู่บน document
             |- input //เป็น object ของ input สามารถอ้างโดยชื่อ (name) ของ object นั้นๆ
                   |- value //เป็น property ของแต่ละ input object ที่เก็บค่าที่แสดงอยู่ของ input object
                   |- ฯลฯ
          |- id //เป็น object ชนิดใดๆที่มีการ define identity ที่วางอยู่บน document
          |- applet //เป็น object ของ java applet
          |- anchor //เป็น object ของ link (<a> tag)
          |- frame //เป็น object ของ frame window บน document
          |- image //เป็น object ของ image (<img> tag)
          |- ฯลฯ

ดังนั้นจาก โค๊ดเช่น
<script language="javascript" type="text/javascript">
function validate(obj){
    if(obj.username.value == ""){
       alert("Please fill your username");
       obj.username.focus();
       return false;
    }
    return true;
}
</script>

<form action="" onsubmit="return validate(this)">
<input type="text" name="username"><input type="submit" value="submit">
</form>

เมื่อมีการ submit form จะเกิด evet onsubmit กับ form object โดยโค๊ดนี้มีการ handle event ไว้โดยให้นำค่าที่ return จาก function validate มาใช้งานโดยพร้อมกันนั้นก็ส่ง object ของตัว form เองไปเป็น parameter ด้วย (โดยใช้ keyword "this")

การทำงานของ function เมื่อรับค่า parameter มาจะถูก alias เป็นชื่อ object ใน function ก็มีการตรวจสอบว่าภายใน object นั้นๆมี object ที่ชื่อ username มีค่าเป็น "" หรือไม่ ถ้าใช่ก็ให้ alert
จากนั้นก็ให้มีการ focus บน object ที่ชื่อ username นั้นแล้วคืนค่ามาเป็น false ส่วนถ้า object ที่ชื่อ username นั้นๆ ไม่มีค่าเป็น "" ก็จะคืนค่าเป็น true

object form จะรับค่าที่ return มาแล้วตรวจสอบว่าเป็น false หรือไม่ ถ้าเป็น false ก็จะไม่มีการส่งค่าไปยังเอกสารที่ระบุไว้ใน action attribute

ถ้าคุณส่งค่าตามตัวอย่างใน function นั้นๆสามารถอ้างถึงชื่อ input ใดๆบน form ได้เลยครับ เช่น
ถ้ามี input ชื่อ password ก็สามารถอ้างถึง object โดย obj.password ได้ทันทีส่วนถ้าต้องการค่าของ object ก็จะได้เป็น obj.password.value

มองว่า input แต่ละตัวที่วางอยู่บน form นั้นๆเหมือน form เป็นกล่องโดยในกล่องเก็บ input แต่ละตัวไว้ และใน input แต่ละตัวก็ยังมีคุณสมบัติของตัวมันเอง เป็นหลักการของ OOP ครับ
Anan
Anan
Mon 16 Oct 2006 23:46:36

ขอบคุณครับ ที่กรุณาแนะนำ

 

ดังนั้นการเขียนให้ pop up ขึ้นมาทั้ง username และ password จะเป็นอย่างนี้ใช่ไหมครับ

 

<script language="javascript" type="text/javascript">

function validate(obj){

    if(obj.username.value == ""){

       alert("Please fill your username and password.");

       obj.username.focus();

       return false;

    }

    else if{obj.password.value==""){

       alert("Please fill your username and password.");

       obj.password.focus();

       return false;

    }

    return true;

}

</script>

 

<form action="member_login.txt" onsubmit="return validate(this)">

<input type="text" name="username"><br>

<input type="password" name="password"><br>

<input type="submit" value="submit">

</form>

 

ผมเอา code ข้างบนนี้ไปใส่ในโปรแกรมข้างล่างนี้ใช่ไหมครับ?

 

<?session_start()?>

<meta http-equiv="Content-Type"  content="text/html; charset=tis-620"> 

<center>

<?

 

<script language="javascript" type="text/javascript">

function validate(obj){

    if(obj.username.value == ""){

       alert("Please fill your username and password.");

       obj.username.focus();

       return false;

    }

    else if{obj.password.value==""){

       alert("Please fill your username and password.");

       obj.password.focus();

       return false;

    }

    return true;

}

</script>

 

<form action="member_login.txt" onsubmit="return validate(this)">

<input type="text" name="username"><br>

<input type="password" name="password"><br>

<input type="submit" value="submit">

</form>

 

 

$pagelen = 10 ;

$_GET["page"] = $_REQUEST['page'];

if (empty($_GET["page"] )) { $_GET["page"] =1; }

 

$link=mysql_connect("localhost","root","");

if(!$link)

{

print("Error");

}

else

{

mysql_select_db("company",$link);

$sql = "SELECT company, country, email1 from company WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_GET["alphabet"]."'";

 

$res=mysql_query($sql,$link);

$num_rows=mysql_num_rows($res);

 

$totalpage = ceil($num_rows / $pagelen);

 

$goto = ($_GET["page"] -1) * $pagelen;

$sql = "SELECT company, country, email1 from company WHERE UCASE(SUBSTRING(company, 1, 1)) = '".$_GET["alphabet"]."'LIMIT $goto, $pagelen";

$res = mysql_query( $sql,$link );

  echo"<table border=1 cellpadding=3 cellspacing=0>";

  echo"<tr><td><font color='#8B0000' face='verdana' size='1'><center><b>Company</b></center></font></td>";

  echo"<td><font color='#8B0000' face='verdana' size='1'><center><b>Country</b></center></font></td>";

  echo"<td><font color='#8B0000' face='verdana' size='1'><center><b>Email</b></center></font></td></tr>";

while($row=mysql_fetch_array($res,MYSQL_ASSOC))

 {

echo"<tr><td><font color='#8B0000' face='verdana' size='1'>".$row["company"]."</font></td>";

echo"<td><font color='#8B0000' face='verdana' size='1'>".$row["country"]."</font></td>";

echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?$row["email1"]:"Member only")."</font></td></tr>";

}

echo "</table>";

 

if ($_GET["page"] > 1) {

 $back = $_GET["page"]  - 1;

 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."\"><img src=\"first.gif\" border=\"0\" align=\"absmiddle\" alt=\"First\"></a>\n";

 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."=".$back."\"><img src=\"previous.gif\" border=\"0\" align=\"absmiddle\" alt=\"Previous\"></a>";

}

 

for($i=1 ; $i<=$totalpage ; $i++) {

 if ($i == $_GET["page"] ) {

  echo " [<b><font size =+1 color=#990000>$i</font></b>] \n";

 } else  {

  echo " <a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."\">".$i."</a>";

 }

}

 

if ($_GET["page"] < $totalpage) {

 $next = $_GET["page"]  +1;

 echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."=".$next."\"><img src=\"next.gif\" border=\"0\" align=\"absmiddle\" alt=\"Next\"></a>";

 echo " <a href=\"$PHP_SELF?page=".$totalpage."\"><img src=\"last.gif\" border=\"0\" align=\"absmiddle\" alt=\"Last\"></a> \n";

   }

}

 

?>

 

ผมขอสอบถามว่าแล้วผมจะเขียนบรรทัดนี้อย่างไรครับ

 

echo"<tr><td><font color='#8B0000' face='verdana' size='1'>".$row["company"]."</font></td>";

 

คือ ชื่อบริษัทนั้นยังแสดงอยู่ แต่เมื่อใดที่คนที่เข้ามาแล้วมา click ที่ชื่อบริษัท ถ้า

 

1.        เป็น member ที่ ใส่ username และ password แล้ว สามารถ click เข้าไปดูรายละเอียดของบริษัทนั้นได้เลย

2.        ไม่เป็น member ถ้า click แล้ว จะ pop up ขึ้นมา

 

<script language="javascript" type="text/javascript">

function validate(obj){

    if(obj.username.value == ""){

       alert("Please fill your username and password.");

       obj.username.focus();

       return false;

    }

    else if{obj.password.value==""){

       alert("Please fill your username and password.");

       obj.password.focus();

       return false;

    }

    return true;

}

</script>

 

<form action="member_login.txt" onsubmit="return validate(this)">

<input type="text" name="username"><br>

<input type="password" name="password"><br>

<input type="submit" value="submit">

</form>

 

ขอคำแนะนำด้วยครับ

 

อนันต์

Anan
Anan
Tue 17 Oct 2006 23:23:03

สวัสดีครับ

รบกวนช่วยตอบกระทู้นี้ด้วยนะครับ

อนันต์

Administrator
Tue 17 Oct 2006 23:55:56
ขอโทษด้วยครับไม่เห็นกระทู้นี้ การเขียน pop up นั้นก็เป็นลิงค์ธรรมดาครับ เช่น
<a href="javascript:;" onclick="window.open('popup.php', 'pw', 'width=250,height=150,toolbars=no,status=no');">Company name</a>

เป็น a link ธรรมดาครับ โดยผมใส่ javascript:; เพื่อให้ไม่เกิดการลิงค์ขึ้น มีค่าเท่ากับ javascript:void();
โดยผม handle event onclick ไว้เมื่อมีการ click ที่ object นี้ก็จะทำงาน script ภายใน
window.open() เป็นฟังก์ชั่นเพื่อเปิด window ขึ้นมาใหม่ครับ โดยมี parameter ที่จำเป็นคือ
1. เอกสารที่ต้องการให้แสดงผลในหน้าที่เปิดขึ้น ในที่นี้ผมต้องการให้เปิดเอกสารชื่อ popup.php
2. ชื่อหน้าต่างที่เปิดขึ้นมา ในที่นี้ผมให้ชื่อว่า pw
ส่วน parameter ที่ 3 เป็น option ในการแสดงผลครับ option ที่สำคัญก็
width เป็นความกว้างของหน้าต่างที่เปิดขึ้น
height เป็นความสูงของหน้าต่างที่เปิดขึ้น
toolbars เป็น flag เพื่อบอกว่าต้องการให้มี toolbar ในหน้าต่างที่เปิดขึ้นหรือไม่
status เป็น flag เพื่อบอกว่าต้องการให้มี status bar ในหน้าต่างใหม่หรือไม่
ยังมี option อีกมากครับเพื่อ customize window แต่ที่ใช้งานบ่อยๆก็มีเท่านี้ครับ

ดังนั้นการ popup เพื่อให้ใส่ username และ password นั้นก็ต้องสร้างเอกสารใหม่เพื่อใช้แสดง form ให้ใส่ username และ password เมื่อ submit ก็ให้ทำการตรวจสอบ username และ password ซึ่งถ้าข้อมูลถูกต้องก็ให้ทำการปิดหน้าต่างโดยใส่
<script language="javascript" type="text/javascript">
window.close();
</script>
ในส่วนท้ายของเอกสาร เพื่อให้เกิดการผิดหน้าต่างที่ pop up ขึ้นมาโดยอัตโนมัติครับ
Anan
Anan
Wed 18 Oct 2006 01:33:30

ขอบคุณครับ สำหรับคำแนะนำ ผมมี 4 คำถามดังนี้ครับ

1. ลิงค์ที่คุณให้มา ผมนำมาใส่ใน code ดังนี้

while($row=mysql_fetch_array($res,MYSQL_ASSOC))
 {
echo"<tr><td><font color='#8B0000' face='verdana' size='1'>
<a href="javascript:;" onclick="window.open('popup.php', 'pw', 'width=250,height=150,toolbars=no,status=no');">
".$row["company"]."</a></font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".$row["country"]."</font></td>";
echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?$row["email1"]:"Member only")."</font></td></tr>";
}
echo "</table>";

ปรากฎว่าเกิด error ดังนี้ครับ

Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in c:appservwwwmainindexindex_search1.php on line 38

2. ลิงค์ที่คุณให้มานี้หมายถึงว่า เมื่อ click แล้ว จะ pop up ขึ้นมาให้ใส่ username และ password ซึ่งหมายถึงว่าคนที่เข้ามา click นั้น ยังไม่ได้ใส่ username กับ password มาก่อน แต่กรณีที่ member นั้น ได้ใส่ username กับ password มาเรียบร้อยแล้ว ถ้าเข้ามา click แล้ว pop up นี้จะไม่เกิดขึ้น จะสามารถ click link เพื่อเข้าไปดูรายละเอียดของบริษัทนั้นๆ ได้เลย สรุป จะมี user 2 ประเภท

ประเภทที่ 1 user ที่ได้ key username และ password มาก่อนแล้ว แล้วเข้ามา click company ซึ่งจะต้องมี link เพื่อเข้าไปดูรายละเอียดของบริษัทนั้นๆได้เลย

ประเภทที่ 2 user ที่ยังไม่ได้ key username และ password มาก่อน แล้วเข้ามา click company ซึ่งจะมี pop up เกิดขึ้น เพื่อให้ใส่ username และ password เมื่อใส่เสร็จแล้ว ถึงจะสามารถเข้าไปดูรายละเอียดของบริษัทนั้นๆได้

ซึ่งผมคิดว่าอาจจะต้องเขียนประมาณนี้ได้ไหมครับ

echo"<td><font color='#8B0000' face='verdana' size='1'>".((isset($_SESSION["active"])&&$_SESSION["active"]="ok")?a href="javascript:;" onclick="window.open('popup.php', 'pw', 'width=250,height=150,toolbars=no,status=no');">$row["company"];"</a></font></td></tr>";
}

3. เอกสารที่ชื่อ popup.php นั้น เป็น form ที่เขียนออกมาต่างหากใช่ไหมครับ

file popup.php

<form action="member_login.txt" onsubmit="return validate(this)">

<input type="text" name="username"><br>

<input type="password" name="password"><br>

<input type="submit" value="submit">

</form>

4. แล้วในส่วนของ code โปรแกรมนี้

<script language="javascript" type="text/javascript">

function validate(obj){

    if(obj.username.value == ""){

       alert("Please fill your username and password.");

       obj.username.focus();

       return false;

    }

    else if{obj.password.value==""){

       alert("Please fill your username and password.");

       obj.password.focus();

       return false;

    }

    return true;

}

</script>

ผมนำไปใส่ไว้ด้านบนของโปรแกรมนั้นถูกต้องไหมครับ และเขียนถูกหรือเปล่าครับ

ขอคำแนะนำด้วยครับ

อนันต์

ผมนำไปใส่ไว้ด้านบนของโปรแกรมนั้นถูกต้องไหมครับ และเขียนถูกหรือเปล่าครับ

ขอคำแนะนำด้วยครับ

อนันต์

Administrator
Wed 18 Oct 2006 10:30:54
1. คุณต้องใส่ \ (back-slash) เพื่อให้การแสดงผลถูกต้องด้วยครับ
echo"<tr><td><font color='#8B0000' face='verdana' size='1'><a href=\"javascript:;\" onclick=\"window.open('popup.php', 'pw', 'width=250,height=150,toolbars=no,status=no');\">".$row["company"]."</a></font></td>";

2. การที่ต้องการให้ไฟล์ที่ popup นั้นเป็นไฟล์ที่แสดงข้อมูลรายละเอียด แต่ถ้ายังไม่ login ก็ให้แสดงฟอร์ม login นั้นก็มีวิธีง่ายๆครับ คุณก็ทำการ popup ไฟล์ที่ต้องการแสดงรายละเอียด โดยในส่วนบนของไฟล์ที่ใช้แสดงรายละเอียดก็ ใส่

if(condition ในการตรวจสอบไม่ login){
    header("Location: login.php");
}

เท่านี้เมื่อยังไม่มีการ login ก็จะถูก redirect บังคับให้ login ก่อนครับ

3-4 ทั้งหมดนี้ต้องอยู่ในไฟล์ที่ใช้แสดงฟอร์ม login ครับ
<script language="javascript" type="text/javascript">
function validate(obj){
    if(obj.username.value == ""){
       alert("Please fill your username and password.");
       obj.username.focus();
       return false;
    }
    else if{obj.password.value==""){
       alert("Please fill your username and password.");
       obj.password.focus();
       return false;
    }
    return true;
}
</script>
<form action="member_login.txt" onsubmit="return validate(this)">
<input type="text" name="username"><br>
<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
Anan
Anan
Wed 18 Oct 2006 16:26:25

ขอบคุณครับ สำหรับคำแนะนำ

ผมขอลำดับขั้นตอนดังนี้ครับ

กรณี user ที่ไม่ได้ login

1. เริ่มจาก code program นี้

echo"<tr><td><font color='#8B0000' face='verdana' size='1'>
<a href=\"javascript:;\" onclick=\"window.open('popup_company.php', 'pw', 'width=250,height=150,toolbars=no,status=no');\">
".$row["company"]."</a></font></td>";

เมื่อ user click ที่ ชื่อ company โปรแกรมจะ link ไปที่ file popup_company.php ดังนี้

popup_company.php

<?
if($username=="" && $password==""){
    header("Location: popup_login.php");
}
Company:<br>
Contact person:<br>
Address:<br>
Country:
?>

ซึ่งใน file นี้จะเช็คว่า user นี้ login แล้วหรือยัง ถ้ายังให้ตรงไปที่ file popup_login.php ผมมีคำถามดังนี้ครับ

1. เงื่อนไขที่บอกว่า ถ้า user ยังไม่ได้ login นั้น กับที่ผมเขียนว่า

<?
if($username=="" && $password==""){
    header("Location: popup_login.php");
}

ผมคิดว่าไม่น่าใช่ เพราะที่ผมเขียนนั้นหมายถึงว่า username และ password นั้นเป็นช่องว่าง แล้วการเขียนว่ายังไม่ได้ login นั้นเขียนอย่างไรครับ ช่วยแนะนำด้วยครับ

2. ถ้ายังไม่ได้ login แล้ว redirect ไปยัง file popup_login.php ซึ่งเขียนดังนี้

popup_login.php

<script language="javascript" type="text/javascript">
function validate(obj){
    if(obj.username.value == ""){
       alert("Please fill your username and password.");
       obj.username.focus();
       return false;
    }
    else if{obj.password.value==""){
       alert("Please fill your username and password.");
       obj.password.focus();
       return false;
    }
    return true;
}
</script>
<font color='#8B0000' face='verdana' size='1'><b>Company information</b> Please fill your username and password.</font>
<form action="login.php" onsubmit="return validate(this)">
<table>
<tr><td><font color="#000000" face="verdana" size="1"><b>Username</b></font></td>
<td><input type="text" name="username" size="20"></td></tr>
<tr><td><font color="#000000" face="verdana" size="1"><b>Password</b></font></td>
<td><input type="password" name="password" size="20"></td></tr>
<tr><td></td><td align="center"><input type="submit" value="submit"></td>
</form>

3. เมื่อ user ได้ key ใส่ username และ password แล้ว form จะส่งไปที่ login.php ซึ่งเขียนดังนี้

login.php

<?
                if($_POST["usn"] !=" " && $_POST["psw"] != " ")
                {
  $link=mysql_connect("localhost", "root", "");
  mysql_select_db("member", $link);
  $sql="select email1 from member where username='$username' and password='$password'";
  $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"]=$username;

   print("Welcome member to our website");
  }
  else
   print("Error login");
 }
?>

4. เมื่อ user ใส่ username และ password ถูกต้องแล้ว โปรแกรมจะขึ้นว่า "Welcome member to our website" ซึ่งหลังจากนี้แล้วปรกติที่เขียน web กัน จะทำยังไงกันครับ จะ reboot หน้าเว็บใหม่ หรือทำอย่างไร? เพื่อ user จะได้สามารถทำธุรกรรมบนหน้าเว็บเราต่อได้เลย

รบกวนขอคำแนะนำด้วยครับ

Administrator
Wed 18 Oct 2006 21:19:12
ถ้าหลังจาก login แล้วคุณทำการ set ให้มีค่า session เป็นค่าใดๆเช่น หลังจาก login แล้วผมให้ $_SESSION["active"] = "ok";
$_SESSION["username"] = $username;


ดังนั้นในเวลาผมเช็คว่า login หรือยัง ผมก็ต้องใช้ว่า
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == ""){
    header("Location: popup_login.php");
}

เนื่องจากเทคนิคในการสร้างความปลอดภัยให้ระบบไม่เหมือนกัน ใน if condition ผมจึงใส่คำว่า "condition ในการตรวจสอบไม่ login" ครับ

ในส่วนของไฟล์ login.php นั้นถ้าใน form คุณใช้ชื่อ textbox เป็น username และ password ในการรับค่าในไฟล์ login.php ก็ต้องเปลี่ยนเป็น $_POST["username"] และ $_POST["password"] ด้วยครับ

การที่ login แล้วจะให้เป็นอย่างไรนั้นขึ้นอยู่กับว่า policy ของแต่ละโปรแกรมครับ ในส่วนของคุณนั้น ที่ popup ถ้า login แล้วก็จะให้มีการแสดงรายละเอียดของบริษัทที่เลือกทันที ดังนั้นความเห็นส่วนตัวแล้วถ้าหลังจาก popup เพื่อให้ login แล้ว ถ้า login ผ่านก็ควร redirect หน้าที่ login ไปยังหน้าที่แสดงผลตามที่ควรจะเป็นในกรณีที่ user นั้นๆ login แล้วครับ
Anan
Anan
Wed 18 Oct 2006 23:35:35

สวัสดีและขอบคุณมากครับ

ตอนนี้ผมมีปัญหาอยู่ 2 เรื่องได้แก่

เรื่องที่ 1 เมื่อ user ใส่ username และ password แล้ว เมื่อ click ที่ชื่อบริษัทอีกครั้ง ปรากฎว่าไม่ไปที่ file popup_company.php แต่กลับมาที่ file popup_login.php คือให้ใส่ username และ password ใหม่อีก ขั้นตอนเป็นดังนี้

- เมื่อ user ยังไม่ได้ login หน้าเว็บจะแสดงดังนี้ครับ

Company
Country
Email
A.I.E. - Agro Import Export Lt Bulgaria Member only
A.I.D.A. di Giangreco Paolo Italy Member only
A.I.A. S.p.A. Agricoltura Ital Italy Member only
A.F.C. S.A. Belgium Member only
A.C.P. International SRL Italy Member only
A.B.A. Prosciutti SpA Italy Member only
A. Poortman (London) Ltd. United Kingdom Member only
A-1 Produce Co.Ltd Thailand Member only
A.I.M.O. Acetifici Italiani Mo Italy Member only
Aalst Chocolate Pte Ltd Singapore Member only
[1] 2 3 4 5 6 7 8 9 10 11 12Next Last

เมื่อ user ใส่ username และ password แล้ว ผมทำการ refresh หน้านี้อีกครั้งปรากฎผลดังนี้ครับ

Company
Country
Email
A.I.E. - Agro Import Export Lt Bulgaria agroimportexport@yahoo.com
A.I.D.A. di Giangreco Paolo Italy aida.giangreco@libero.it
A.I.A. S.p.A. Agricoltura Ital Italy aia@aia-spa.it
A.F.C. S.A. Belgium frederic.debrun@unifine.be
A.C.P. International SRL Italy info@acpinter.it
A.B.A. Prosciutti SpA Italy info@abaprosciutti.it
A. Poortman (London) Ltd. United Kingdom trading@poortman.com
A-1 Produce Co.Ltd Thailand a-1produce@a-1produce.com
A.I.M.O. Acetifici Italiani Mo Italy aimo@acetobalsamico.it
Aalst Chocolate Pte Ltd Singapore sales@aalst-chocolate.com.sg
[1] 2 3 4 5 6 7 8 9 10 11 12Next Last

e-mail ของ บริษัทต่างๆ จะแสดง email address ออกมา ซึ่งถูกต้อง แต่ พอ click ที่ชื่อบริษัทควรที่จะแสดง file popup_company.php ซึ่งจะแสดงรายละเอียดของบริษัทนั้น แต่ปรากฎว่า ยัง pop up เป็น file popup_login.php ซึ่งให้ใส่ username กับ password ใหม่อีก

echo"<tr><td><font color='#8B0000' face='verdana' size='1'>
<a href=\"javascript:;\" onclick=\"window.open('popup_company.php', 'pw', 'width=250,height=150,toolbars=no,status=no');\">
".$row["company"]."</a></font></td>";

ซึ่ง file popup_company.php ผมเขียนดังนี้ครับ

<?
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
    header("Location: popup_login.php");
}
?>
Company:<br>
Contact person:<br>
Address:<br>
Country:

ขอคำแนะนำด้วยครับ ทำไมเมื่อ login แล้ว แล้วกลับไป click ที่ชื่อ บริษัท ทำไมถึงไม่ redirect ไปที่ file popup_company.php?

เรื่องที่ 2 เมื่อ popup แล้วใส่ login ผ่านแล้ว จะให้มีการ redirect แสดงรายละเอียดของบริษัทที่เลือกทันที ผมคิดว่าต้องแก้ไข file นี้ โดยเปลี่ยนตรง "Welcome member to our website" นั้นให้ redirect ไปแสดงรายละเอียดของบริษัทที่เลือก รบกวนช่วยแนะนำด้วยครับว่าจะเขียนอย่างไรครับ?

<?
                if($_POST["username"] !=" " && $_POST["password"] != " ")
                {
  $link=mysql_connect("localhost", "root", "");
  mysql_select_db("member", $link);
  $sql="select email1 from member where username='$username' and password='$password'";
  $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"]=$username;

   print("Welcome member to our website");
  }
  else
   print("Error login");
 }
?>

รบกวนด้วยครับ

อนันต์

Administrator
Wed 18 Oct 2006 23:44:23
ลืมไปครับ
ในไฟล์ popup_company.php ที่มีการ check login นั้นมีการเรียกใช้ $_SESSION นั้นต้องมีการเรียกใช้
session_start(); ก่อนด้วยครับ
Anan
Anan
Sat 21 Oct 2006 21:56:44

สวัสดีครับและขอขอบคุณครับที่กรุณาแนะนำอยู่เสมอ

รบกวนช่วยตอบข้อที่ 2 ในเรื่องการ redirect ไปยังหน้าที่แสดงรายละเอียดของบริษัท หลังจากได้ทำการ login แล้วครับ

อนันต์

Administrator
Sat 21 Oct 2006 22:28:06
สามารถใช้คำสั่ง header() ได้ครับตาม #8 ครับ
Anan
Anan
Sun 22 Oct 2006 17:26:30

ผมมีคำถามถามเพิ่มเติมดังนี้ครับ

ผมเขียนโปรแกรมแล้วให้ redirect ดังโปรแกรมข้างล่างนี้ครับ

<?
                if($_POST["username"] !=" " && $_POST["password"] != " ")
                {
  $link=mysql_connect("localhost", "root", "");
  mysql_select_db("member", $link);
  $sql="select email1 from member where username='$username' and password='$password'";
  $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"]=$username;

   header("Location: main_indexmember.php");

  }
  else
   print("Error login");
 }
?>

โปรแกรม main_indexmember.php ด้านล่างนี้ครับ

<html>
<head>
<link rel="stylesheet" href="../stylesheet/webinterface.css" type="text/css" />
</head>
<body>

<?
require"main_head.txt";
?>

<table border=0 cellpadding=5 cellspacing=0 width=782>
<tr>
 <td width=150 valign=top bgcolor="#FAEBD7">
 <?
 require"main_right.txt";
 ?>
 </td>
 <td width=370 valign=top>
<br><font color='#228B22' face='verdana' size='1'><center><b>Welcome member <?echo $row["company"];?> to our website.</b></center></font>
 <?
 require"main_search.txt";
 ?>
 </td>
 <td width=262 valign=top>
 <?
 require"main_left.txt";
 ?>
 </td>
</tr>
</table>
</body>
</html>

ผมอยากให้มีคำว่า welcome member company A (ชื่อบริษัทที่เข้ามา login) to our website.

ผมได้เขียนโค๊ดโปรแกรมเพื่อดึงชื่อบริษัทมาเป็น Welcome member <?echo $row["company"];?> to our website.

ปรากฎว่าไม่มีการดึงชื่อบริษัทสมาชิกที่เข้ามา login นั้นออกมาจากฐานข้อมูล ซึ่งผลที่ได้แสดงเป็น

Welcome member to our website.

ขอคำแนะนำด้วยครับ ว่าจะเขียนอย่างไรถึงจะดึงชื่อบริษัทออกมาแสดงได้ครับ

อนันต์

 

Administrator
Sun 22 Oct 2006 17:42:55
ในไฟล์ main_indexmember.php นั้นผมไม่เห็นมีการประกาศ $row นี่ครับ หรือการ query ใดๆก็ไม่มีนี่ครับ ดังนั้น $row["company"] จึงไม่มีค่าใดๆครับ
Anan
Anan
Sun 22 Oct 2006 18:38:40

ขอบคุณครับ ผมได้แก้โปรแกรมตามนี้ครับ

<html>
<head>
<link rel="stylesheet" href="../stylesheet/webinterface.css" type="text/css" />
</head>
<body>

<?
require"main_head.txt";
?>

<table border=0 cellpadding=5 cellspacing=0 width=782>
<tr>
 <td width=150 valign=top bgcolor="#FAEBD7">
 <?
 require"main_right.txt";
 ?>
 </td>
<?
 mysql_select_db("company",$link);
 $sql="select company from company where email1='$email1'";
 $res=mysql_query($sql, $link);
 $n=mysql_num_rows($res);
 $row=mysql_fetch_array($res);
?>
 <td width=370 valign=top>
<br><font color='#228B22' face='verdana' size='1'><center><b>Welcome member <?echo $row["company"];?> to our website.</b></center></font>
 <?
 require"main_search.txt";
 ?>
 </td>
 <td width=262 valign=top>
 <?
 require"main_left.txt";
 ?>
 </td>
</tr>
</table>
</body>
</html>

ปรากฎว่าเกิด error ดังนี้ครับ

: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in c:\appserv\www\web\main\main_indexmember.php on line 19

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\appserv\www\web\main\main_indexmember.php on line 21

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\appserv\www\web\main\main_indexmember.php on line 22

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\web\main\main_indexmember.php on line 23

Welcome member to our website.

www.anan is a world food company directory. We have more than 20,000 food companies that you can open business gate to sell or buy food products.

Post buy and sell member's food products will send to food company in our database that they agree to receive.

Cost of member is USD200/year. If you interest, please register at member register.

Food company search
Alphabetical search
Food group search
Food company search
Alphabetical search
Food group search