3 回答
TA贡献1802条经验 获得超6个赞
经过一些研究和大量测试后,我找到了一种实现你想要的方法,所以这里是一个例子......
我一直在我正在构建的应用程序上测试这个示例,因此该示例不会使用您的代码,但方法是相同的,您只需要调整它以与您的代码一起使用...
好的,首先让我们创建所需的表并用几行填充它
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'
)");
?>
因此,在本示例中,我将尝试为我的网络办公室创建一个新角色,并为该角色分配一些现有权限,为此,我们需要创建一个表单,该表单将显示表中的所有现有角色我们刚刚创建了...
超文本标记语言
<!--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>
现在,在我们以复选框的形式显示“权限”表中的所有行之后,我们终于可以看到代码中最重要的部分,即使用 JavaScript/JQuery 将选定的复选框存储在数组中并使用 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);
}
});
}
});
正如您所看到的,这里的脚本说,提交表单后,首先阻止它使用默认函数,并将表单字段中的值分配给这个特定变量,当涉及到复选框时,创建一个数组,然后每个选中的复选框 - 将存储在 data-id 中的值推送到先前创建的数组中,然后触发 AJAX 并将所有变量传递到服务器,在服务器处理数据后,请告诉我们它所说的内容
添加角色.php
$mysqli = new mysqli ('localhost','root','','test');
$permissions = $_POST['permissions'];
foreach($permissions as $permission){
echo $permission.' ';
}
服务器使用foreach函数分解传递的选定复选框数组,并回显存储在每个选定复选框的 data-id 中的值,我们可以在浏览器的控制台中看到它的结果。
为了这个例子的外观,这里有一些 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条经验 获得超13个赞
我确信您已经意识到根据可以在客户端更改的数据计算价格是一个安全问题。另外,如果服务器端只是添加值,为什么不直接在 javascript 中处理它呢。无论哪种方式,下面的代码都应该收集已检查项目的数据值。
<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'];?>">
您可以将价格作为参数添加到 ajax 函数的数据中或在此处进行求和。
var prices = $('.priceItems:checked').map(function() {
return $(this).data('price');
}).get();
TA贡献1982条经验 获得超2个赞
我认为将值存储在隐藏表单字段中不是一个好主意。因为出于安全原因,用户可以修改您的旧值。
我的建议是,您应该将表单值发送到 PHP 并进行数据库调用并再次比较这些值。如果您发现更改,则更新值,否则保留它。
- 3 回答
- 0 关注
- 113 浏览
添加回答
举报