php动态下拉框内容

时间:2012-10-14 06:47:38

标签: php

我有两个数据表,如下所示。

表1:

--------------------
sbstart sbend totsb
--------------------
  200    205   6

表2:

chkNo
------
 201
 203

我有一个动态创建的下拉框,其中包含表1信息,这是200到205之间的所有响应。换句话说,下拉列表有200,201,202 ... 205。我现在需要的是在创建下拉框后排除表2中的数字。例如,当显示时,下拉列表应该只有200,2004和2005。

以下是我根据表1获取开始和结束编号之间所有响应的代码。有人可以告诉我如何在创建下拉列表时排除表2的数字。感谢。

    $con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");
$SQLx="SELECT * FROM table1";
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);

while ($rec = mysql_fetch_array($runx))
    {
        for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
        {
        echo "<option id='options' value='$i'>$i<br></option>";
        }
    }

3 个答案:

答案 0 :(得分:0)

试试这个。这会在构建下拉列表之前从table2构建排除列表:

$con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");


$exclude = array();
$query = 'SELECT * FROM table2';
$runx=mysql_query($query,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);

while ($rec = mysql_fetch_array($runx))
{
    $exclude[] = $rec['chkNo'];
}



$SQLx="SELECT * FROM table1"
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);

while ($rec = mysql_fetch_array($runx))
    {
        for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
        {
            if (!in_array($i, $exclude))
            {
                echo "<option id='options' value='$i'>$i<br></option>";
            }
        }
    }

答案 1 :(得分:0)

我建议利用array_diff()将下拉列表的初始创建限制为仅包含第二个表中不存在的值,如下所示:

//set up the db connection
$con = mysql_connect('localhost','root') or die ("Server connection failure!");
$db = mysql_select_db('regional_data', $con) or die ("Couldn't connect the database");

//get the range of values from the first table
$SQLx = "SELECT * FROM table1";
$runx = mysql_query($SQLx, $con) or die ("SQL Error");
$rec = mysql_fetch_array($runx);

//create an array representing the range of values
$table1_array = array();    
for($i = $rec['sbstart']; $i <= $rec['sbend']; $i++)
{
    $table1_array[] = $i;
}

//get the values to be omitted from the second table
$SQLz = "SELECT * FROM table2";
$runz = mysql_query($SQLz, $con) or die ("SQL Error");

//create an array representing the values to be omitted
$table2_array = array();
while ($rec2 = mysql_fetch_array($runz))
{
    $table2_array[] = $rec2['chkNo'];
}

//compare the arrays
//this results in an array of only the values you wish to include
$final_array = array_diff($table1_array, $table2_array);

//create the dropdown from the resulting array
foreach ($final_array as $value)
{
    echo "<option id='options' value='$value'>$value<br></option>";
}

请参阅: http://php.net/manual/en/function.array-diff.php

答案 2 :(得分:0)

$con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");
$SQLx="SELECT * FROM table1";
$SQLy="SELECT * FROM table2";
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$runy=mysql_query($SQLy,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);

while ($rec = mysql_fetch_array($runx))
    {
        for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
        {
            $exist=0;
            while($rec2=mysql_fetch_array($runy)){
                if($i==$rec2['chkNo']){
                    $exist=1;
                }
            }
            if ($exist==0)
               echo "<option id='options' value='$i'>$i<br></option>";
        }
    }