Mon 14 Jan 2008 20:22:30
ท่านที่เก่ง ๆ (รวม Admin ด้วย) ช่วยตอบเป็นวิทยาทานเถอะ เพราะไปมาหลายเว็บแล้วครับบางท่านก็ไม่ตอบ หรือไม่ทราบก็ไม่รู้ (ขอตัวอย่างโค้ดด้วยครับ) มี 2 คำถามครับ
1). กรณีเรามี Listbox 3 Levels (สร้างตัวแปรเป็น $province, $ampur, $tumbol โดยดึงข้อมูลจาก MySQL ที่เราได้คีย์เข้าไปผ่าน phpMyAdmin, เป็นคนละกรณีกับคำถามที่ผ่าน ๆ มาน่ะครับ เพราะที่ผ่านมาจะเก็บรายชื่อตำบล อำเภอ จังหวัดทั้งหมดมีอยุ่ในประเทศไทย แต่กรณีของผมนั้นจะมีเฉพาะบางตำบล อำเภอ จังหวัด ที่จะต้องใช้) ใน listbox เมื่อเลือกข้อมูลได้สร้างบรรทัดแรก default ไว้เป็น --- Select ---- ปรากฎว่ามันออก default เป็นข้อมูลสุดท้ายใน table ที่มีอยู่ มันผิดที่ตรงไหนครับ
2.) ค้นหาข้อมูล 3 field (company, type, province)ในเทเบิลเดียว tbl_customer จาก MySQL เวลาส่งค่าเพื่อเช็คค่านั้นเราใช้คำสั่งแบบนี้ได้ไหมครับ
$sql="SELECT * FROM tbl_customer WHERE $company=company AND $type=type AND $province=province";
ไม่ทราบว่าผิดตรงไหน มันไม่แสดงข้อมูลออกมาครับ
Mon 14 Jan 2008 20:24:43
ขอโทษครับในข้อ 2.) แก้ไขเป็นดังนี้ครับ
$sql="SELECT * FROM tbl_customer WHERE $province=province AND $ampur=ampur AND $tumbol=tumbol";
Tue 15 Jan 2008 11:38:11
ส่วน query นั้นถ้าตัว field ที่ต้องการค้นหาเป็นแบบ Varchar, Text หรือ Binary สิ่งที่ค้นหาต้องใส่ ' คร่อมครับ เช่น
"SELECT ..... WHERE '".$province."'=province..."
Tue 15 Jan 2008 15:08:06
ก็ยังไม่เข้าใจครับ ลองหลายครั้งแล้วก็ไม่ได้ ขอให้ลองใส่ตัวอย่างจริงตามนี้ครับว่าจะใส่อย่างไร แบบนี้ถูกไหมครับ ขอบคุณล่วงหน้าครับ มือใหม่งง
$sql="SELECT * FROM tbl_customer WHERE '.$Changwat.'=changwat AND '.$ampur.'=ampur AND '.$tambol'=tambol" ORDER BY 'Changwat', 'ampur', 'tambol'";
Tue 15 Jan 2008 18:54:08
ที่ไม่สามารถทำงานได้ก็เนื่องจากคุณเขียนผิด Syntax ซึ่งผมจะใช้ . เพื่อใช้ในการเชื่อม string โดยปกติผมไม่นิยมเอาตัวแปลไปใส่ใน string ตรงๆ แบบ "SELECT * FROM tbl_customer WHERE $company=company AND $type=type AND $province=province"
ที่ผมบอกคือต้องมี ' คร่อมค่าที่ต้องการ ซึ่งต้องเข้าใจในการทำงานของคำสั่ง SQL ด้วยครับ และชื่อ field ใน MySQL จะเป็นแบบ Case-Sensitive ด้วยครับ
Tue 15 Jan 2008 19:35:52
ต้องขอโทษที่รบกวนครับ และขอบคุณอย่างสูงที่ได้กรุณาตอบครับ
คือผมก็หาจากหนังสือ (ข้อมูลน้อย) และหาตามเว็บต่าง ๆ (ไทย) ก็ไม่ค่อยจะมีหรือผมหาไม่เจอเอง (วัน ๆ ก็ท่องไปตลอด) เว็บต่างประเทศก็ละเอียดดีครับ แต่แปลแล้วก็ยังไม่ค่อยเข้าใจ จึงมาพึ่งเว็บไทยเราด้วยเพิ่มเติมครับ
Tue 15 Jan 2008 20:37:21
โปรเจ็ค Document ภาษาไทยยังไม่เสร็จเสียที (ตอนนี้กำลังสนุกกับ OOP Javascript) จริงๆยังมีอีกหลายอย่างอยากเขียนแต่ไม่ได้เริ่มสักที
Wed 16 Jan 2008 14:33:11
ขอรบกวน admin ด้วยครับ เพราะยังไงก็ยังไม่ได้ ขอนำตัวอย่างจริงให้ดูครับ ตามตัวอย่างดังนี้ครับ
1. ไฟล์ FormCheckRat.php เป็นฟอร์มระบุข้อมูล Listbox 3 levels, โดยดึงข้อมูลจาก MySQL มาแสดงและตัดข้อมูลที่ซ้ำ, เช่น ตัวเลือกที่ 1 เลือก สระบุรี, ตัวเลือกที่ 2 เลือก เฉลิมพระเกียรติ, ตัวเลือกที่ 3 เลือก ผึ้งรวง
<?
// Connect database
mysql_connect("localhost","root","17491749");
mysql_select_db("db_mysql");
// If submitted, check the value of "select". If its not blank value, get the value and put it into $select.
if(isset($select)&&$select!=""){
$select=$_GET['select'];
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
</head>
<body>
<form id="form1" name="form1" method="get" action="ReportCheckRat4.php">
จังหวัด :
<select name='select1'>
<option value="" selected>--- Select ---</option>
<?
// Get records 1st from database (table "tbl_Ratcharule").
$list_1=mysql_query("select distinct Changwat from tbl_Ratcharule order by Changwat asc");
// Show records 1st by while loop.
while($row_list=mysql_fetch_assoc($list_1)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Changwat']; ?></option>
<?
// End while loop.
}
?>
</select>
<br><br>
อำเภอ :
<select name='select2'>
<option value="" selected>--- Select ---</option>
<?
// Get records 2nd from database (table "tbl_Ratcharule").
$list_2=mysql_query("select distinct Ampur from tbl_Ratcharule order by Ampur asc");
// Show records 2nd by while loop.
while($row_list=mysql_fetch_assoc($list_2)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Ampur']; ?></option>
<?
// End while loop.
}
?>
</select>
<br><br>
ตำบล :
<select name='select3'>
<option value="" selected>--- Select ---</option>
<?
// Get records 3th from database (table "tbl_Ratcharule").
$list_3=mysql_query("select distinct Tambol from tbl_Ratcharule order by Tambol asc");
// Show records 3th by while loop.
while($row_list=mysql_fetch_assoc($list_3)){
?>
<option value="<? echo $row_list['id']; ?>" <? if($row_list['id']==$select){ echo "selected"; } ?>><? echo $row_list['Tambol']; ?></option>
<?
// End while loop.
}
?>
</select>
<input type="submit" name="Submit" value="ตกลง" />
</form>
<hr>
<p>
<?
// If you have selected from list box.
if(isset($select)&&$select!=""){
// Get records from database (table "tbl_Ratcharule").
/*
$result=mysql_query("select * from tbl_Ratcharule where id='$select'");
$row=mysql_fetch_assoc($result);
*/
?>
Information about <strong><? echo $row['name']; ?></strong> company...</p>
<p>........................................<br>
........................................<br>
........................................
<?
// End if statement.
}
// Close database connection.
mysql_close();
?>
</p>
</body>
</html>
2. ไฟล์ ReportCheckRat4.php
<?php
$link = mysql_pconnect("localhost","root","newkid");
mysql_select_db("db_mysql");
$userselect = mysql_query("SELECT Changwat, Ampur, Tambol, Name_File FROM tbl_ratcharule ORDER BY Changwat, Ampur, Tambol");
$numfield = mysql_num_fields($userselect);
print "<center><table border='1'>";
print "<tr>";
for ($i=0;$i<$numfield;$i++) {
print "<th><font size='2'>".mysql_field_name($userselect,$i)."</font>";
}
while ($selectrow=mysql_fetch_array($userselect)) {
print "<tr>";
for ($i=0;$i<$numfield;$i++) {
print "<td><font size='2'>".$selectrow[$i]."</font>";
}
}
print "</table></center>";
?>
เป็นไฟล์รับค่า ไม่ทราบว่าผิดตรงไหน ตรง Select ข้อมูล ? หรือผิดตั้งแต่ไฟล์แรก ? การกำหนดตัวแปรของข้อมูลที่ระบุ ??? เพราะเมื่อส่งค่าแล้วแสดงออกมาหมดเลย ไม่เป็นเฉพาะที่เราเลือก สระบุรี, เฉลิมพระเกียรติ, ผึ้งรวง ครับ
| Changwat | Ampur | Tambol | Name_File |
|---|---|---|---|
| นนทบุรี | บางใหญ่ | บางเลน | r199_165a_141148_4 |
| สระบุรี | เฉลิมพระเกียรติ | ผึ้งรวง | r122_108a_161150_1 |
| สระบุรี | เฉลิมพระเกียรติ | ผึ้งรวง | r152_199a_161150_1 |
| สระบุรี | เฉลิมพระเกียรติ | ผึ้งรวง | r148_155a_161150_2 |
| สระบุรี | เมือง | ดาวเรือง | r122_108a_161150_1 |
| สิงห์บุรี | เมือง | ดาวเรือง | r123_108a_141148_4 |
Thu 17 Jan 2008 13:37:34
ดังนั้นต้องมีการส่งตัวแปรที่ชื่อไม่ซ้ำกันอย่างน้อย 2 ตัวแปร
ถ้ายังไม่ได้โปรดแจ้งด้วยครับว่าไม่ได้อย่างไร มี Error อะไรบ้าง
Thu 17 Jan 2008 14:02:32
มือใหม่ ไม่ได้เขียนโปรแกรมหรอกครับ จึงไม่ค่อยจะรู้เรื่อง ที่อธิบายมาก็ไม่รู้จะเขียนอย่างไร
Thu 17 Jan 2008 14:10:26
ช่วยดูตามตัวอย่างโค้ดได้ไหมครับ ว่าจะแก้ตรงไหน อย่างไร ขอบคุณครับ
Thu 17 Jan 2008 15:52:57
mysql_query("SELECT Changwat, Ampur, Tambol, Name_File FROM tbl_ratcharule ORDER BY Changwat, Ampur, Tambol");
คำสั่งนี้ เป็นการเลือก โดยไม่มีเงื่อนไข ซึ่งไม่ต่างกับ
mysql_query("select distinct Tambol from tbl_Ratcharule order by Tambol asc");
ในเมื่อคุณต้องการใช้แสดงเฉพาะสิ่งที่คุณเลือก จะต้องใส่เงื่อนไขเข้าไป เช่น
SELECT Changwat, Ampur, Tambol, Name_File FROM tbl_ratcharule WHERE Changwat='นนทบุรี' ORDER BY Changwat, Ampur, Tambol
การใช้ WHERE เพื่อบอกว่าให้เอาเฉพาะข้อมูลที่มี Condition ตามที่ระบุเท่านั้น ความหมายของตัวอย่างข้างบนคือ เลือกเอา record ที่มี field Changwat มีค่าเป็น นนทบุรี เท่านั้น ถ้าคุณต้องการระบุมากกว่า 1 Condition ก็ให้ใส่ AND เข้าไประหว่าง Condition นั้นๆ เช่น
SELECT .... WHERE .... AND ... ORDER BY ....
Fri 18 Jan 2008 08:53:39
ขอบคุณครับที่ได้ตอบ
และหากว่า ... WHERE Changwat='นนทบุรี' เป็นการกำหนดค่าตายตัวครับ และถ้าหากเราให้ได้ข้อมูลตามที่ users ระบุ listbox เข้ามา เช่น สระบุรี หรืออาจจะเป็น ชัยภูมิ ดังนี้น่ะในไฟล์กแรกที่ส่งข้อมูลเข้ามาจะต้องกำหนดตัวแปรอย่างไร ? กำหนด syntax อย่างไรที่จะรับส่งค่ากันได้ครับ (เพราะเคยเห็นตัวอย่างแบบนี้ WHERE Changwat='$received')
Fri 18 Jan 2008 10:22:22
Fri 18 Jan 2008 20:42:29
ให้ช่วยแสดงตัวอย่างกำหนดค่าการส่งและรับค่ากับ script ด้านบนที่ให้ไปได้ไหมครับ
Fri 18 Jan 2008 21:25:38
แปลว่าคุณส่งค่าแบบ get ก็ต้องรับแบบ get
<select name='select3'>
ถ้าคุณต้องการรับค่าจาก object นี้ ก็ใช้ $_GET["select3"]
ถ้าเอาไปใส่ใน SQL ก็เช่น
"SELECT .... WHERE Changwat='".$_GET["select3"]."' ...."
จะเห็นว่ายังคงมี ' (Single Quote) คร่อมค่าอยู่เหมือนเดิม ส่วน . นั้นใช้เพื่อการต่อ string ในรูปแบบที่ถูกต้อง
Sat 19 Jan 2008 13:54:04
ขอบคุณครับ จะขอไปลองต่อ แล้วถ้าได้ผลและไม่ได้ผลอย่างไร จะมาแจ้งครับ

















