0

各セルにオプションがある行を持つテーブルを作成しています。オプションはデータベース テーブルから受け取ります。各行にはオプション セルがあるため、各行から値を受け取る必要があります。選択タグでは、「名前」は行でインクリメントされます。しかし、最後の行の値しか取得していません。

ここにコードセクションを添付します。

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>';

クエリが明確であることを願っています。ありがとうございました。

4

3 に答える 3

2

forループ内にSQLクエリを配置したため、重くなっています。同じクエリを何度も実行するためです。コードを少し調整すると、単一のクエリを実行し、それをすべてのループ反復に使用できます。

<?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>
于 2012-05-12T08:22:35.390 に答える
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>";
}
于 2012-05-11T15:22:52.420 に答える
1

変化する:

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

に:

echo '<td><select name="prod_' . $i . '[]">'; echo "prod_$i";
于 2012-05-11T15:23:12.403 に答える