Thu 14 Sep 2006 22:31:54
สำหรับในส่วนที่ 3 ให้ user เลือกทั้ง 2 ช่องก่อนที่จะค้นหานั้น ทางคุณได้แนะนำในการเขียนดังนี้
<script language="javascript" type="text/javascript">
function validate(obj){
if(obj.product.value == "0"){
alert("Please select product");
obj.product.focus();
return false;
}else if(obj.country.value == "0"){
alert("Please select country");
obj.country.focus();
return false;
}
return true;
}
</script>
<b>Product group search</b><br>
<form name="form3" method="post" action="list1.php" onsubmit="return validate(this);">
<select name="product">
<option value="0">Please select</option>
<option value="agri">Agricultural Products</option>
<option value="alkohol">Alkoholic Beverages</option>
<option value="bakery">Bakery Products</option>
</select>
<select name="country">
<option value="0">Please select</option>
<option value="
<option value="
<option value="
</select>
<input type="submit" value="search">
</form>
ผมขอสอบถามเพิ่มเติมครับ เมื่อ user เลือกแล้ว กด submit การเขียน PHP เพื่อดึงข้อมูลออกมาจาก database mysql นั้นจะต้องเขียนอย่างไรครับ ผมได้ลองเขียน code program ดังข้างล่างนี้ ปรากฎว่าเกิด error จึงต้องขอคำแนะนำด้วยครับ
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link)
$sql="select company from test where country like'$country' and product like'$country' order by alphabet asc";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
คือผมอยากให้ข้อมูลนั้นโชว์ออกมาเป็นอย่างนี้ครับ
ยกตัวอย่าง
Product group: Agricultural Products Country:
- Austrum Co.,Ltd.
- Benefit Co.,Ltd.
- Monday Co.,Ltd.
โดยข้อมูลที่โชว์นั้น เรียงตามตัวอักษรชื่อบริษัทด้วยครับ
รบกวนขอคำแนะนำด้วยครับ
อนันต์
การ SELECT นั้นถ้าต้องการ ORDER ค่าที่อยู่หลัง order คือชื่อ field ที่ได้ทำการ SELECT ไว้ครับ
Thu 14 Sep 2006 23:35:22
สวัสดีครับ
ขอขอบคุณ และผมคงไม่เกรงใจที่จะถามแล้วนะครับ คิดว่าคงไม่เบื่อเสียก่อนนะครับ หลังจากผมเขียนตามที่คุณแนะนำแล้วปรากฎว่ามี error ดังนี้ครับ
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link)
$sql="select company from test where country like "'.$country.'"and product like "'.$country."' order by company asc";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
Parse error: parse error, unexpected T_VARIABLE in c:\appserv\www\test\list_3.php on line 10
ลองทำการไล่จับคู่ single quote และ double quote ดูครับว่าถูกต้องหรือไม่ ถ้าใช้ DW เขียนจะเห็นชัดครับว่าเราจับคู่ถูกหรือไม่
Fri 15 Sep 2006 09:23:15
ขอบคุณครับ แต่ยังคงขึ้น Error อยู่เลยครับ
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link)
$sql="select * from test where country like "'.$country."'and product like '".$product.'" order by company asc";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
ขึ้น error ว่า Parse error: parse error, unexpected T_VARIABLE in c:\appserv\www\test\list_3.php on line 10
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link)
$sql="select * from test where country like '".$country."'and product like '".$product."' order by company asc";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
ตามที่ผมได้แจ้งไว้แล้วครับ single quote กับ double quote ครับ
Fri 15 Sep 2006 20:10:55
สวัสดีครับ
ผมได้ copy ของคุณแล้ว ก็ยังขึ้น error เหมือนเดมิข้างล่างครับ
Parse error: parse error, unexpected T_VARIABLE in c:\appserv\www\test\list_3.php on line 10
อนันต์
Fri 15 Sep 2006 22:00:21
ขอบคุณครับ ได้แก้ไขแล้วปรากฎว่ายัง error อยู่เลยครับ
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link);
$sql="select * from test where country like '".$country."'and product like '".$product."' order by company asc";
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
Error โชว์ดังนี้ครับ
| No. | Company | Country | Product group | Food News |
ได้เปลี่ยนเป็น mysql_fetch_array($res) ปรากฎว่ายังเกิด error เหมือนเดิมเลยครับ
ด้วยความเคารพ
อนันต์
Fri 15 Sep 2006 22:13:57
Error ดังนี้ครับ
อนันต์
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link);
$sql="select * from test where country like '".$country."'and product like '".$product."' order by company asc";
echo $sql;
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product
group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
จากนั้นให้ตรวจสอบว่าคำสั่ง SQL นั้นถูกต้องหรือไม่ครับ หรือให้เอาไป run ใน phpMyAdmin ดูครับเท่าที่ดูน่าจะผิดตรงที่ไม่มีช่องว่างระหว่าง 2 condition ครับ ลองเปลี่ยนเป็น
$sql="select * from test where country like '".$country."' and product like '".$product."' order by company asc";
Fri 15 Sep 2006 22:46:39
ขอบคุณครับ ปรากฎว่า error ดังนี้ครับ
select * from test where country like 'Thailand' and product like 'agri' order by company asc
| No. | Company | Country | Product group | Food News |
พอเอาไปรันใน phpmyadmin ปรากฎว่า มี error ว่า
ฐานข้อมูล test - ตาราง test ทำงานอยู่บน localhost
ผิดพลาด
MySQL แสดง:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '<?
$link=mysql_connect("localhost","root","")' at line 1
[เอกสารอ้างอิง] · [ย้อนกลับ]
อนันต์
Fri 15 Sep 2006 22:48:15
ขอบคุณครับ ปรากฎว่า error ดังนี้ครับ
select * from test where country like 'Thailand' and product like 'agri' order by company asc
| No. | Company | Country | Product group | Food News |
พอเอาไปรันใน phpmyadmin ปรากฎว่า มี error ว่า
ฐานข้อมูล test - ตาราง test ทำงานอยู่บน localhost
ผิดพลาด
MySQL แสดง:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '<?
$link=mysql_connect("localhost","root","")' at line 1
[เอกสารอ้างอิง] · [ย้อนกลับ]
อนันต์
เอาคำสั่งนี้ไป query ใน phpMyAdmin ครับ
Sat 16 Sep 2006 04:05:38
ขอบคุณมากครับ
ผมได้นำเอาคำสั่ง select * from test where country like 'Thailand' and product like 'agri' order by company asc ไป query ใน phpMyAdmin แล้วครับ ปรากฎว่ายังมีข้อผิดพลาดอยู่ดังนี้
ฐานข้อมูล test - ตาราง test ทำงานอยู่บน localhost
ผิดพลาด
คำค้น SQL :
SELECT *
FROM test
WHERE country
LIKE 'Thailand' AND product
LIKE 'agri'
ORDER BY company ASC
LIMIT 0 , 30
MySQL แสดง:
#1054 - Unknown column 'product' in 'where clause'
[เอกสารอ้างอิง] · [ย้อนกลับ]
สาเหตุที่ฟ้องบอกว่า ไม่รู้จัก column 'product' เป็นไปได้ไหมครับที่สาเหตุมาจากการที่ผมไม่มี field name ชื่อ product ใน ฐานข้อมูล Mysql เพราะในฐานข้อมูล Mysql ผมมีชื่อ field name ดังนี้ครับ
แต่ field name agri, alkohol และ bakery อยู่ใน code program ที่ผมเขียนใน html ด้านล่างนี้
<b>Product group search</b><br>
<form name="form3" method="post" action="list_3.php" onsubmit="return validate(this);">
<select name="product">
<option value="0">Please select</option>
<option value="agri">Agricultural Products</option>
<option value="alkohol">Alkoholic Beverages</option>
<option value="bakery">Bakery Products</option>
</select>
ซึ่งถ้าสาเหตุมาจาก field name ที่เก็บในฐานข้อมูลไม่มีชื่อ product นั้น คงต้องช่วยอธิบายแล้วละครับว่าผมจะต้องทำอย่างไร
ด้วยความเคารพ
อนันต์
Sat 16 Sep 2006 17:34:01
ขอขอบคุณครับ
มี file ที่เกี่ยวข้องกัน 3 file ครับ ได้แก่
File ที่ 1 Add.html ที่ addmin เข้ามา add ข้อมูลลงในฐานข้อมูล
<html>
<head>
<title>Add company.html</title>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-874">
</head>
<body>
<p><b><u>Add data</u></b></p>
<form name="form1" method="post" action="add.php">
<p><b>Product group</b><br>
<input type="checkbox" name="agri" value="1">Agricultural Products<br>
<input type="checkbox" name="alkohol" value="1">Alkoholic Beverages<br>
<input type="checkbox" name="bakery" value="1">Bakery Products<br>
<p><input type="submit" value="Add data">
</form>
</body>
</html>
ซึ่งในส่วนของ product group นั้น ผมจะเก็บข้อมูลเป็น checkbox ให้ addmin click เลือกกลุ่มสินค้า
การ add ข้อมูลลงในฐานข้อมูล mysql ผมจึงตั้งชื่อ field ว่า
agri, alkohol และ bakery
เพื่อจะได้รู้ว่าในกลุ่มสินค้า Agricultural Products นั้นมีบริษัทอะไรอยู่บ้าง?
ในกลุ่มสินค้า Alkoholic Beverages นั้นมีบริษัทอะไรอยู่บ้าง?
กลุ่มสินค้า Bakery Products นั้นมีบริษัทอะไรอยู่บ้าง?
File ที่ 2 list_1.php ใช้ในการ search หาชื่อบริษัทต่างๆ ในเงื่อนไขว่าอยู่ในกลุ่มอาหารใดและประเทศอะไร
ซึ่งอยู่ในรูปของ List box ซึ่งจะต้องเลือกกลุ่มอาหาร 1 กลุ่ม และประเทศ 1 ประเทศ
ซึ่งในการเขียนโปรแกรม list box ในส่วนของกลุ่มอาหาร จึงต้องมีการตั้ง <select name=product> เกิดขึ้น
<script language="javascript" type="text/javascript">
function validate(obj){
if(obj.product.value == "0"){
alert("Please select product");
obj.product.focus();
return false;
}else if(obj.country.value == "0"){
alert("Please select country");
obj.country.focus();
return false;
}
return true;
}
</script>
<b>Product group search</b><br>
<form name="form3" method="post" action="list_3.php" onsubmit="return validate(this);">
<select name="product">
<option value="0">Please select</option>
<option value="agri">Agricultural Products</option>
<option value="alkohol">Alkoholic Beverages</option>
<option value="bakery">Bakery Products</option>
</select>
<select name="country">
<option value="0">Please select</option>
<option value="
<option value="
<option value="
</select>
<input type="submit" value="search">
</form>
File ที่ 3 list_3.php file ที่ใช้ในการดึงฐานข้อมูลออกมาจากฐานข้อมูล
<?
$link=mysql_connect("localhost","root","");
if(!$link)
{
print("Error");
}
else
{
mysql_select_db("test",$link);
$sql="select * from test where country like '".$country."' and product like '".$product."' order by company asc";
echo $sql;
$res=mysql_query($sql,$link);
print("<table border=1>");
print("<tr><td>No.</td><td>Company</td><td>Email</td><td>Country</td><td>Product group</td><td>Food News</td></tr>");
while($row=mysql_fetch_row($res))
{
print("<tr>");
print("<td></td><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]<br>$row[4]<br>$row[5]<br></td><td>$row[6]</td></tr>");
}
print("<table>");
}
?>
ซึ่งทั้ง 3 file คือที่มาของตัวแปร product และ ตัวแปร agri, alcohol และ bakery ที่เก็บในฐานข้อมูล Mysql
ประเด็นที่ทำให้เกิดปัญหานั้นเกิดจากตอนเก็บข้อมูลลงในฐานข้อมูลนั้นผมใช้ program check box
แต่ตอนที่จะ search หาข้อมูลนั้นผมใช้ program list box ทำให้มีตัวแปรเพิ่มขึ้นอีก 1 ตัวได้แก่ ตัวแปร product ซึ่งไม่มีในฐานข้อมูล Mysql
ซึ่งเมื่อเกิดปัญหาอย่างนี้ขึ้นมาจะแก้ไขอย่างไรครับ
ช่วยแนะนำด้วยครับ
อนันต์
Sat 16 Sep 2006 22:02:25
สวัสดีครับ
ขอบคุณมากครับ ที่เก็บในฐานข้อมูล Mysql นั้นเป็น VARCHAR ครับ อย่างไรก็ตามช่วยอธิบายให้ผมทราบนิดนึงว่า
INT
CHAR
VARCHAR
นั้นหมายถึงอะไร เพราะถึงตอนนี้ที่ผมเขียนข้อมูลเข้าไปเก็บในฐานข้อมูล ส่วนใหญ่จะเป็น text ผมก็เลยไม่เคยไปเปลี่ยนใน MYSQL เป็นอย่างอื่น เพราะปรกติจะโชว์ VARCHAR อยู่แล้ว
ขอบคุณครับ
อนันต์
ซึ่งการเก็บคุณเก็บค่าใดลงไปเพื่อบ่งชี้ครับ เช่น true, agri หรือค่าอะไรครับ
ส่วนชนิดข้อมูลในการใช้งานนั้น ถ้าเป็นไปได้แนะนำให้ศึกษาที่ MySQL เพื่อที่จะได้รายละเอียดครบถ้วนครับ เพื่อใช้ในการพัฒนาระบบต่อไปครับ
Sun 17 Sep 2006 07:49:55
ขอบคุณครับ
ใช่ครับ ที่เกี่ยวค่านั้นเพื่อบอกว่าแต่ละบริษัทมีสินค้าอะไร โดยค่าที่เก็บผมใช้ค่า 1 ครับ ยกตัวอย่าง
ส่วนชนิดของการใช้งานนั้น ผมจะเข้าไปศึกษาใน MySQL ที่คุณแนะนำมาครับ
ขอบคุณครับ
อนันต์
ถ้าเป็นไปได้เปลี่ยน agri, alkohol, bakery เป็น field ชนิด TINYINT ขนาด 1 เพื่อเก็บเลข 0 หรือ 1 แทนครับ จากนั้นเปลี่ยนการค้นหาเป็น
$sql = "SELECT * FROM test WHERE country = 'Thailand' AND ".$product." = 1 ORDER BYcompany ASC";
ถึงแม้ว่าขนาดของ TINYINT กับ CHAR(1) จะเท่ากัน แต่ CHAR(1) สามารถเป็นข้อมูลอื่นๆที่ไม่ใช่ 0 หรือ 1 ทำให้อาจจะเกิดปัญหาได้ในอนาคตครับ ส่วนการเลือกใช้ field นั้นต้องดูความเหมาะสมของข้อมูลที่จะบันทึกครับ และคำนึงถึงการจองพื้นที่เท่าที่จำเป็น และขนาดของแต่ละชนิดข้อมูล ในทางปฏิบัติแล้วชนิดข้อมูลใดๆก็สามารถทำงานได้คล้ายๆกัน แต่จะได้ประสิทธิภาพไม่เท่ากัน ถ้าเราสามารถ optimize ทั้งใน PHP และใน MySQL ได้นั้นจะทำให้ application ทำงานเร็วขึ้นมากครับ อ่านเรื่องขนาดของแต่ละชนิดข้อมูลได้ที่ http://dev.mysql.com/doc/refman/4.1/en/storage-requirements.html
Sun 17 Sep 2006 15:28:01
ขอขอบคุณครับที่ช่วยเหลือและให้คำแนะนำมาตลอด
ใช้ได้ผลแล้วครับและจะเข้าไปศึกษาเรื่องของชนิดของข้อมูลในเว็บไซค์ที่แนนำมา
อนันต์
Tue 1 Jan 2008 15:07:14
ทำไมมันฟ้องอย่างนี้ ค่ะ
syntax error, unexpected T_CLASS in C:\AppServ\www\PHPbasic\genhtml.php on line 102
Wed 2 Jan 2008 14:04:16
Thu 10 Jan 2008 19:45:58
ขอบคุณน้ำใจพี่ Administrator เหลือ กินจริงๆๆ ครับ
Wed 23 Jan 2008 15:45:52
Sat 26 Jan 2008 04:06:49
<body>
<center>
ยินดีต้อนรับคุณ <? = $row["name"] ?> <? = $row["lastname"]?> ตรงนี้เขียนโค้ดต่อยังไงครับ
<?
if ($row["user id"] == "admin") {
print " <a href=admin.php>เข้าร้าน</a>" ;
} else {
print " <a href=shop.php>เข้าร้าน</a>" ;
}
?>
</body>
</html>
ช่วยบอกผมหน่อยนะครับ คือรันแล้วไปติดตรงนี้ครับที่ผมขีดเส้นใต้ไว้นะครับ
Sat 26 Jan 2008 15:17:39
Sat 26 Jan 2008 17:25:01
คือผมรันแล้วมันขึ้นอย่างนี้ครับ
Parse error: syntax error, unexpected '=' in C:\AppServ\www\0.php on line 36
ส่วนนี่คือโค้ดที่ผมเขียนครับ ที่ขีดเส้นใต้คือบรรทัดที่ 36 ครับ ช่วยหน่อยครับ
<html>
<body>
<center>
ยินดีต้อนรับคุณ <? = $row["name"] ?> <? = $row["lastname"]?>
<?
if ($row["user id"] == "admin") {
print " <a href=admin.php>เข้าร้าน</a>" ;
} else {
print " <a href=shop.php>เข้าร้าน</a>" ;
}
?>
</body>
</html>
Sat 26 Jan 2008 19:30:15
เครื่องหมาย = สามารถใช้ได้ตั้งแต่ version ไหนผมจำไม่ได้ แต่หลังมานี้โดยเฉพาะ PHP5 และ PHP6 จะมีการ strict เรื่อง syntax มากซึ่ง = จะใช้ในการ assign ค่าเท่านั้น ดังนั้นควรพยายามเขียนตาม syntax ที่ถูกต้องดีกว่าครับ อีกอย่างต้องปิดด้วย ; เพื่อจบประโยคด้วยครับ

















