0

私は在庫管理システムに取り組んでおり、店舗に割り当てられたユーザーを編集したいと考えています。ユーザーは、1 つ以上のストアに割り当てることができます。複数選択オプションを使用しています。ここでの問題は、ユーザーの編集ページで、店舗に割り当てられたユーザーを選択済みとして表示したいということです。しかし、私がそうしようとすると、ユーザーがすべてのストアに割り当てられていない場合にのみ、このエラー ( 194 行目の foreach() に無効な引数が提供されます) が発生しました。

例: A、B、C という 3 つの店舗があるとします。

1.) 3 つのストアすべてに割り当てられたユーザーを編集する場合、エラーは発生しません。
2.) 2 つのストアに割り当てられたユーザーを編集しようとすると、上記のエラーが 2 回発生します。
3.) 1 つのストアのみに割り当てられたユーザーを編集しようとすると、上記のエラーが 1 回だけ発生します。

これを修正するのを手伝ってください。

これは私のコードです

$emp_id = $_GET['emp_id'];
$result1 = mysql_query("Select *
                            from members
                            JOIN store_employee on members.emp_id = store_employee.emp_id
                            JOIN stores on store_employee.store_id = stores.store_id
                            where members.emp_id=$emp_id")
               or die(mysql_error());
$query="SELECT * FROM stores";
        $dropdown = "<select name='store_id[]' multiple='multiple'  style='height:80px;' size='5' id='store'>";
        $result2 = mysql_query ($query);
        while($row2 = mysql_fetch_array($result2)) 
        {

  $dropdown .= "\r\n<option value='{$row2['store_id']}'";

            foreach(mysql_fetch_array($result1) as $row1)     //this is line 194
              {
                 if(($row1['store_id'])==($row2['store_id']))
                  {
                      $dropdown .=" selected='selected'";
                  }

             }
  $dropdown .= ">{$row2['store_name']}</option>";
        }
        $dropdown .= "\r\n</select>";
        echo $dropdown;  
4

1 に答える 1

1

mysql_fetch_array特に、それが配列ではなく関数であることを考えると、配列を返す場合でも、そのように使用されることは絶対にありません。

あなたが望むのは次のようなものです:

$user_stores;
while ($rows = mysql_fetch_array($result1)) {
    $user_stores[] = $rows;
}
while ($rows2...
    //...
    foreach ($user_stores as $row1) {
        //...
    }
}

mysql_fetch_array他の の内部で行うと、 の後のエントリと一致する可能性mysql_fetch_arrayのある値を に渡すことになります。これは問題の解決に役立ちます。$row1$row2

また、mysql_*関数はまもなく非推奨になります。それらを新しいコードで使用しないでください (実際には、すべてのコードからそれらを削除することを検討する必要があります)。代わりにmysqliまたはを使用してください。PDOあなたが(私のような)怠け者ならmysqli、元の関数とほとんど同じである の手続き型スタイルを使用して調べることができますmysql_*

于 2012-07-30T20:49:09.953 に答える