2

だからここに私がやろうとしていることがあります。会社のリストを含むテーブルがあります。特定の従業員の会社のリストを含む別のテーブルがあります。ここにテーブルがあります

会社
company_id
名前

employees_companies
empcomp_id
employee_id
company_id

現在、すべての会社のリストが入力されたリスト ボックスがあります。ユーザーが新しい従業員を設定するとき、リスト ボックスから 1 つまたは複数の会社を選択できます。フォームが送信されると、選択したすべての会社の配列を作成し、それらをループして、employees_companies テーブルに新しいレコードを追加します。これはすべてうまくいきます。私が抱えている問題は、ユーザーがこれらの会社を編集できるフォームにあります。まず、リスト ボックスにすべての会社のリストを入力します。次に、このユーザーについて、employees_companies テーブルにリストされている会社を強調表示する必要があります。現在、クエリで返されたレコードの数に関係なく、1 つのレコードのみが強調表示されます。

すべての会社と従業員の会社のリストを取得するコードは次のとおりです。

// get list of all companies
mysql_select_db($database_freight, $freight);
$query_rsCompanyList = "SELECT * FROM companies ORDER BY scac ASC";
$rsCompanyList = mysql_query($query_rsCompanyList, $freight) or die(mysql_error());
$row_rsCompanyList = mysql_fetch_assoc($rsCompanyList);
$totalRows_rsCompanyList = mysql_num_rows($rsCompanyList);

// get employees companies
$colname_rsEmployeeCompanyList = "17";
if (isset($_GET['employee_id'])) {
  $colname_rsEmployeeCompanyList = $_GET['employee_id'];
}
mysql_select_db($database_freight, $freight);
$query_rsEmployeeCompanyList = sprintf("SELECT * FROM employees_companies WHERE employee_id = %s", GetSQLValueString($colname_rsEmployeeCompanyList, "int"));
$rsEmployeeCompanyList = mysql_query($query_rsEmployeeCompanyList, $freight) or die(mysql_error());
$row_rsEmployeeCompanyList = mysql_fetch_assoc($rsEmployeeCompanyList);
$totalRows_rsEmployeeCompanyList = mysql_num_rows($rsEmployeeCompanyList);

フォームはこちら

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<form id="frmAdd" name="frmAdd" method="post" action="test.php">
  <select name="company_id[]" size="4" multiple="multiple" id="company_id[]">
    <?php do { ?>
    <option value="<?php echo $row_rsCompanyList['company_id']?>"
    <?php
        do {
            if (!(strcmp($row_rsCompanyList['company_id'], $row_rsEmployeeCompanyList['company_id']))) {echo "selected=\"selected\"";}
        } while ($row_rsEmployeeCompanyList = mysql_fetch_assoc($rsEmployeeCompanyList)); ?>><?php echo $row_rsCompanyList['name']?></option>
    <?php
} while ($row_rsCompanyList = mysql_fetch_assoc($rsCompanyList));
  $rows = mysql_num_rows($rsCompanyList);
  if($rows > 0) {
      mysql_data_seek($rsCompanyList, 0);
      $row_rsCompanyList = mysql_fetch_assoc($rsCompanyList);
  }
?>
  </select>
  <input type="submit" name="button" id="button" value="Submit" />
</form>
</body>
</html>

================================================== ============================= ほぼ理解できましたが、1 つだけ問題があります。会社名はリストボックスに表示されません。コードに終了オプション タグがないことに気付きました。私はそれを追加し、値に $company_id を入力したので、リストボックスに company_id が入力されていますが、代わりに会社名をエコーするにはどうすればよいでしょうか。

ここで私は配列を作成しています

// get list of all companies
mysql_select_db($database_freight, $freight);
$query_rsCompanyList = "SELECT company_id, name FROM companies ORDER BY scac ASC";
$rsCompanyList = mysql_query($query_rsCompanyList, $freight) or die(mysql_error());

$all_company_ids = array();
while ($row_rsCompanyList = mysql_fetch_array($rsCompanyList)) {
  $all_company_ids[] = $row_rsCompanyList['compnay_id'];
}

// get list of all employees companies
$colname_rsEmployeeCompanyList = "17";
if (isset($_GET['employee_id'])) {
  $colname_rsEmployeeCompanyList = $_GET['employee_id'];
}
mysql_select_db($database_freight, $freight);
$query_rsEmployeeCompanyList = sprintf("SELECT company_id FROM employees_companies WHERE employee_id = %s", GetSQLValueString($colname_rsEmployeeCompanyList, "int"));
$rsEmployeeCompanyList = mysql_query($query_rsEmployeeCompanyList, $freight) or die(mysql_error());

$emp_company_ids = array();
while ($row_rsEmployeeCompanyList = mysql_fetch_array($rsEmployeeCompanyList)) {
  $emp_company_ids[] = $row_rsEmployeeCompanyList['compnay_id'];
}

フォームオプションはこちら

<?php foreach($all_company_ids as $company_id): ?>
  <option value="<?php echo $company_id; ?>" <?php if(in_array($company_id, $emp_company_ids)) echo "selected=\"selected\""; ?>><?php echo $company_id; ?></option>
<?php endforeach; ?>
4

1 に答える 1

2

これはあなたが望むものだと思います: すべての会社 ID を表示し、従業員に属するものだけを強調表示します。
私が正しければ、これを行うより簡単な方法は次のとおりです。

<?php
$all_company_ids = array(); // You should populate this as you wish, but it's better not to do it in your form!
$emp_company_ids = array(); // Again get this items from the database!
?>


<select name="company_id[]" size="4" multiple="multiple" id="company_id[]">
<?php foreach($all_company_ids as $company_id): ?>
  <option value="<?php echo $company_id; ?>" <?php if(in_array($company_id, $emp_company_ids)) echo "selected=\"selected\""; ?>></option>
<?php endforeach; ?>
</select>

すべての会社 ID または従業員の会社 ID を取得する方法については詳しく説明していないことに注意してください。

アイデアは非常に単純
です。最初にすべての会社 ID を取得します。次に、それらをループして、それぞれを として表示しoption、アイテムが従業員に属している場合は、それを選択します!

私はこのコードを自分で試したことはありませんが、アイデアは単純なので、問題なく動作するはずです。

編集 会社名の場合、簡単な方法は、次のようなキーと値のペアとして会社$all_company_idsidとを入力することです。name

$all_companies = array();
while ($row_rsCompanyList = mysql_fetch_array($rsCompanyList)) {
  $all_companies[$row_rsCompanyList['compnay_id']] = $row_rsCompanyList['name'];
}

そして、次のように名前を表示できます。

<select name="company_id[]" size="4" multiple="multiple" id="company_id[]">
<?php foreach($all_companies as $company_id => $company_name): ?>
    <option value="<?php echo $company_id; ?>" <?php if(in_array($company_id, $emp_company_ids)) echo "selected=\"selected\""; ?>><?php echo $company_name ?></option>
<?php endforeach; ?>
</select>

$all_company_ids変数の名前を に変更したことに注意してください$all_companies。オプションタグも修正しました。

于 2012-10-08T22:16:44.417 に答える