ส่งค่าแก้ไขไปยัง listmenu ajax ไม่ได้
ผมต้องจะส่งค่าที่จะแก้ไขไปยัง listmenu ajax
ผมส่งค่าไปที่ listmenu อันแรกได้ แต่ อีกสองอันทำไม่ได้ไม่ทราบว่าจะต้องทำยังไงครับช่วยแนะนำด้วยครับ
หรือถ้ามีตัวอย่างตรงไหนแนะนำด้วยนะครับ
ขอบคุณมากครับ
คริกแก้ไข้แล้วจะส่งค่า id ที่แก้ไขไปยัง listmenu
พอส่งค่ามาแล้ว listmenu อีกสองอันไม่มีค่า
Code หน้าแสดงข้อมูล
ajax รับส่งข้อมูล
Code เรียกข้อมูล
ผมส่งค่าไปที่ listmenu อันแรกได้ แต่ อีกสองอันทำไม่ได้ไม่ทราบว่าจะต้องทำยังไงครับช่วยแนะนำด้วยครับ
หรือถ้ามีตัวอย่างตรงไหนแนะนำด้วยนะครับ
ขอบคุณมากครับ
คริกแก้ไข้แล้วจะส่งค่า id ที่แก้ไขไปยัง listmenu
พอส่งค่ามาแล้ว listmenu อีกสองอันไม่มีค่า
Code หน้าแสดงข้อมูล
<?
echo "<font id=groupitem><select id='brandcategory_ref_category_edit01'>";
echo "<option value='0'>============</option>" ;
echo "</select></font>";
?>
<?
echo "<font id=category><select id='brandcategory_ref_category_edit01'>";
echo "<option value='0'>==== none ====</option>" ;
echo "</select></font>";
?>
<?
echo "<font id=brand><select id='brandcategory_ref_brand_edit01'>";
echo "<option value='0'>==== none ====</option>" ;
echo "</select></font>";
?>
ajax รับส่งข้อมูล
<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 ,id_edit) {
var req = Inint_AJAX();
req.onreadystatechange = function () {
if (req.readyState==4) {
if (req.status==200) {
document.getElementById(src).innerHTML=req.responseText; //retuen value
}
}
};
req.open("GET", "admin_brandcategory_data_edit.php?data=" src "&val=" val "&id_edit=" id_edit); //make connection เพสเก็บ data
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header
req.send(null); //send value
}
window.onLoad=dochange('groupitem', -1, <? echo "$id_edit";?>); // value in first dropdown
</script>
Code เรียกข้อมูล
<?
//set IE read from page only not read from 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");
$id_edit=$_GET['id_edit'];
$data=$_GET['data'];
$val=$_GET['val'];
//set database
include "connet.php";
$sql_chk="select * from tb_brandcategory where brandcategory_id='$id_edit' ";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result_chk=mysql_db_query($dbname,$sql_chk);
$rs_chk=mysql_fetch_array($result_chk);
$ref_brand=$rs_chk[brand_id];
$ref_category=$rs_chk[category_id];
$ref_groupitem=$rs_chk[groupitem_id];
if ($data=='groupitem') { // first dropdown
echo "<select name='groupitem' id='brandcategory_ref_groupitem_edit01' onChange="dochange('category', this.value)">";
echo "<option value='0'>==== กลุ่มสินค้า ====</option>";
$sql="select `groupitem_id`, `groupitem_name_th` from tb_groupitem order by `groupitem_id`";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result=mysql_db_query($dbname,$sql);
while($rs=mysql_fetch_array($result)){
$groupitem_id=$rs[groupitem_id];
$groupitem_name_th=$rs[groupitem_name_th];
if ($ref_groupitem==$groupitem_id) {
echo "<option value='$groupitem_id' selected>$groupitem_name_th</option>";
} else {
echo "<option value="$groupitem_id" >$groupitem_name_th</option>" ;
}
}
} else if ($data=='category') { // second dropdown
echo "<select name='category' id='brandcategory_ref_category_edit01' onChange="dochange('brand', this.value)">";
echo "<option value='0'>==== ประเภทสินค้า ====</option>";
$sql_cat="select `category_id`, `category_name_th` FROM tb_category WHERE `groupitem_id` = '$val' ORDER BY `category_id` ";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result_cat=mysql_db_query($dbname,$sql_cat);
while($rs_cat=mysql_fetch_array($result_cat)){
$category_id=$rs_cat[category_id];
$category_name_th=$rs_cat[category_name_th];
if ($ref_category==$category_id) {
echo "<option value='$category_id' selected>$category_name_th</option>";
} else {
echo "<option value="$category_id" > $category_name_th</option>" ;
}
}
} else if ($data=='brand') { // second dropdown
echo "<select name='brand' id='brandcategory_ref_brand_edit01'>";
echo "<option value='0'>==== ยี่ห้อสินค้า ====</option>";
$sql_bra="select `brand_id`, `brand_name_th` FROM tb_brand ORDER BY `brand_id` ";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result_bra=mysql_db_query($dbname,$sql_bra);
while($rs_bra=mysql_fetch_array($result_bra)){
$brand_id=$rs_bra[brand_id];
$brand_name_th=$rs_bra[brand_name_th];
if ($ref_brand==$brand_id) {
echo "<option value='$brand_id' selected>$brand_name_th</option>";
} else {
echo "<option value="$brand_id" > $brand_name_th</option>" ;
}
}
}
echo "</select>";
?>
แต่ถ้าต้องการคลิก แก้ไข แล้วให้ list menu แสดงรายการที่เลือกไว้จากฐานข้อมูล โค้ดที่มีอยู่คงทำไม่ได้
วิธีที่ง่ายที่สุดคือน่าจะทำอีกหน้าหนึ่งแยกออกมา แล้ว query รายการต่างๆ รวมถึงจัดการแสดงผลข้อมูล ต่างหาก น่าจะง่ายกว่า
หลักการก็คือ เมื่อคลิกแก้ไข ส่ง id=15(ตามตัวอย่าง) ของรายการที่เลือกไปยังหน้า edit.php(สมมุติ)
หน้า edit.php ก็จะทำการ query เอาหมวดที่เกี่ยวข้องออกมา รวมถึง รายการต่างๆ ที่เกี่ยวข้อง(list รายการที่เกี่ยวข้อง)
จากนั้นจัดการเลือก รายการที่ต้องเลือกด้วย Javascript
งานนี้ข้อมูลเยอะๆ ถ้าต้องการให้เสร็จภายในคำสั่งเดียวน่าจะต้องใช้ XML ในการ query ข้อมูลแล้ว
ลองดูนะครับนี่เป็นแนวทางหนึ่งให้ลองประยุกต์ตามที่ถนัดดู
พี่ ครับพอจะ มีตัวอย่างให้ศึกษาไหมครับแนะนำด้วยครับเกียวกับลักษณะแบบนี่ไหมครับ
ขอบคุณพี่มากครับ
ปล. อาจใช้ วิธีสร้างหน้าส่วนของ listmenu ขึ้นมาเลยก็ได้นะ เพื่อหลีกเลี่ยงการใช้ XML (ส่งข้อมูลไป แล้วให้ผลลัพท์เป็น HTML มี select 3 ตัวมาเลย)
ผมมายแน่ใจว่าที่พี่แนะนำผมจะหมายถึง
ให้ผมเขียน php แทรกไว้ใน html เลยเหรอเปล่านะครับ ถ้าเป็นอย่างงันก่อนผมจะใช้ ajax ก็ทำแบบนั้นเหมือนกัน ครับ
แต่มันติดปัญหาพอผมนำไปใช้อยู่กับโฮสไม่ได้ พอใช้กับเครื่องที่บ้านได้ พอเลือกค่าแล้วมันจะไม่ขึ้น ผมเอาตัวอย่างให้พี่ดูนะครับ
อันนี่ผมไปโพสถามที่อืนเค้าไว้แล้วเค้าแนะนำให้ผมลองใช้ ajax
=====================================================================
ผมเกิดปัญหาเมื่อเลือกข้อมูลใน listmenu แล้วหน้าเพสจะ Refresh
ในเครื่องที่ผมทำข้อมูลที่เลือกจะยังอยู่ แต่พอขึ้นโฮสเลือกข้อมูลแล้วเพส Refresh ข้อมูลหายหมดเลยครับ
แก้ไขยังไงครับ แบบนี้ควรเขียน Code ยังไง ขอบคุณครับ
ภาพตอนเลือกข้อมูลครับ
ภาพพอเลือกข้อมูลแล้วข้อมูลก็จะหาย
ภาพค่าที่ก็ถูกส่งผ่าน Url
<FORM METHOD="post" ACTION="admin_brandcategory_add.php">
<TR>
<TD> ::กลุ่มสินค้า:: </TD>
<TD>
<SELECT NAME="ref_groupitem" id="brandcategory_ref_groupitem01" onChange="location.href='admin_brandcategory.php?ref_groupitem_id='+this.value;" >
<OPTION VALUE="0">::เลือกกลุ่มสินค้า::</OPTION>
<?
$sql4="select * from tb_groupitem";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result4=mysql_db_query($dbname,$sql4);
while($rs4=mysql_fetch_array($result4)) {
$groupitem_id=$rs4[groupitem_id];
$groupitem_name_th=$rs4[groupitem_name_th];
if ($ref_groupitem_id==$groupitem_id) {
echo "<OPTION VALUE='$groupitem_id' SELECTED>$groupitem_name_th</OPTION>";
} else {
echo "<OPTION VALUE='$groupitem_id' >$groupitem_name_th</OPTION>";
}
}
?>
</SELECT>
</TD>
</TR><br/><br/>
<TR>
<TD> ::ประเภทสินค้า:: </TD>
<TD>
<SELECT NAME="ref_category" id="brandcategory_ref_category01" onChange="location.href='admin_brandcategory.php?ref_groupitem_id=<?=$_GET[ref_groupitem_id];?>&ref_category_id='+this.value;" >
<OPTION VALUE="0">::เลือกประเภทสินค้า::</OPTION>
<?
$sql2="select * from tb_category where groupitem_id='$ref_groupitem_id' ";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result2=mysql_db_query($dbname,$sql2);
while($rs2=mysql_fetch_array($result2)) {
$category_id=$rs2[category_id];
$category_name_th=$rs2[category_name_th];
if ($ref_category_id==$category_id) {
echo "<OPTION VALUE='$category_id' SELECTED>$category_name_th</OPTION>";
} else {
echo "<OPTION VALUE='$category_id' >$category_name_th</OPTION>";
}
}
?>
</SELECT>
</TD>
</TR><br/><br/>
<TR>
<TD> ::ยี่ห้อสินค้า:: </TD>
<TD>
<SELECT NAME="ref_brand" id="brandcategory_ref_brand01" onChange="location.href='admin_brandcategory.php?ref_groupitem_id=<?=$_GET[ref_groupitem_id];?>&ref_category_id=<?=$_GET[ref_category_id];?>&ref_brand_id='+this.value;">
<OPTION VALUE="0">::เลือกยี่ห้อสินค้า::</OPTION>
<?
$sql_bra="select * from tb_brand ";
mysql_query('SET CHARACTER SET tis620');
mysql_query('SET collation_connection = "tis620_thai_ci"');
$result_bra=mysql_db_query($dbname,$sql_bra);
while($rs_bra=mysql_fetch_array($result_bra)) {
$brand_id=$rs_bra[brand_id];
$brand_name_th=$rs_bra[brand_name_th];
if ($ref_brand_id==$brand_id) {
echo "<OPTION VALUE='$brand_id' SELECTED>$brand_name_th</OPTION>";
} else {
echo "<OPTION VALUE='$brand_id' >$brand_name_th</OPTION>";
}
}
?>
</SELECT>
</TD>
</TR><br/><br/>
<TR>
<TD>
<INPUT class="brandcategory_butinput01" TYPE="submit" NAME="Submit" VALUE="เพิ่มยี่ห้อสินค้าและประเภท" >
<!--<INPUT class="brandcategory_butreset01" TYPE="reset" NAME="Submit_reset" VALUE="ล้างข้อมูล" >-->
</TD>
</TR>
</FORM>
ซึ่งข้อมูล HTML ผมหมายถึง โค้ดของ listbox 3 ตัว พร้อมข้อมูลต่างๆครบถ้วนนั่นแหละ เช่น
<opton>.....</option>
<opton>.....</option>
</seelect>
<select id="sel2" onchange="dochaned(.....)">
<opton>.....</option>
<opton>.....</option>
</seelect>
<select id="sel3" onchange="dochaned(.....)">
<opton>.....</option>
<opton>.....</option>
</seelect>
ด้านบนคือ โค้ดที้ได้จาก Ajax ซึ่งเป็น select ทั้ง 3 ตัว พร้อมข้อมูล และทำการเลือกไว้อย่างเรียบร้อย แล้วก็เอาโค้ดที่ได้ไปแทน select 3 ตัวก่อนหน้าตรงๆเลย (สามารถมี element อื่นๆเพิ่มเติมได้)