3 回答

TA貢獻1802條經(jīng)驗 獲得超6個贊
經(jīng)過一些研究和大量測試后,我找到了一種實現(xiàn)你想要的方法,所以這里是一個例子......
我一直在我正在構(gòu)建的應用程序上測試這個示例,因此該示例不會使用您的代碼,但方法是相同的,您只需要調(diào)整它以與您的代碼一起使用...
好的,首先讓我們創(chuàng)建所需的表并用幾行填充它
PHP
// Establish Connection (change the connection details if necessary)
$mysqli = new mysqli ('localhost','root','','test');
// Create table
mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS permissions(
id INT(11) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description VARCHAR(255) NOT NULL
)");
// Populate table
mysqli_query($mysqli, "INSERT INTO permissions (
name,
description
) VALUES (
'manage_users',
'Can add/edit users'
),
('permission_plus',
'Can manage roles/permissions & access logs'
)");
?>
因此,在本示例中,我將嘗試為我的網(wǎng)絡辦公室創(chuàng)建一個新角色,并為該角色分配一些現(xiàn)有權(quán)限,為此,我們需要創(chuàng)建一個表單,該表單將顯示表中的所有現(xiàn)有角色我們剛剛創(chuàng)建了...
超文本標記語言
<!--Make sure to include JQuery CDN-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js">
</script>
<div id="addRole">
<form method="POST" id="addroles">
<input type="text" id="rolename" placeholder="Role Name" />
<input type="text" id="role_description" placeholder="Role Description" />
<hr /><span class="title">Include Permissions</span>
<div id="checks">
<?php
$query = mysqli_query($mysqli, "SELECT * FROM permissions");
while($row = $query->fetch_assoc()){
$permid = $row['id'];
$permname = $row['name'];
$permdesc = $row['description'];
echo "<label class='checks' title='$permdesc'>
<input type='checkbox' class='selected' data-id='$permid'/>
$permname</label>";
}
?>
</div>
<input type="submit" value="Add Role" />
</form>
</div>
現(xiàn)在,在我們以復選框的形式顯示“權(quán)限”表中的所有行之后,我們終于可以看到代碼中最重要的部分,即使用 JavaScript/JQuery 將選定的復選框存儲在數(shù)組中并使用 AJAX 將它們傳遞到服務器...
JavaScript
$('#addroles').on('submit', function(event){
event.preventDefault();
let rolename = $('#rolename').val();
let roledesc = $('#role_description').val();
let permissions = [];
$('.selected').each(function(){
if($(this).is(":checked")){
permissions.push($(this).data('id'));
}
});
if(rolename != '' && roledesc != ''){
$.ajax({
url: 'addrole.php',
method: 'POST',
data: {
rolename: rolename,
roledesc: roledesc,
permissions: permissions
},
success: function(data){
console.log(data);
}
});
}
});
正如您所看到的,這里的腳本說,提交表單后,首先阻止它使用默認函數(shù),并將表單字段中的值分配給這個特定變量,當涉及到復選框時,創(chuàng)建一個數(shù)組,然后每個選中的復選框 - 將存儲在 data-id 中的值推送到先前創(chuàng)建的數(shù)組中,然后觸發(fā) AJAX 并將所有變量傳遞到服務器,在服務器處理數(shù)據(jù)后,請告訴我們它所說的內(nèi)容
添加角色.php
$mysqli = new mysqli ('localhost','root','','test');
$permissions = $_POST['permissions'];
foreach($permissions as $permission){
echo $permission.' ';
}
服務器使用foreach函數(shù)分解傳遞的選定復選框數(shù)組,并回顯存儲在每個選定復選框的 data-id 中的值,我們可以在瀏覽器的控制臺中看到它的結(jié)果。
為了這個例子的外觀,這里有一些 CSS
CSS
#addRole{
background-color: rgb(241, 241, 241);
position: relative;
width:30%;
padding:20px;
}
#addRole input[type='text']{
width:80%;
height:40px;
margin:5px 5px 5px 0px;
position: relative;
left:50%;
transform: translate(-50%);
text-align: center;
outline:none;
}#addRole input[type='submit']{
width:80%;
height:40px;
margin:5px 5px 5px 0px;
position: relative;
left:50%;
transform: translate(-50%);
text-align: center;
outline:none;
}
#addRole form hr{
width:30%;
margin-bottom: 20px;
margin-top: 20px;
}
.checks{
display: inline-block;
padding:20px;
text-indent: -20px;
background-color: rgb(252, 252, 252);
border:1px solid rgb(238, 238, 238);
margin: auto;
}
#checks{
position: relative;
left:50%;
transform: translate(-50%);
margin:10px;
display: flex-box;
text-align: center;
}
#addRole input[type='checkbox']{
width:20px;
height:20px;
margin:0px 0px 0px 20px;
outline:none;
text-align: center;
}
.title{
position:relative;
left:50%;
transform: translate(-50%);
text-align: center;
display: inline-block;
font-size: 20px;
margin:auto;
margin-bottom: 10px;
}

TA貢獻1828條經(jīng)驗 獲得超13個贊
我確信您已經(jīng)意識到根據(jù)可以在客戶端更改的數(shù)據(jù)計算價格是一個安全問題。另外,如果服務器端只是添加值,為什么不直接在 javascript 中處理它呢。無論哪種方式,下面的代碼都應該收集已檢查項目的數(shù)據(jù)值。
<input type="checkbox" class="validate-checkbox priceItems" item-name="<?php echo $item['Name'];?>" name="menuitem[]" value="<?php echo $item['Id'];?>" data-price="<?php echo $item['AddPrice'];?>">
您可以將價格作為參數(shù)添加到 ajax 函數(shù)的數(shù)據(jù)中或在此處進行求和。
var prices = $('.priceItems:checked').map(function() {
return $(this).data('price');
}).get();

TA貢獻1982條經(jīng)驗 獲得超2個贊
我認為將值存儲在隱藏表單字段中不是一個好主意。因為出于安全原因,用戶可以修改您的舊值。
我的建議是,您應該將表單值發(fā)送到 PHP 并進行數(shù)據(jù)庫調(diào)用并再次比較這些值。如果您發(fā)現(xiàn)更改,則更新值,否則保留它。
- 3 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報