如何从每个表行传递选项值?

时间:2012-05-11 15:17:51

标签: php select options

我正在创建一个包含行的表,每个单元格中都有选项。从数据库表接收选项。由于每行都有一个选项单元格,因此我必须从每一行接收值。在select标签中,'name'随行增加。但我只得到最后一行的价值。

在此处附加代码部分。

for ($i = 1; $i <= $_GET['pno']; $i++) {
                echo'<tr>';
                echo "<td>$i</td>";
                echo '<td><select name="prod_$i">'; echo "prod_$i";
                //Query for production table gets processed.
                $qry_pr="SELECT * FROM production";
                $result_pr=mysql_query($qry_pr);
                $rows_pr=mysql_affected_rows($con);
                //Production options get filled from the table data.
                for($j=0;$j<=$rows_pr;$j++)
                {
                    $res_arr_pr=mysql_fetch_array($result_pr);
                    echo "<option value=$res_arr_pr[0]>$res_arr_pr[1]</option>";
                    //$res++;
                }
                //mysql_close($con);
                echo '</select></td>';
                echo '<td><select name="prod_mu_$i">';
                //Query for measurement_unit table gets processed.
                $qry_mu="SELECT * FROM measurement_unit";
                $result_mu=mysql_query($qry_mu);
                $rows_mu=mysql_affected_rows($con);
                //Unit options get filled from the table data
                for($k=0;$k<=$rows_mu;$k++)
                {
                    $res_arr_mu=mysql_fetch_array($result_mu);
                    echo "<option value=$res_arr_mu[0]>$res_arr_mu[1]</option>";
                }
                echo '</td>';
                echo '</tr>'; echo "prod_$i";
            }
            echo'</table><br>';

希望我对查询很清楚。 谢谢。

3 个答案:

答案 0 :(得分:2)

您已将SQL查询放在for循环中,使其变得繁重。因为它会一遍又一遍地执行相同的查询。如果稍微调整代码,可以使用执行单个查询并将其用于所有循环迭代。

<?php
//initialize blank 
$productions = $measurements = '';

// create the production select box
$qry_pr="SELECT * FROM production";
$result_pr=mysql_query($qry_pr);
if( mysql_num_rows($result_pr) )
{
    $productions .= "<select name='prod_%index%'>";
    while( $rec_pr = mysql_fetch_row($result_pr) )
    {
        $productions .= "<option value='{$rec_pr[0]}'>{$rec_pr[1]}</option>";
    }
    $productions .= "</select>";
}

// create the measurement select box
$qry_mu="SELECT * FROM measurement_unit";
$result_mu=mysql_query($qry_mu);
if( mysql_num_rows($result_mu) )
{
    $measurements .= "<select name='prod_mu_%index%'>";
    while( $rec_mu = mysql_fetch_array($result_mu) )
    {
        $measurements .= "<option value='{$rec_mu[0]}'>{$rec_mu[1]}</option>";
    }
    $measurements .= "</select>";
}
?>


<table>
<?php for($i=1;$i<=$_GET['pno'];$i++): ?>
<tr>
    <td><?php echo str_replace('%index%',$i,$productions); ?></td>
    <td><?php echo str_replace('%index%',$i,$measurements); ?></td>
</tr>
<?php endfor; ?>
</table>

答案 1 :(得分:1)

mysql_affected_rows只会通过上一次INSERT,UPDATE,REPLACE或DELETE查询为您提供受影响的行数。您执行SELECT,因此$rows_mu值将是错误的。

而不是:

$rows_mu=mysql_affected_rows($con);
//Unit options get filled from the table data
for($k=0;$k<=$rows_mu;$k++)
{
    $res_arr_mu=mysql_fetch_array($result_mu);
    echo "<option value=$res_arr_mu[0]>$res_arr_mu[1]</option>";
}

试试这个:

//Unit options get filled from the table data
while ($res_arr_mu = mysql_fetch_array($result_mu)) 
{
   echo "<option value=$res_arr_mu[0]>$res_arr_mu[1]</option>";
}

答案 2 :(得分:1)

变化:

echo '<td><select name="prod_$i">'; echo "prod_$i";

为:

echo '<td><select name="prod_' . $i . '[]">'; echo "prod_$i";