php - 我需要一种更有效的方式将我的多选复选框表单提交到我的数据库
问题描述
我需要一种更有效的方式将我的多选复选框表单提交到我的数据库。只关注花瓶孔值复选框,我目前在我的数据库表中有 3 个单独的行/列,称为“vase_holes_left”“vase_holes_centre”“vase_holes_right”。这些值可以以某种方式转到 1 行吗?非常感谢。抱歉,如果需要更多信息,我不会在这里发布太多信息,请告诉我。
<?php include('includes/header.php'); ?>
<?php
//Include functions
include('includes/functions.php');
?>
<?php
/************** Register new client ******************/
//require database class files
require('includes/pdocon.php');
//instatiating our database objects
$db = new Pdocon;
//Collect and clean values from the form
if (isset($_POST['submit_client'])) {
$raw_deceased = cleandata($_POST['deceased']);
$raw_cemetery = cleandata($_POST['cemetery']);
$raw_plot = cleandata($_POST['plot']);
$raw_jobtype = cleandata($_POST['jobtype']);
$raw_stone_headstone_description = cleandata($_POST['stone_headstone_description']);
$raw_headstone_colour = cleandata($_POST['headstone_colour']);
$raw_headstone_size = cleandata($_POST['headstone_size']);
$raw_step_base_size = cleandata($_POST['step_base_size']);
$raw_step_base_dowells = cleandata($_POST['step_base_dowells']);
$raw_base_colour = cleandata($_POST['base_colour']);
$raw_base_size = cleandata($_POST['base_size']);
$raw_base_dowells = cleandata($_POST['base_dowells']);
$raw_vase_colour = cleandata($_POST['vase_colour']);
$raw_vase_style = cleandata($_POST['vase_style']);
$raw_vase_number = cleandata($_POST['vase_number']);
$raw_vase_holes_left = cleandata($_POST['vase_holes_left']);
$raw_vase_holes_centre = cleandata($_POST['vase_holes_centre']);
$raw_vase_holes_right = cleandata($_POST['vase_holes_right']);
$c_deceased = sanitize($raw_deceased);
$c_cemetery = sanitize($raw_cemetery);
$c_plot = sanitize($raw_plot);
$c_jobtype = sanitize($raw_jobtype);
$c_stone_headstone_description = sanitize($raw_stone_headstone_description);
$c_headstone_colour = sanitize($raw_headstone_colour);
$c_headstone_size = sanitize($raw_headstone_size);
$c_step_base_size = sanitize($raw_step_base_size);
$c_step_base_dowells = sanitize($raw_step_base_dowells);
$c_base_colour = sanitize($raw_base_colour);
$c_base_size = sanitize($raw_base_size);
$c_base_dowells = sanitize($raw_base_dowells);
$c_vase_colour = sanitize($raw_vase_colour);
$c_vase_style = sanitize($raw_vase_style);
$c_vase_number = sanitize($raw_vase_number);
$c_vase_holes_left = sanitize($raw_vase_holes_left);
$c_vase_holes_centre = sanitize($raw_vase_holes_centre);
$c_vase_holes_right = sanitize($raw_vase_holes_right);
$db->query('SELECT * FROM clients WHERE deceased=:deceased');
$db->bindValue(':deceased', $c_deceased, PDO::PARAM_STR);
$row = $db->fetchSingle();
if ($row) {
redirect('clients.php');
keepmsg('<div class="alert alert-danger" role="alert">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<strong>Sorry!</strong> Client Already Exist. Please Register Again
</div>');
} else {
$db->query("INSERT INTO clients (id, jobtype, deceased, plot, cemetery, stone_headstone_description, headstone_colour, headstone_size, step_base_size, step_base_dowells, base_colour, base_size, base_dowells, vase_colour, vase_style, vase_number, vase_holes_left, vase_holes_centre, vase_holes_right ) VALUES (NULL, :jobtype, :deceased, :plot, :cemetery, :stone_headstone_description, :headstone_colour, :headstone_size, :step_base_size, :step_base_dowells, :base_colour, :base_size, :base_dowells, :vase_colour, :vase_style, :vase_number, :vase_holes_left, :vase_holes_centre, :vase_holes_right ) ");
$db->bindValue(':jobtype', $c_jobtype, PDO::PARAM_STR);
$db->bindValue(':deceased', $c_deceased, PDO::PARAM_STR);
$db->bindValue(':plot', $c_plot, PDO::PARAM_STR);
$db->bindValue(':cemetery', $c_cemetery, PDO::PARAM_STR);
$db->bindValue(':stone_headstone_description', $c_stone_headstone_description, PDO::PARAM_STR);
$db->bindValue(':headstone_colour', $c_headstone_colour, PDO::PARAM_STR);
$db->bindValue(':headstone_size', $c_headstone_size, PDO::PARAM_STR);
$db->bindValue(':step_base_size', $c_step_base_size, PDO::PARAM_STR);
$db->bindValue(':step_base_dowells', $c_step_base_dowells, PDO::PARAM_STR);
$db->bindValue(':base_colour', $c_base_colour, PDO::PARAM_STR);
$db->bindValue(':base_size', $c_base_size, PDO::PARAM_STR);
$db->bindValue(':base_dowells', $c_base_dowells, PDO::PARAM_STR);
$db->bindValue(':vase_colour', $c_vase_colour, PDO::PARAM_STR);
$db->bindValue(':vase_style', $c_vase_style, PDO::PARAM_STR);
$db->bindValue(':vase_number', $c_vase_number, PDO::PARAM_STR);
$db->bindValue(':vase_holes_left', $c_vase_holes_left, PDO::PARAM_STR);
$db->bindValue(':vase_holes_centre', $c_vase_holes_centre, PDO::PARAM_STR);
$db->bindValue(':vase_holes_right', $c_vase_holes_right, PDO::PARAM_STR);
$run_client = $db->execute();
if ($run_client) {
redirect('clients.php');
keepmsg('<div class="alert alert-success text-center">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<strong>Success!</strong> Client registered successfully.
</div>');
} else {
keepmsg('<div class="alert alert-danger text-center">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<strong>Sorry!</strong> Client could not be registered.
</div>');
}
}
}
?>
<div class="form-row">
<div class="col-md-6 offset-md-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes_left" id="vase_holes_left" value="vase_holes_left">
<label class="form-check-label" for="vase_holes_left">Left</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes_centre" id="vase_holes_centre" value="vase_holes_centre">
<label class="form-check-label" for="vase_holes_centre">Centre</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes_right" id="vase_holes_right" value="vase_holes_right">
<label class="form-check-label" for="vase_holes_right">Right</label>
</div>
</div>
</div>
解决方案
我希望我正确地理解了你。
将所有 3 个具有相同 name="vase_holes" 的字段分组,只放置一个必填项,这将迫使用户使用 HTML 选择其中一个。
在数据库中创建一个新列 vase_holes 并存储这 3 个值:vase_holes_left、vase_holes_centre、vase_holes_right。
现在您有一列包含 3 种类型的数据,您可以根据它过滤您未来的采石场。
这都是假设可以有一个值。如果您想在同一行中有更多值,请使用 PHP implode 选项将它们连接起来并将其存储到一行中。例如,您可以将其与 / 分开,以便稍后如果您需要将其分开,您可以在 / 上进行爆炸。
这会将您的输入最小化为一列,每次提交一行。
<div class="form-row">
<div class="col-md-6 offset-md-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes" id="vase_holes_left" value="vase_holes_left" required
>
<label class="form-check-label" for="vase_holes_left">Left</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes" id="vase_holes_centre" value="vase_holes_centre">
<label class="form-check-label" for="vase_holes_centre">Centre</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="vase_holes" id="vase_holes_right" value="vase_holes_right">
<label class="form-check-label" for="vase_holes_right">Right</label>
</div>
</div>
</div>
推荐阅读
- laravel - 在 Laravel 中嵌套多对多关系
- sql-server - SQL Server:填充稀疏值
- python - 如何打印 Mongo 集合中重复文档的数量?(皮蒙戈)
- swift - Swift中数组的所有音频文件的总持续时间
- c# - C# WPF - 可调整大小的用户控件/页面(抓取并拖动调整大小)
- angularjs - 单元测试辅助路由控制器
- android - 有没有办法在应用程序关闭时运行地理围栏?
- graphql - 无法从上下文访问 req
- javascript - 如何将js值从一个html页面传递到另一个
- ruby-on-rails - 在 Rails 中查找两个日期之间的月份