A-AA+then

combobox 2 ชั้น ค่ะ ด่วนมากค่ะ จนหนทางจริงๆ

2,221
 คอมโบแรก จะให้เลือกฐานข้อมูลนะคะ ซึ่งแสดงเฉพาะฐานข้อมูลที่ถูกสร้างจาก user คนนั้น 
คอมโบที่สอง จะแสดงชุดของแบบฝึกหัดที่สร้างจากฐานข้อมูลในคอมโบแรกเท่านั้นค่ะ 

โดยโค้ดนี้ปรับมาจากโค้ดของ จังหวัด อำเภอ ตำบล ค่ะ


หน้า pro_manageExercise_edit.php
<?    
//ค่าที่ได้รับมาจากการ Submit
$province = $_POST[database];
//$amphur = $_POST[amphur];
$tumbon = $_POST[exercise];
if ( !empty( $exercise ) )
{
echo "<br /><br />ค่าที่ได้จากการ Submit คือ :<br /<br />ฐานข้อมูลที่เลือก : $database<br />แบบฝึกหัดที่เลือก : $exercise<br /><br /><br />\n";
};
    
echo "<form action=\"?\" method=\"post\">\n";
echo '<span id="databaseDiv">';
echo "<label for=\"database\">ฐานข้อมูล :</label><select name=\"database\" id=\"database\" onchange=\"dochange('database')\">\n";
echo "<option value=\"$database\">--------------</option> \n" ;
echo "</select></span>\n";
    
echo '<span id="exerciseDiv">';
echo "<label for=\"exercise\">แบบฝึกหัด :</label><select name=\"exercise\" id=\"exercise\">\n"; //รายการสุดท้ายไม่ต้องมี event แล้ว
echo "<option value=\"$exercise\">--------------</option> \n" ;
echo "</select></span>\n";
  
echo "<br /><br /><br /><input type=\"submit\" value=\"ส่ง\" name=\"submit\" />\n";
echo "</form>\n";
?>
<script type="text/javascript">
//AJAX
function Inint_AJAX()
{
try
{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}
catch ( e )
{
};
 
try
{
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
catch ( e )
{
};
 
try
{
return new XMLHttpRequest();
}
catch ( e )
{
};
 
alert( "XMLHttpRequest not supported" );
return null;
};
 
function dochange( obj )
{
var req = Inint_AJAX();
var province = document.getElementById( 'database' ).value;
var tumbon = document.getElementById( 'exercise' ).value;
if ( obj && obj.name == 'database' ) //เมื่อทำการเลือที่จังหวัดมา ให้เคลียร์ค่าอำเภอ
{
var exercise = "";
}
else //เลือกรายการอื่น
//{
//var amphur = document.getElementById( 'amphur' ).value;
//};
var data = "database=" + database + "&exercise=" + exercise;
req.onreadystatechange = function()
{
if ( req.readyState == 4 )
{
if ( req.status == 200 )
{
var datas = eval( '(' + req.responseText + ')' ); // JSON
document.getElementById( 'databaseDiv' ).innerHTML = datas[0].database;
//document.getElementById( 'amphurDiv' ).innerHTML = datas[0].amphur;
document.getElementById( 'exerciseDiv' ).innerHTML = datas[0].exercise;
};
};
};
req.open( "post" , "list.php" , true ); //สร้าง connection
req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); // set Header
req.send( data ); //ส่งค่า
};
 
//โหลดครั้งแรก
window.onload = function()
{
dochange( '' );
};
</script>

หน้า list.php
<?
header( "Expires: Sat, 1 Jan 2005 00: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=UTF-8" );
 
$database = $_POST[database];
//$amphur = $_POST[amphur];
$exercise = $_POST[exercise];
 
$hostname_conn = "localhost";
$username_conn = "root";
$password_conn = "1234";
$database_conn = "myproject";
mysql_connect( $hostname_conn , $username_conn , $password_conn ) or die( "เชื่อมต่อฐานข้อมูลไม่ได้" );
mysql_select_db( $database_conn ) or die( "เลือกฐานข้อมูลไม่ได้" ); // เลือกฐานข้อมูล
 
//ให้คืนค่าจังหวัดไว้เป็นอันดับแรก
$sql = "SELECT dbID, dbName FROM database_info";
$result = mysql_query( $sql );
echo "[{\"database\":\"";
echo "<label for='database'>ฐานข้อมูล :</label>";
echo "<select name='database' id='database' onchange='dochange(this)'>";
echo "<option value='0'>--กรุณาเลือกฐานข้อมูล--</option>";
while( $fetcharr = mysql_fetch_array( $result ) )
$id = $fetcharr[dbID];
$name = $fetcharr[dbName];
echo "<option value='$id'";
if ( $database == $id ) //เลือกจังหวัดที่เลือกไว้
{
echo " selected='selected'";
};
echo ">$name</option>";
};
echo "</select>\",\"exercise\":\"";
 
echo "<label for='exercise'>แบบฝึกหัด :</label>";
echo "<select name='exercise' id='exercise' onchange='dochange(this)'>";
//ถ้ามีการเลือกจังหวัดมาแล้วให้แสดงอำเภอต่อ
if ( $database != "0" && $database != "" )
{
echo "<option value='0'>--กรุณาเลือกแบบฝึกหัด--</option>";
$sql = "SELECT setID FROM exercise_set WHERE dbID='$database'";
$result = mysql_query( $sql );
while( $fetcharr = mysql_fetch_array( $result ) )
{
$id = $fetcharr[id];
$name = $fetcharr[name];
echo "<option value='$id'";
if ( $exercise == $id ) //เลือกอำเภอที่เลือกไว้
{
echo " selected='selected'";
};
echo ">$name</option>";
};
}
else
{
echo "<option value=''>--------------</option>";
};
 
echo "</select>\"}]";
 
mysql_close();
?>

แนบผลลัพธ์มาให้ดูด้วยค่ะ มันขึ้นเปนแบบนั้น และ ข้อมูลในคอมโบก็ไม่แสดงทั้งสองอันเลยค่ะ  
 

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

ไอ้นี่คืออารายอ่า.... >>>> echo "[{\"database\":\"";

ลองดีบักข้อมูลมาดูทีละช่วงนะครับ ว่าตรงไหนให้ค่าอะไรออกมาถูก และตรงไหนแสดงออกมาผิด
ผมตะหงิดๆว่าจะผิดตรงเครื่องหมายที่ครอบช่วงข้อมูลอ่านะ เพราะดูเหมือนว่าปุ่ม SUBMIT มันยังแสดงออกมาผิดเลยอ่ะ
สงสัยเรื่องว่าทำไมมันแสดง tag ของ php ออกมาสะงั้น (ผมมีความเข้าใจผิวเผินมากเรื่อง tag ของ php หรือ html)

 

1

พอดีเพิ่งมาศึกษาเหมือนกัน อ่าค่ะ    รอผู้รู้อีกที ก้อได้ค่ะ ไงก้อขอบคุนมากนะคะ
2

555+++

สงสัยจะเพิ่งศึกษาจริงๆ มั้ง

โค้ด PHP ต้องการ Server เพื่อประมวลผลครับ ไม่เหมือน HTML ที่สามารถเปิดบน Browser ได้เลย

1. ผมเดาว่า ไม่ได้ จำลอง Server

2. หรือไม่ก็ dblclick เพื่อเรียกไฟล์ให้ทำงาน

3. และ สุดท้าย syntag ผิด

คำแนะนำ
1. จำลอง Server ก่อครับ อาจใช้ IIS, Appserver หรือ XAMPP ก็ได้ ถ้าไม่รู้จักทั้ง 3 ตัว คงต้องทำความรู้จักกันก่อน
2. ให้เรียกใช้งานผ่าน Browser เท่านั้นโดยต้องระบุเป็น URL เช่น http://localhost/xxx.php
3. อันนี้ต้องลองหาดูเอง ว่าเขียนผิดตรงไหน
3

คือจำลองแล้วนะคะ ทำทุกอย่างแล้วค่ะ ที่แคปมาแค่นั้นเพราะรูปมันจะใหญ่เกินไป  
4

ลืมบอกไปอีกอัน

ลองใช้ <?php แทน <? ดูครับ
5
^