พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร
ASP programming / การทำ Combo Box (ต่อ)
siriluk_th
siriluk_th
Mon 13 Jun 2005 10:02:35
ขอถามต่อนะคะ  ในกรณีที่เราทำการวนลูปเรียบร้อยแล้ว  หลังจากที่เราเลือก Combo box ตัวแรก ก็จะมีข้อมูลแสดงใน Combo ตัวที่ 2  เช่น Combo ตัวที่ 1 ค่าที่ 1 จะมี Sub คือ 1.1, 1.2 และ 1.3  และพอเลือกค่าใน Combo ตัวที่ 1 อีกครั้ง คือ 2 ก็จะมี Sub คือ 2.1, 2.2  แต่ผลที่ได้กลับปรากฏว่า ค่าที่ได้มันต่อกันเรื่อย ๆ เป็น 1.1, 1.2, 1.3, 2.1, 2.2  จะใช้คำสั่งอะไรในการเคลียค่าเก่าคะ  เพราะใช้คำสั่ง Set rs = Nothing แล้วก็ไม่ได้ผลอะไร  รบกวนด้วยนะคะ ขอบคุณมากค่ะ
Administrator
Mon 13 Jun 2005 11:18:38

ขอโทษนะครับที่อาจทำให้คุณ siriluk_th เข้าใจผิดนะครับ concept ของระบบนี้คือต้องเขียน javascrip ด้วยภาษาที่คุณใช้ ในกรณีนี้คือ ASP โดยต้องการให้แสดงผลดังนี้

กรณีเลือก combo a เป็น 1 combo b จะได้ 1.1,1.2,1.3
กรณ๊เลือก combo b เป็น 2 combo b จะได้ 2.1,2.2,2.3

โดยในตารางฐานข้อมูลมีโครงสร้างข้อมูลดังนี้

#sample_tbl
|    id     |   parent    |    value    |
--------------------------------------
|      1    |        1         |      1.1      |
--------------------------------------
|      2    |        1         |      1.2      |
--------------------------------------
|      3    |        1         |      1.3      |
--------------------------------------
|      4    |        2         |       2.1     |
--------------------------------------
|      5    |        2         |       2.2     |
--------------------------------------
|      6    |        2         |       2.3     |

จะได้ code ดังนี้ครับ

<script language="javascript">
function showSub(obj)
{
    var theForm = obj.form;
    switch(obj.value)
    {
        case "1":
        {
<%
connect_string = "Driver={Mysql}; Server=localhost;
                  Database=domainname_com; UID=username; PWD=password" set dbConn = server.createObject ("ADODB.connection")
dbConn.open connect_string

mySQL="select * from asptest WHERE parent=1"
set rstemp=dbConn.execute(mySQL)

If  rstemp.eof then
   response.write "No records matched"
   response.write mySQL & "So cannot make table..."
   connection.close
   set connection=nothing
   response.end

end if

set i = 0;

DO  UNTIL rstemp.eof
   key = rstemp("id")
   value = rstemp("value")
   response.write "theForm.b.options["& i &"] = new Option('" & key & "','" & value & "');"
   i += i+1
   rstemp.movenext
LOOP

set rstemp=nothing
dbConn.close
set dbConn=nothing
%>
    }
    break;

    case "2":
    {
<%
connect_string = "Driver={Mysql}; Server=localhost;
                  Database=domainname_com; UID=username; PWD=password" set dbConn = server.createObject ("ADODB.connection")
dbConn.open connect_string

mySQL="select * from asptest WHERE parent=2"
set rstemp=dbConn.execute(mySQL)

If  rstemp.eof then
   response.write "No records matched"
   response.write mySQL & "So cannot make table..."
   connection.close
   set connection=nothing
   response.end

end if

set i = 0;

DO  UNTIL rstemp.eof
   key = rstemp("id")
   value = rstemp("value")
   response.write "theForm.b.options["& i &"] = new Option('" & key & "','" & value & "');"
   i += i+1
   rstemp.movenext
LOOP

set rstemp=nothing
dbConn.close
set dbConn=nothing
%>
    }
    break;
}
</script>

การตรวจเช็คโค๊ดคือต้องการให้แสดงผลได้ดังนี้ครับ

<scrip language="javascript">
function showSub(obj)
{
    var theForm = obj.form;
    case "1":
    {
         theForm.b.options[0] = new Option('1','1.1');
         theForm.b.options[1] = new Option('2','1.2');
         theForm.b.options[2] = new Option('3','1.3');
    }
    break;
    
    case "2":
    {
         theForm.b.options[0] = new Option('4','2.1');
         theForm.b.options[1] = new Option('5','2.2');
         theForm.b.options[2] = new Option('6','2.3');
    }
    break;
}
</script>

ส่วน function ในการเคลียร์ค่าภายในของ select ก็มีครับโดยใช้ javascript เหมือนเดิมครับ เขียนได้ดังนี้
obj.length = 0; เมื่อในกรณีของคุณจะได้เป็น theForm.b.length = 0; ครับ

ผู้ไม่รู้
ผู้ไม่รู้
Mon 9 Jan 2006 10:03:28

ถ้าเป็น php ละครับเขียนยังไง แบบเลือกจังหวัดที่ combo แรกแล้วให้แสดงอำเภอใน combo ที่สอง ครับ ทุกอย่างดึงมาจาก base นะครับ

Administrator
Mon 9 Jan 2006 12:08:07
ตัวอย่างคร่าวๆนะครับ

db
--------------------------------------------------
|    id    |     parent    |      name          |
--------------------------------------------------
|     1    |         0         |  Bangkok        |
--------------------------------------------------
|     2    |         0         | Nonthaburi     |
--------------------------------------------------
|     3    |         1         | Pranakorn       |
--------------------------------------------------
|     4    |         1         | Bangruk          |
--------------------------------------------------
|     5    |         2         | Bangbuatong |
--------------------------------------------------
|     6    |         2         | Bangkruay      |
--------------------------------------------------

php

<?
$link = mysql_connect($host, $uid, $pass);
mysql_select_db($db_name, $link);
$res = mysql_query("SELECT id, name FROM table_name WHERE parent=0", $link);
if(mysql_num_rows($res)){
    echo "<script language=\"javascript\">";
    echo "function showSub(obj){";
    echo "var theform = obj.form;";
    echo "theform.b.length = 0;
    echo "switch(obj.value){";
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
       echo "case ".$row["id"].": {";
       $lres = mysql_query("SELECT id, name FROM table_name WHERE parent=".$row["id"], $link);
       if(mysql_num_rows($lres)){
          $i = 0;
          while($lrow = mysql_fetch_array($lres, MYSQL_ASSOC)){
               echo "theform.b.options[".$i."] = new Option('".$lrow["id"]."','".$lrow["name"]."');";
               echo "}";
               echo "break;";
          }
       }
    }
    echo "}";
    echo "}";
    echo "</script>";
}
mysql_free_result($res);
mysql_close($link);
?>

โค๊ดทั้งหมดประมาณนี้ครับ ยังไม่ได้ทำการ debug นะครับด้นให้สดๆ Smile
bit69
bit69
Wed 25 Jan 2006 23:44:13

ช่วยเพิ่มเติมให้ผมหน่อยนะครับคืออย่างนี้นะครับ

<script language="Javascript">
function changecity(obj){
    var theform = obj.form;
    theform.city.length = 0;
    switch(obj.value){
       case "กระบี่":
       {
          theform.city.options[0] = new Option('อำเภอเมืองจังหวัดกระบี่','อำเภอเมืองจังหวัดกระบี่');
          theform.city.options[1] = new Option('เกาะลันตา','เกาะลันตา');
          theform.city.options[2] = new Option('เหนือคลอง','เหนือคลอง');
          theform.city.options[3] = new Option('ปลายพระยา','ปลายพระยา');
    theform.city.options[4] = new Option('เขาพนม','เขาพนม');
    theform.city.options[5] = new Option('อ่าวลึก','อ่าวลึก');
    theform.city.options[6] = new Option('คลองท่อม','คลองท่อม');
    theform.city.options[7] = new Option('ลำทับ','ลำทับ');
   
          theform.city.disabled = false;
       }
       break;

</script>

คือตามข้างบนนี้ถ้าผมเลือกจังหวัดนี้แล้วจะแสดงชื่ออำเภอของจังหวัดนั้นออกมาแล้วขอให้เพิ่มเติมหน่อยนะครับ คือเวลาเลือกที่อำเภอนั้นจะให้ รหัสไปรษณีย์ ขึ้นอีก textbox หนึ่งจะต้องทำยังงัยครับ

ช่วยแก้ไขให้ผมหน่อยนะครับ

ขอบคุณมากครับ

Administrator
Thu 26 Jan 2006 00:46:07
ก็ต้องสร้าง function ขึ้นมา Handle event ที่เกิดขึ้นเมื่อมีการเลือกที่ object city ครับ เช่น

<script language="javascript">
function changecity(obj){
....
}

function changezip(obj){
    var theform = obj.form;
    switch(obj.value){
       case 'อำเภอเมืองจังหวัดกระบี่': theform.zip.value = '12345'; break;
       case 'เกาะลันตา': theform.zip.value = '23456'; break;
       case 'เหนือคลอง': theform.zip.value = '34567'; break;
       ....
    }
}
</script>

<select name="city" onchange="changezip(this)">
...
</select>
<input type="text" name="zip">

ประมาณนี้ครับ เอาเป็นไกด์นะครับ
sun
sun
Fri 17 Nov 2006 01:31:38

ช่วยหน่อยครับทำมา 3 คืนแล้วไม่ได้
คือต้องการทำ Combo Box แบบสามชั้น
โดยดึงข้อมูลมาจากฐานข้อมูล
เช่น เลือก จังหวัด > อำเภอ > ตำบล
เขียนกับ (Java+PHP) หรือ (Java+AJAX) ก็ได้ครับ

ขอบคุณมากครับ

Administrator
Thu 23 Nov 2006 20:41:00
ไม่แตกต่างกันครับ ทำกี่ชั้นก็หลักการคล้ายๆกันครับ เพียงแต่เข้าใจหลักการแล้วประยุกต์ใช้เท่านั้นครับ บทความทั้งหมดผมทำไว้เป็นไกด์เท่านั้นครับ
moo
moo
Sat 6 Sep 2008 20:47:51

include "common.inc.php";
$link = mysql_connect("$server","$user","$pass");
mysql_select_db("$databasename",$link);
$res = mysql_query("SELECT id, name FROM office WHERE parent =0", $link)or die(mysql_error());


if(mysql_num_rows($res)){
    echo "<script language=\"javascript\">";
    echo "function showSub(obj){";
    echo "var theform = obj.form;";
    echo "theform.b.length = 0;";
    echo "switch(obj.value){";
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
       echo "case ".$row["id"].": {";
       $lres = mysql_query("SELECT id, name FROM office WHERE parent=".$row["id"], $link);
       if(mysql_num_rows($lres)){
          $i = 0;
          while($lrow = mysql_fetch_array($lres, MYSQL_ASSOC)){
               echo "theform.b.options[".$i."] = new Option('".$lrow["id"]."','".$lrow["name"]."');";
               echo "}";
               echo "break;";
          }
       }
    }
    echo "}";
    echo "}";
    echo "</script>";
}

?>
<select name="a"onchange="showSub(this)">
   <? $sql="SELECT * FROM office Order by id";
      $result=mysql_query($sql);
    while($myrow = mysql_fetch_array($result,MYSQL_ASSOC))
   {?>
    <option value="<?=$myrow["parent"]?>">
   <?=$myrow["parent"] ?>
   </option>
   <? }?>
   </select>
 
      <select name="b">
   <option>
   </option>
   
   </select>
 <?
mysql_free_result($res);
mysql_close($link);   
 ?>

moo
moo
Sat 6 Sep 2008 20:49:58
code ข้างบนผม copyมาลองดูครับใช้ baseเดียวกันกับตัวอย่าง php ด้านบน แต่รันไม่ออกครับรบกวนช่วยดูให้หน่อยครับขอบคุณมากครับ
webmaster
webmaster
Sun 7 Sep 2008 04:24:34
ลองเอาโค๊ดที่เป็น html แล้วมาดูครับ ต้องเอามาเปรียบเทียบกัน
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login