Sun 22 Oct 2006 19:27:11
สวัสดีครับ
ผมคิดว่าผมกำลังสับสนในเรื่องการดึงข้อมูลจากฐานข้อมูล Mysql มาแสดงผลบนหน้าเว็บไซค์ ซึ่งได้ถามคุณไปหลายกระทู้แล้วครับ แต่ยอมรับว่ายังสับสนอยู่ จึงขอสรุปและขอถามดังนี้ครับ
ซึ่งการแสดงผลที่ผมถามนี้มีอยู่ 2 แบบ ได้แก่
แบบที่ 1 การดึงข้อมูลจากฐานข้อมูล mysql มาให้ user ดู โดยไม่สามารถทำการแก้ไขได้
แบบที่ 2 การดึงข้อมูลจากฐานข้อมูล mysql มาให้ user ดู โดยสามารถแก้ไขได้
คำถาม
1. ทั้ง 2 แบบก่อนที่จะแสดงผลนั้นจะต้องเขียน code program ด้านบนเหมือนกันดังนี้
mysql_select_db("company",$link);
$sql="select * from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
ถูกต้องไหมครับ?
2. แบบที่ 1 ในการดึงข้อมูลขึ้นมาให้ user อ่าน โดยไม่สามารถแก้ไขได้นั้น การเขียนโปรแกรมจะเป็นแบบนี้ใช่ไหมครับ?
2.1 กรณีที่การส่งข้อมูลจาก form มาเก็บไว้ใน ฐานข้อมูล Mysql นั้นเป็นแบบ text box การเขียนโปรแกรมในการดึงข้อมูลขึ้นมาจะเป็นดังนี้
<tr><td>Company: </td><td><?echo $row["company"];?</td></tr>
2.2 กรณีที่เป็น list menu อาทิเช่นชื่อประเทศ
<tr><td>Country:</td><td><?echo $row["country"];?</td></tr>
2.3 กรณีที่เป็น check box ซึ่งสามารถเลือกข้อมูลได้หลายข้อมูลนั้น การเขียนโปรแกรมเพื่อดึงข้อมูลขึ้นมานั้นจะเขียนอย่างไรครับ?
3. แบบที่ 2 การดึงข้อมูลขึ้นมาให้ user อ่านและสามารถแก้ไขได้นั้น การเขียนโปรแกรมจะเขียนแบบนี้ใช่ไหมครับ?
3.1 กรณีที่เป็น text box
Company:<input type="text" name="company" value="<? echo $row["company"];?>">
3.2 กรณีที่เป็น list menu อาทิ ชื่อประเทศ
Country:<select name="country">
<option value="Albania"<? echo(($row["country"]==albania)?"selected":"");?>>Albania</option>/n
<option value="Algeria"<? echo(($row["country"]==algeria)?"selected":"");?>>Algeria</option>/n
<option value="Argentina"<? echo(($row["country"]==argentina)?"selected":"");?>>Argentina</option>/n
3.3 กรณีที่เป็น check box นั้นจะเขียนอย่างไรครับ?
ช่วยแนะนำด้วยครับ
อนันต์
Sun 22 Oct 2006 20:21:05
สวัสดีและขอบคุณครับ
สำหรับข้อ 3.3 กรณีที่เป็น check box นั้น คุณได้เคยแนะนำมาแล้วดังนี้ครับ
<input type="checkbox" name="agri" value="1"<? echo(($row["agri"]==1)?"checked":"");?>>Agricultural Products<br>
<input type="checkbox" name="alkohol" value="1"<? echo(($row["alkohol"]==1)?"checked":"");?>>Alkoholic Beverages<br>
<input type="checkbox" name="bakery"value="1"<? echo(($row["bakery"]==1)?"checked":"");?>>Bakery Products<br>
ผมคิดว่าข้อ 3.1 ถึง 3.3 น่าจะถูกต้องและสามารถใช้เป็นแบบมาตรฐานต่อไปได้ ซึ่งต้องขอขอบคุณ คุณที่กรุณาแนะนำ
ส่วนข้อ 2.1 ถึง ข้อ 2.3 ยังติดอยู่เลยครับ
รบกวนด้วยครับ
อนันต์
สมมุติว่าข้อมูลใน field ชื่อ myfield เป็น "1" ถ้าคุณ echo $row["myfield"] ก็จะมีแต่เลข 1
แต่ถ้าใน field ชื่อ myfield เป็น "value" ถ้า echo $row["myfield"] ก็จะได้ value
การนำมาแสดงผลในส่วนที่ผู้ใช้เห็นนั้น เป็นการประยุกต์ครับ การเลือกที่จะออกแบบฐานข้อมูลครับ ถ้าเอาแบบง่ายๆไม่ต้องคิดมากก็จับข้อมูลทุกอย่างที่ผู้ใช้งานป้อนเก็บลงฐานข้อมูลแบบ string (Varchar) ดื้อเลยก็ได้ครับ เวลาแสดผลก็ query ออกมาดื้อๆเช่นกัน เพราะอย่างไรก็เป็นข้อมูลที่ผู้ใช้ป้อนเข้ามาแน่นอน
แต่ที่ต้องมีการประยุกต์ใช้งานต่างๆ เพื่อลดความซ้ำซ้อนของข้อมูล เช่น ผมต้องการเก็บข้อมูล ระดับการศึกษาของผู้ใช้งาน วิธีง่ายๆให้พิมพ์แล้วก็เก็บลงฐานข้อมูลดื้อๆเลยก็ได้ครับ แต่ก็จะเกิดความซ้ำซ้อนของข้อมูล เช่น มัธยมศึกษา, ปริญญาตรี ฯลฯ ยังไม่รวมถึงข้อมูลที่ผู้ใช้งานอาจจะพิมพ์ผิดอีก จะได้เป็นจำนวนมหาศาล
จึงมีการออกแบบด้วยการใช้ตัวอธิบาย เช่น ผมให้ ประถมศึกษา = 1, มัธยมศึกษา = 2, ฯลฯ
เวลานำมาแสดงผลก็ดูว่าเป็นค่าใดแล้วก็แสดงให้ถูกต้อง ด้วย if หรือ switch
ในข้อ 2.1 นั้นถ้าข้อมูลที่ query ได้นั้นเป็นข้อมูลที่ต้องการแสดงก็ไม่ต้องมีการอธิบายใดๆ ก็ echo ดื้อๆได้เลย
ในข้อ 2.3 นั่นก็เช่นกันถ้าข้อมูลที่ query ได้เป็นข้อมูลที่แสดงก็ไม่ต้องมีการเขียนอธิบายเพิ่ม แต่ถ้าไม่ใช่ก็จับใส่ if หรือ switch แล้วก็ให้แสดงผลให้ถูกต้อง
ในส่วนของ checkbox นั้นเป็นข้อมูลที่ผู้ใช้สามารถเลือกได้มากกว่า 1 ค่า ถ้าคุณเก็บแบบแยก field เช่น programming, graphic, oa
เวลานำมาแสดงก็ต้อง query ออกมาทั้งหมดแล้วก็เขียนโค๊ดเพื่ออธิบายครับ เช่น
if($row["programming"] == 1) echo "Programming";
if($row["graphic"] == 1) echo "Graphic";
if($row["oa"] == 1) echo "Office Automation";
ก็จะได้การแสดงผลตามต้องการครับ
Mon 23 Oct 2006 00:15:45
ขอบคุณมากครับสำหรับคำแนะนำ
โปรแกรมที่ผมเขียนและการแสดงผลเป็นดังนี้ครับ
<?
session_start();
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
header("Location: popup_login.php");
}
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select * from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
?>
<table>
<tr><td>Company: </td><td><?echo $row["company"];?></td></tr>
<tr><td>Contact person:</td><td><?echo $row["cperson"];?></td></tr>
<tr><td>Address:</td><td><?echo $row["address"];?></td></tr>
<tr><td>Country:</td><td><?echo $row["country"];?></td></tr>
<tr><td>Phone:</td><td><?echo $row["phone"];?></td></tr>
<tr><td>Fax:</td><td><?echo $row["fax"];?></td></tr>
<tr><td>email_1:</td><td><?echo $row["email1"];?></td></tr>
<tr><td>email_2:</td><td><?echo $row["email2"];?></td></tr>
<tr><td>Website:</td><td><?echo $row["web"];?></td></tr>
<tr><td>Product detail:</td><td><?echo $row["productd"];?></td></tr>
</table>
<?
}
?>
ปรากฎว่าพอแสดงผลเป็นอย่างนี้ครับ
| Company: | |
| Contact person: | |
| Address: | |
| Country: | |
| Phone: | |
| Fax: | |
| email_1: | |
| email_2: | |
| Website: | |
| Product detail: |
ไม่มีการแสดงผลของข้อมูลออกมา ซึ่งไม่ทราบว่าผมเขียนโปรแกรมผิดหรือเปล่าครับ
ช่วยแนะนำด้วยครับ
อนันต์
$sql="select * from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
echo $email;
print_r($row);
ลองดูครับว่ามีการแสดงผลใดๆหรือไม่ครับ
ผมว่าน่าจะเป็นที่ตัวแปร $email ไม่มีค่าครับ
Mon 23 Oct 2006 01:42:49
ขอบคุณที่แนะนำครับ มี error ครับ
<?
session_start();
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
header("Location: popup_login.php");
}
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select * from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
echo $email1
print_r($row);
?>
<table>
<tr><td>Company: </td><td><?echo $row["company"];?></td></tr>
<tr><td>Contact person:</td><td><?echo $row["cperson"];?></td></tr>
<tr><td>Address:</td><td><?echo $row["address"];?></td></tr>
<tr><td>Country:</td><td><?echo $row["country"];?></td></tr>
<tr><td>Phone:</td><td><?echo $row["phone"];?></td></tr>
<tr><td>Fax:</td><td><?echo $row["fax"];?></td></tr>
<tr><td>email_1:</td><td><?echo $row["email1"];?></td></tr>
<tr><td>email_2:</td><td><?echo $row["email2"];?></td></tr>
<tr><td>Website:</td><td><?echo $row["web"];?></td></tr>
<tr><td>Product detail:</td><td><?echo $row["productd"];?></td></tr>
</table>
<?
}
?>
Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in c:\appserv\www\web\main\popup_company.php on line 21
กรุณาแนะนำด้วยครับ
อนันต์
Mon 23 Oct 2006 16:44:39
ขอบคุณครับ ปรากฎผลดังนี้ครับ
Array ( [0] => [company] => [1] => [cperson] => [2] => [address] => [3] => [country] => [4] => [phone] => [5] => [fax] => [6] => [email1] => [7] => [email2] => [8] => [web] => [9] => [productd] => [10] => 0 [agri] => 0 [11] => 0 [alkohol] => 0 [12] => 0 [nonal] => 0 [13] => 0 [bakery] => 0 [14] => 0 [cannedfood] => 0 [15] => 0 [cereals] => 0 [16] => 0 [candies] => 0 [17] => 0 [sugar] => 0 [18] => 0 [coffee] => 0 [19] => 0 [condiments] => 0 [20] => 0 [foodin] => 0 [21] => 0 [fruits] => 0 [22] => 0 [dressings] => 0 [23] => 0 [meat] => 0 [24] => 0 [milk] => 0 [25] => 0 [oil] => 0 [26] => 0 [organic] => 0 [27] => 0 [pasta] => 0 [28] => 0 [ready] => 0 [29] => 0 [seafood] => 0 [30] => 0 [mail] => 0 [31] => 20061017071955 [dtnow] => 20061017071955 )
| Company: | |
| Contact person: | |
| Address: | |
| Country: | |
| Phone: | |
| Fax: | |
| email_1: | |
| email_2: | |
| Website: | |
| Product detail: |
อย่างนี้ต้องแก้ไขอย่างไรครับ กรุณาช่วยแนะนำด้วยครับล
อนันต์
จากผลจะเห็นว่าค่าที่ query ออกมาได้จาก database คืนค่ามาเป็น field ว่างๆครับ คงต้องตรวจสอบการ query ของคุณครับว่าถูกต้องหรือไม่ $email1 นั้นมีค่าตามต้องการหรือไม่ ให้ลองทำการ echo $sql; ดูว่ามี คำสั่งตามต้องการใช่หรือไม่ครับ
Mon 23 Oct 2006 20:13:05
ขอบคุณครับ ผมใส่ echo $sql; แล้วปรากฎผลดังนี้ครับ
select * from company where email1=''Array ( [0] => [company] => [1] => [cperson] => [2] => [address] => [3] => [country] => [4] => [phone] => [5] => [fax] => [6] => [email1] => [7] => [email2] => [8] => [web] => [9] => [productd] => [10] => 0 [agri] => 0 [11] => 0 [alkohol] => 0 [12] => 0 [nonal] => 0 [13] => 0 [bakery] => 0 [14] => 0 [cannedfood] => 0 [15] => 0 [cereals] => 0 [16] => 0 [candies] => 0 [17] => 0 [sugar] => 0 [18] => 0 [coffee] => 0 [19] => 0 [condiments] => 0 [20] => 0 [foodin] => 0 [21] => 0 [fruits] => 0 [22] => 0 [dressings] => 0 [23] => 0 [meat] => 0 [24] => 0 [milk] => 0 [25] => 0 [oil] => 0 [26] => 0 [organic] => 0 [27] => 0 [pasta] => 0 [28] => 0 [ready] => 0 [29] => 0 [seafood] => 0 [30] => 0 [mail] => 0 [31] => 20061017071955 [dtnow] => 20061017071955 )
| Company: | |
| Contact person: | |
| Address: | |
| Country: | |
| Phone: | |
| Fax: | |
| email_1: | |
| email_2: | |
| Website: | |
|
Product detail: ช่วยแนะนำด้วยครับ ว่าผมต้องทำอย่างไร? เป็นไปได้ไหมครับที่โปรแกรมนี้เป็นการรับส่งต่อกันเรื่อยๆ จาก 1. เริ่มแรกที่ click ชื่อกลุ่มสินค้า จะแสดงรายชื่อบริษัทที่อยู่ในกลุ่มสินค้านั้น 2. เมื่อ click ชื่อบริษัทเพื่อดูรายละเอียดของบริษัทนั้น โปรแกรมจะ pop up ขึ้นมาให้ใส่ username และ password ก่อน 3. เมื่อใส่ username และ password ถูกต้องแล้ว โปรแกรมจะ redirect ไปยังบริษัทที่ click เพื่อดูรายละเอียดนั้น ผมคิดว่าปัญหาจะอยู่ตรงที่จะเชื่อมอย่างไร ระหว่างบริษัทที่เลือกที่จะ click หลังจากที่ใส่ username และ password แล้ว โดยใช้ email1 เป็นตัวเชื่อม รบกวนช่วยแนะนำด้วยครับ อนันต์ |
จะเห็นว่า $email1 ไม่มีค่าใดๆครับ
Mon 23 Oct 2006 23:46:17
สวัสดีครับ
ผมคิดว่าคำตอบในกระทู้นี้เหมือนกับกระทู้ก่อนหน้า step ของโปรแกรมนี้เป็นอย่างนี้ครับ
1. เมื่อ user ต้องการ click ชื่อบริษัท แต่ยังไม่ได้ login ทำให้สามารถเห็นรายละเอียดของชื่อบริษัทได้ โปรแกรมจึง redirect ให้ไป login ก่อน
$sql = "SELECT company, country, email1 FROM company WHERE agri=1 order by company asc";
$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 agri=1 order by company asc LIMIT $goto , $pagelen ";
$res = mysql_query( $sql,$link );
echo"<table border=0 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'>
<a href=\"javascript:;\" onclick=\"window.open('popup_company.php', 'pw', 'width=400,height=350,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>";
if ($_GET["page"] > 1) {
$back = $_GET["page"] - 1;
echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."\"><img src=\"main_first.gif\" border=\"0\" align=\"absmiddle\" alt=\"First\"></a>\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=".$i."&alphabet=".$_GET["alphabet"]."=".$back."\"><img src=\"main_previous.gif\" border=\"0\" align=\"absmiddle\" alt=\"Previous\"></a>";
}
ขั้นตอนที่ 2 โปรแกรม popup_company.php
<?
session_start();
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
header("Location: popup_login.php");
}
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select * from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
?>
<table>
<tr><td>Company: </td><td><?echo $row["company"];?></td></tr>
<tr><td>Contact person:</td><td><?echo $row["cperson"];?></td></tr>
<tr><td>Address:</td><td><?echo $row["address"];?></td></tr>
<tr><td>Country:</td><td><?echo $row["country"];?></td></tr>
<tr><td>Phone:</td><td><?echo $row["phone"];?></td></tr>
<tr><td>Fax:</td><td><?echo $row["fax"];?></td></tr>
<tr><td>email_1:</td><td><?echo $row["email1"];?></td></tr>
<tr><td>email_2:</td><td><?echo $row["email2"];?></td></tr>
<tr><td>Website:</td><td><?echo $row["web"];?></td></tr>
<tr><td>Product detail:</td><td><?echo $row["productd"];?></td></tr>
</table>
<?
}
?>
3. โปรแกรม popup_login.php
<?
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_register("email1");
$_SESSION["active"]="ok";
$_SESSION["username"]=$username;
$_SESSION["email1"]=$row["email1"];
header("Location:popup_company.php");
}
else
print("Error login");
}
?>
เป็นไปได้ไหมครับ เหตุผลที่ผิดเพราะการ flow ของขั้นตอนไม่ถูกต้อง
ช่วยแนะนำด้วยครับ
อนันต์
นาย C เรียกเปิดดูข้อมูลบริษัท A แต่ตรวจสอบแล้วพบว่า นาย C ยังไม่ได้ login ก็บังคับให้เขาไป login ก่อน เมื่อ login ผ่านแล้วก็ redirect เขาให้ไปดูข้อมูลของยริษัท A ตามที่ควรจะเป็น
ที่โปรแกรมไม่แสดงตามที่ควรจะเป็นเนื่องจากระบบ login ตัวแปร SESSION ต่างๆไม่ถูกเรียกใช้เพื่อนำมาตรวจสอบครับ ในทุกครั้งที่ต้องการตรวจสอบหรือใช้งาน session ให้ใส่ session_start() ไว้ที่ส่วนบนของ script เสมอครับ
หลังจากคุณ assign ค่า reference เช่นคุณใช้ email1 นั้นผูกไปกับ session แล้ว ก็ควรเอาค่าที่อยู่ใน session มาใช้งานครับ
$sql="select * from company where email1='".$_SESSION["email1"]."'";
Tue 24 Oct 2006 07:44:40
สวัสดีและขอบคุณมากครับ
ผมได้แก้โปรแกรมตามที่แนะนำแล้วครับ ปรากฎว่ายังไม่แสดงผลออกมาเลยครับ
<?
session_start();
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
header("Location: popup_login.php");
}
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select * from company where email1='".$_SESSION["email1"]."'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
$row=mysql_fetch_array($res);
?>
<table>
<tr><td>Company: </td><td><?echo $row["company"];?></td></tr>
<tr><td>Contact person:</td><td><?echo $row["cperson"];?></td></tr>
<tr><td>Address:</td><td><?echo $row["address"];?></td></tr>
<tr><td>Country:</td><td><?echo $row["country"];?></td></tr>
<tr><td>Phone:</td><td><?echo $row["phone"];?></td></tr>
<tr><td>Fax:</td><td><?echo $row["fax"];?></td></tr>
<tr><td>email_1:</td><td><?echo $row["email1"];?></td></tr>
<tr><td>email_2:</td><td><?echo $row["email2"];?></td></tr>
<tr><td>Website:</td><td><?echo $row["web"];?></td></tr>
<tr><td>Product detail:</td><td><?echo $row["productd"];?></td></tr>
</table>
<?
}
?>
ผลที่ได้ดังนี้ครับ
| Company: | |
| Contact person: | |
| Address: | |
| Country: | |
| Phone: | |
| Fax: | |
| email_1: | |
| email_2: | |
| Website: | |
| Product detail: |
รบกวนช่วยแนะนำด้วยครับ
อนันต์
Tue 24 Oct 2006 15:50:38
ขอบคุณครับ ผมเห็นด้วยครับถ้าแก้กระทู้ก่อนหน้านี้ได้ กระทู้นี้ก็จะแก้ได้เหมือนกัน
ยังไงรบกวนช่วยแนะนำด้วยนะครับ
อนันต์

















