ผมส่งค่าภายในฟอร์มไม่ได้เลยครับ เป็น listbox สามชั้นครับ
เป็นลิสบ๊อกสามชั้นครับ เอาไว้เสิร์ซหาสินค้า โค้ดก็มีสองหน้าดังนี้
index.php
<form method="get" name="sel" action="productsearch.php" onsubmit="return validSearch();">
<tr>
<td width="101" align="right"><span class="style3">หมวดสินค้า:</span></td>
<td width="136" align="left"><font id=amphur>
<select name="amphur">
<option value='0'>--------------------</option>
</select></font>
</td>
<td align="right"> </td>
</tr>
<tr>
<td align="right"><span class="style3">ยี่ห้อ:</span></td>
<td colspan="2" align="left"><font id=tumbon><select name="tumbon">
<option value='0'>--------------------</option>
</select></font>
</td>
</tr>
<tr>
<td align="right"><span class="style3">ชื่อสินค้า:</span></td>
<td colspan="2" align="left"><font id=ban><select name="ban">
<option value='0'>--------------------</option>
</select></font>
</td>
<script language=Javascript>
function Inint_AJAX() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript
alert("XMLHttpRequest not supported");
return null;
};
function dochange(src, val) {
var req = Inint_AJAX();
req.onreadystatechange = function () {
if (req.readyState==4) {
if (req.status==200) {
document.getElementById(src).innerHTML=req.responseText; //รับค่ากลับมา
}
}
};
req.open("GET", "province.php?data="+src+"&val="+val); //สร้าง connection
//req.open("POST", "productsearch.php",true); //สร้าง connection
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=tis-620"); // set Header
req.send(null); //ส่งค่า
}
function banchange() {
document.getElementById('result').innerHTML=sel.amphur.value+', '+sel.tumbon.value+', '+sel.ban.value;
}
window.onLoad=dochange('amphur', -1);
</script>
หน้า province.php
<?
include("connect.php");
include("config.inc.php");
include("function.php");
//กำหนดให้ IE อ่าน page นี้ทุกครั้ง ไม่ไปเอาจาก cache
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("content-type: application/x-javascript; charset=tis-620");
$data=$_GET['data'];
$val=$_GET['val'];
if ($data=='amphur') {
$sql="select * from product_cat order by pro_cat";
$result = mysql_query($sql);
echo "<select name='amphur' onChange=\"dochange('tumbon', this.value)\">
";
echo "<option value='0'>-กรุณาเลือกประเภทสินค้า-</option>
";
while($fetcharr = mysql_fetch_array($result)) {
$val = $fetcharr['pro_cat'];
$label = $fetcharr['procat_name'];
echo "<option value=\"$val\">$label</option>
" ;
}
} else if ($data=='tumbon') {
echo "<select name='tumbon' onChange=\"dochange('ban', this.value)\">
";
$sql="select * from product_type_sub a inner join product_brand b on a.brand_id=b.brand_id where a.pro_cat = '$val'";
$result = mysql_query($sql);
echo "<option value='0'>-กรุณาเลือกยี่ห้อ-</option>
";
while($fetcharr = mysql_fetch_array($result)) {
$val = $fetcharr['brand_id'];
$label = $fetcharr['brand_name'];
echo "<option value=\"$val\">$label</option>
" ;
}
} else if ($data=='ban') {
echo "<select name='ban' onChange=\"banchange()\">
";
$sql="select pro_id,pro_name from product where pro_cat='$pro_cat' and brand_id='$val'";
$result = mysql_query($sql);
echo "<option value='0'>-กรุณาเลือกสินค้า-</option>
";
while($fetcharr = mysql_fetch_array($result)) {
$val = $fetcharr['pro_id'];
$label = $fetcharr['pro_name'];
echo "<option value=\"$val\">$label</option>
" ;
}
}
echo "</select>
";
?>
ชั้นที่ 1 กับ ชั้นที่ 2 เลือกได้ครับ แต่พอชั้นที่ 3 เลือกแล้วมันไม่ตรงกับเงื่อนไข คือชั้นที่สามตั้งใช้เงื่อนไขจากชั้นที่ 1และ 2
ผมพยายามส่งค่า select จากชั้นที่ 1 มาชั้นที่ 3 ในหน้า province.php เพื่อใช้เป็นเงื่อนไขในคำสั่ง sql แต่ก็ไม่ได้สักทีครับ พอรู้วิธีไหมครับว่าจะทำอย่างไร
ชั้นที่ 3 ต้องส่งเงื่อนไข ทั้งชั้นที่ 1 และ 2 ออกไป query ด้วยครับ
ชั้นแรก -> ส่งค่าว่าง
ชั้นที่ 2 -> ส่งค่าที่เลือกจากชั้นที่ 1 ไป
ชั้นที่ 3 -> ส่งค่าที่เลือกจากชั้นที่ 1 และ 2 ไป
ลองตรวจสอบโค้ดให้เป็นไปตามเงื่อนไขนี้ครับ
ส่งไปยังไงหรอครับ พอยกตัวอย่างได้ไหมครับ พอดีผมเพิ่งลองเอาไปใช้นะครับ ไม่ค่อยมีความรู้เรื่องอาแจ็กครับ
แล้วค่าที่จะส่งไปของชั้นที่ 1 และ 2 ใช้ชื่อของ select ป่าวคับ เราจะรู้ค่า value ของชั้นที่ 1,2 ได้ยังไงหรอครับ เพื่อเอามาใช้ query ในชั้นที่ 3 เท่าที่ผมดูมันรับ parameter 2 ตัว คือ $data และ $val ผมงงหละคับ....หุหุ
ดูในตัวอย่างโค้ดเลยครับ พิจารณาตามตัวอย่างครับ
ถ้าไม่แน่ใจ ให้เอา UTF-8 ไปครับ
ปัญหาก็คือ ตัวอย่างมันทำงานได้ ดังนั้น ความผิดพลาดก็ไปอยู่ที่ส่วนประกอบที่ใช้ ให้ทดสอบโดย run ตัวอย่างเปล่าๆ ครับว่า ทำงานมั้ย ถ้ามันทำงาน ก็ต้องไปตรวจสอบร่วมกับโค้ดที่ใช้งานด้วยอีกที ซึ่งส่วนนี้ผมตอบไม่ได้ครับ
ปัญหาที่เจอบ่อยก่อยได้แก่ id ที่ใช้มันซ้ำกันครับ หรือไม่ก็ใช้ภาษาที่ไม่ถูกต้อง รายละเอียดเยอะครับ ยังไงก็ลองค่อยๆแก้ไปทีละส่วน
ส่วนที่ถามถึงตัวอย่าง ก็โค้ดที่ดาวน์โหลดไปนั่นแหละครับตัวอย่างที่ดีที่สุด