我將盡我所能去嘗試解釋這一點。我有一個包含多種角色類型的應用程序。在這種情況下唯一重要的兩個是'經理'和'代表'。創建代表時,他們被分配到該公司內的一個或多個管理人員(公司在創建經理時被分配)。請注意,所有用戶都存儲在名爲「用戶」的同一個表中。基於陣列比較的SQL刪除,更新或插入
當創建管理者關係的代表時,代表和管理者的主鍵的PRIMARY KEY(在我的情況下,用戶表中的用戶表中的userId)被推送到名爲ManagerRepRelationship 。因此,舉例來說,如果我有以下的用戶表(只打算用在這種情況下重要的COLS工作):
userId | username | role | accountId |
______ ________ ______________ _________
1 jsmith manager 14
2 mfoster manager 14
3 lcarter manager 18
4 jdoe representative 14
5 tlarson representative 18
6 rhoward representative 18
代表,所以如果上面表看起來只能被分配到一個經理帳戶內這樣,ManagerRepRelationship可能看起來像:
repId | managerId
_____ _________
4 1
5 3
6 3
我遇到麻煩的是,當涉及到編輯這些關係。目前我有一個單獨的表單和頁面JUST來處理這些關係的變化,因爲它將是一個非常有限的頁面。假設在這種情況下,我們要編輯代表jdoe
併爲他分配另一位經理。目前他只被分配到jsmith
,但我們想給他兩個經理,所以我們也將他分配給mfoster
。在這種情況下,頁面的URL會是這樣的:
http:localhost:8888/mod-super-admin/edit-relatoinship.php?repId=4&accountId=14
在頁面的頂部,我搶爲該帳戶(請注意下面的查詢地址表中的所有管理人員僅僅是在我爲用戶提供個人信息,它與這個問題沒有任何關係,你會注意到我在上面的Users表中沒有包含addressId,我沒有更新這個頁面上Address表的任何內容,我只想要第一個和
// Get the url variables
$rep_id = $_GET["repId"];
$account_id = $_GET["accountId"];
// grab all managers tied to the account (not the rep)
$manager_sql = "SELECT Users.userId, Address.firstName, Address.lastName FROM Users JOIN Address ON Users.addressId=Address.addressId WHERE Users.role='manager' AND Users.accountId=" . $account_id;
$account_managers = mysqli_query($connection,$manager_sql);
// grab all managers assigned to the rep
$relationship_sql = "SELECT managerId FROM ManagerRepRelationship WHERE repId=" . $rep_id;
$rep_rels = mysqli_query($connection, $relationship_sql);
// create and array that houses current assigned managers
$current_managers = array();
while($row = mysqli_fetch_array($rep_rels)){
array_push($current_managers, $row["managerId"]);
}
表格如下。如果已經分配,它將突出顯示經理。
<form method="POST" action="./mod-super-admin/edit-relationship.php?repId=<?php echo $rep_id; ?>&accountId=<?php echo $account_id; ?>">
<div class="col-sm-12">
<div class="form-group">
<div class="form-group mbs">
<label for="manager" class="label-medium">Assigned Managers</label><br>
<small>To Select Multiple Managers Hold Down CTRL (CMD for Mac) and click</small>
<select name="manager[]" class="form-control input-medium" multiple="multiple">
<?php
$output;
while($manager = mysqli_fetch_assoc($account_managers)) :
$output .= '<option value="' . $manager["userId"] . '"';
foreach($current_managers as $key=>$value) :
if($value === $manager["userId"]){
$output .= ' selected';
}
endforeach;
$output .= '>' . $manager["lastName"] . ', ' . $manager["firstName"] . '</option>';
endwhile;
echo $output;
?>
</select>
</div>
<input type="submit" name="editRelationshipSubmit" class="btn btn-large btn-green mtm" value="Update Relationship">
</div>
</div>
</form>
在我們的情況下,上述PHP將輸出和經理的名字,如果經理被分配到代表將已經強調了mutliselect。這裏是我遇到麻煩的部分。當涉及到編輯這些realtionships。例如,我明白,如果我只是將mfoster
作爲經理添加到jdoe
我只需要運行,INSERT INTO
就可以在ManagerRepRelationship
上,或者如果我要刪除jsmith
作爲經理,我會運行DELETE FROM ManagerRepRelationship WHERE repId=4 AND managerId=1
。
如何彌補發生的事情?我不知道如果當前正在進行這些更改的用戶將添加經理關係,刪除經理關係,也許他們會做一些這兩者。
我製作了$current_managers
數組,因此我可以在提交表單時對照數組$_POST["manager"];
進行檢查。我應該注意到,陣列中唯一的數據是userId
。我只是堅持運行不同的SQL命令來根據這些數組的比較來更新我的數據庫。我希望我做了一個解釋我所處狀況的好工作。
太長的問題:0 –
@HamzaZafeer好,如果我沒有提供細節我會被告知「信息不足」 –