2012-10-08 18 views
2

所以這裏是我想要做的。我有一張包含公司名單的表格。我有另一張表,其中包含特定員工的公司列表。這裏是表使用來自2個不同表格的數據填充多個選擇列表框

公司
COMPANY_ID

employees_companies
empcomp_id
EMPLOYEE_ID
COMPANY_ID

目前我有一個填充的列表列表框所有公司。當用戶設置新員工時,他們可以從列表框中選擇一個或多個公司。當表單提交時,我創建一個所有選定公司的數組,循環遍歷它們並向employees_companies表添加新記錄。這一切都很好。我遇到的問題是用戶可以編輯這些公司的表單。首先我列出所有公司的清單。接下來,我需要讓這個用戶在employees_companies表中列出的公司突出顯示。現在只有一條記錄被高亮顯示,無論查詢中返回了多少條記錄。

下面是代碼讓所有公司的名單和員工的公司

// 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> 

============= ================================================== ================ 差不多了,但只有一個問題。公司名稱未填充到列表框中。我注意到你的代碼沒有關閉選項標籤。我添加了它,並輸入了$ 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; ?> 
+0

你的代碼很混亂。首先,如果您可以使用ORM(除非您有充分的理由不這樣做!),那將會很好。其次,你在表單中與你的數據庫進行交互,這不是一個好習慣。 –

回答

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> 

注意,我沒去成如何讓所有的公司標識或僱員的公司IDS的細節。

這個想法很簡單:
您首先獲得所有的公司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。我也修復了選項標籤。

+0

我很感謝你幫助我。那就是要得到它。還有一個問題。我用新代碼和最後一個問題更新了我的問題 – strangedesign

+0

@Ako先生非常感謝你。即使我正在尋找這個..並找到了一種方法,在你的答案幫助下..再次感謝你爵士...... –

相關問題