首页 > 解决方案 > 我需要一种更有效的方式将我的多选复选框表单提交到我的数据库

问题描述

我需要一种更有效的方式将我的多选复选框表单提交到我的数据库。只关注花瓶孔值复选框,我目前在我的数据库表中有 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">&times;</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">&times;</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">&times;</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>

标签: phphtmlmysqlpostbootstrap-4

解决方案


我希望我正确地理解了你。

将所有 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>


推荐阅读