A-AA+then

ส่งค่าแก้ไขไปยัง listmenu ajax ไม่ได้

1,963
ผมต้องจะส่งค่าที่จะแก้ไขไปยัง listmenu ajax
ผมส่งค่าไปที่ 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>";
?>


 

6 ความคิดเห็น

ไม่ค่อยเข้าใจคำถาม...

แต่ถ้าต้องการคลิก แก้ไข แล้วให้ list menu แสดงรายการที่เลือกไว้จากฐานข้อมูล โค้ดที่มีอยู่คงทำไม่ได้

วิธีที่ง่ายที่สุดคือน่าจะทำอีกหน้าหนึ่งแยกออกมา แล้ว query รายการต่างๆ รวมถึงจัดการแสดงผลข้อมูล ต่างหาก น่าจะง่ายกว่า

หลักการก็คือ เมื่อคลิกแก้ไข ส่ง id=15(ตามตัวอย่าง) ของรายการที่เลือกไปยังหน้า edit.php(สมมุติ)

หน้า edit.php ก็จะทำการ query เอาหมวดที่เกี่ยวข้องออกมา รวมถึง รายการต่างๆ ที่เกี่ยวข้อง(list รายการที่เกี่ยวข้อง)

จากนั้นจัดการเลือก รายการที่ต้องเลือกด้วย Javascript

งานนี้ข้อมูลเยอะๆ ถ้าต้องการให้เสร็จภายในคำสั่งเดียวน่าจะต้องใช้ XML ในการ query ข้อมูลแล้ว

ลองดูนะครับนี่เป็นแนวทางหนึ่งให้ลองประยุกต์ตามที่ถนัดดู
1

ใช้ครับผมจะทำอย่างที่พี่บอกแต่ยังทำไม่ได้ครับ

พี่ ครับพอจะ มีตัวอย่างให้ศึกษาไหมครับแนะนำด้วยครับเกียวกับลักษณะแบบนี่ไหมครับ
ขอบคุณพี่มากครับ  
2

ตัวอย่างตรงๆคงไม่มี แต่ถ้าตัวอย่าง XML มีบนเว็บ และอาจต้องใช้ร่วมกับตัวอย่างอื่นๆ อีกหลายอัน ถึงจะสำเร็จครับ

ปล. อาจใช้ วิธีสร้างหน้าส่วนของ listmenu ขึ้นมาเลยก็ได้นะ เพื่อหลีกเลี่ยงการใช้ XML (ส่งข้อมูลไป แล้วให้ผลลัพท์เป็น HTML มี select 3 ตัวมาเลย)
3

ผมมายแน่ใจว่าที่พี่แนะนำผมจะหมายถึง
ให้ผมเขียน php แทรกไว้ใน html เลยเหรอเปล่านะครับ ถ้าเป็นอย่างงันก่อนผมจะใช้ ajax ก็ทำแบบนั้นเหมือนกัน ครับ
แต่มันติดปัญหาพอผมนำไปใช้อยู่กับโฮสไม่ได้ พอใช้กับเครื่องที่บ้านได้ พอเลือกค่าแล้วมันจะไม่ขึ้น ผมเอาตัวอย่างให้พี่ดูนะครับ
อันนี่ผมไปโพสถามที่อืนเค้าไว้แล้วเค้าแนะนำให้ผมลองใช้ ajax
=====================================================================

ผมเกิดปัญหาเมื่อเลือกข้อมูลใน listmenu แล้วหน้าเพสจะ Refresh
ในเครื่องที่ผมทำข้อมูลที่เลือกจะยังอยู่ แต่พอขึ้นโฮสเลือกข้อมูลแล้วเพส Refresh ข้อมูลหายหมดเลยครับ
แก้ไขยังไงครับ   แบบนี้ควรเขียน Code ยังไง ขอบคุณครับ

ภาพตอนเลือกข้อมูลครับ

ภาพพอเลือกข้อมูลแล้วข้อมูลก็จะหาย

ภาพค่าที่ก็ถูกส่งผ่าน Url


<FORM  METHOD="post" ACTION="admin_brandcategory_add.php">
<TR>
      <TD>&nbsp;&nbsp;::กลุ่มสินค้า::&nbsp;&nbsp;</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>&nbsp;&nbsp;::ประเภทสินค้า:: &nbsp;&nbsp;</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>&nbsp;&nbsp;::ยี่ห้อสินค้า:: &nbsp;&nbsp;</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>


 

4

ผมหมายถึง แทนที่จะส่งข้อมูลเป็น XML กลับมาแล้วค่อยจัดการแสดงผล ก็ให้ส่งข้อมูลกลับมาในรูป HTML เลย ซึ่งจะง่ายกว่า

ซึ่งข้อมูล HTML ผมหมายถึง โค้ดของ listbox 3 ตัว พร้อมข้อมูลต่างๆครบถ้วนนั่นแหละ เช่น

<select id="sel1" onchange="dochaned(.....)">
<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 อื่นๆเพิ่มเติมได้)
5

ขอบคุณพี่มากๆ ครับ
6
^