我需要一种更有效的方式将多选复选框表单提交到数据库。仅关注"花瓶孔值"复选框,我目前在数据库表中有3个独立的行/列,名为"Vase_Holes_let"Vase_Holes_center"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_let、vase_holes_centre和vase_hole_right。
现在你有一列有3种类型的数据,你可以根据这些数据过滤你未来的采石场。
这都是假设可以有一个值。若您想在同一行中有更多的值,可以使用PHP内爆选项将它们连接起来,并将其存储到一行中。你可以用/来设计它,所以以后如果你需要把它分开,你可以在/上爆炸。
这将最大限度地减少您在一列中的输入,每次提交一行。
<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>