【问题标题】:How to save html checkbox value to MS-SQL database using PHP?如何使用 PHP 将 html 复选框值保存到 MS-SQL 数据库?
【发布时间】:2020-09-05 23:15:17
【问题描述】:

我正在开发一个 html 表单,它的数据被保存到 MS-SQL 服务器数据库中。我能够将所有其他字段保存到数据库中它们各自的列中,但是复选框字段将值保留为空。 我对这个概念不是很熟悉。

代码如下:

form.php

<form class="cmxform" action ='functions/Form.php'  method="post">
<div class="form-row">

                   <h3> Contact Information</h3>
                    <div class="form-group col-md-4">
                        <label for="fName">First Name </label>
                        <input type="text" class="form-control" id="fName" name="fName">
                    </div>
                    <div class="form-group col-md-4">
                        <label for="lName">Last Name</label>
                        <input type="text" class="form-control" id="lName" name="lName">
                    </div>
                    <div class="form-group col-md-4">
                        <label for="email">Email </label>
                        <input type="email" class="form-control" id="email" name="email">
                    </div>
                </div>
<div class="form-group col-md-12">
<h3>Category: Please choose one of the following: </h3>
     <div class="form-check">
   <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
       <label class="form-check-label" for="defaultCheck1">
           Vegetarian
     </div>
<div class="form-check">
         <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
         <label class="form-check-label" for="defaultCheck1">
        Ham
         </label> 
     </div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
    <label class="form-check-label" for="defaultCheck1">
         Turkey
         </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
         <label class="form-check-label" for="defaultCheck1">
        Other
    </label>
</div>

函数/form.php:

<?php
require_once 'connection.php';
$fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
$lName = filter_input(INPUT_POST, "lName") ? filter_input(INPUT_POST, 'lName') : null;
$email = filter_input(INPUT_POST, "email") ? filter_input(INPUT_POST, 'email') : null;
$tempCheck1 = filter_input(INPUT_POST, "defaultCheck1") ? filter_input(INPUT_POST, 'defaultCheck1') : null;
$tempCheck2 = filter_input(INPUT_POST, "defaultCheck2") ? filter_input(INPUT_POST, 'defaultCheck2') : null;
$tempCheck3 = filter_input(INPUT_POST, "defaultCheck3") ? filter_input(INPUT_POST, 'defaultCheck3') : null;
$tempCheck4 = filter_input(INPUT_POST, "defaultCheck4") ? filter_input(INPUT_POST, 'defaultCheck4') : null;
$sqlInsert = "INSERT INTO dbo.form (fName, lName, email, category ) VALUES (:fName, :lName, :email, :defaultCheck1, :defaultCheck2, :defaultCheck3, :defaultCheck4)
$stmt = $conn->prepare($sqlInsert);
$stmt->bindParam(':fName', $fName);
$stmt->bindParam(':lName', $lName);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':defaultCheck1', $tempCheck1);
$stmt->bindParam(':defaultCheck2', $tempCheck2);
$stmt->bindParam(':defaultCheck3', $tempCheck3);
$stmt->bindParam(':defaultCheck4', $tempCheck4);
if ($stmt->execute()) {
        $conn->commit();
        return true;
    } else {
        $conn->rollback();
        return false;
    }
?>

这是表单中唯一一个我无法将数据发送到数据库的框。休息一切正常。

【问题讨论】:

  • 你错过了复选框的名称属性
  • 你有语法错误,看语法高亮;您没有关闭线路并忘记了报价。
  • 您在哪一行看到语法错误?实际上是一个巨大的表格,可能是在过滤掉那里的代码时出现语法错误。
  • 可能只是复制/粘贴错误
  • $sqlInsert 线路未正确关闭。

标签: php sql-server database forms checkbox


【解决方案1】:

这是因为您的复选框字段没有名称,但我想您只想允许选择一个类别,在这种情况下,您必须在 HTML 标记中使用单选字段:

<div class="form-check">
    <input class="form-check-input" type="radio" name="category" value="vegetarian" id="defaultCheck1">
    <label class="form-check-label" for="defaultCheck1">
        Vegetarian
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name="category" value="ham" id="defaultCheck2">
    <label class="form-check-label" for="defaultCheck1">
        Ham
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name="category" value="turkey" id="defaultCheck3">
    <label class="form-check-label" for="defaultCheck1">
        Turkey
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name="category" value="other" id="defaultCheck4">
    <label class="form-check-label" for="defaultCheck1">
        Other
    </label>
</div>

另外我注意到您在多个地方使用相同的 id 属性,id 用于指定元素的唯一性,它不会破坏功能,但请记住。

更新

如果您想拥有多个表示同一事物的类别,您可以将它们命名为类别[0]、类别[1]、类别[2] ...

<div class="form-check">
    <input class="form-check-input" type="checkbox" name="categories[0]" value="vegetarian" id="defaultCheck1">
    <label class="form-check-label" for="defaultCheck1">
        Vegetarian
</div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="ham" name="categories[1]" id="defaultCheck2">
    <label class="form-check-label" for="defaultCheck2">
        Ham
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="turkey" name="categories[2]" id="defaultCheck3">
    <label class="form-check-label" for="defaultCheck3">
        Turkey
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="other" name="categories[3]" id="defaultCheck4">
    <label class="form-check-label" for="defaultCheck4">
        Other
    </label>
</div>

然后在 PHP 中更新这些字段:

$tempCheck = filter_input(INPUT_POST, "类别", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); $stmt->bindParam(':defaultCheck1', implode(',', $tempCheck));

【讨论】:

  • 好的,我添加了 name 属性,但它是一个复选框而不是一个收音机。它还应该能够将多个条目保存到数据库中。如何将值进一步发送到 sql 服务器。
  • " 它不会破坏功能," 错误。它会破坏 CSS 和 JS 的功能
  • 我不能同意,你仍然可以像 CSS 中的选择器一样使用它,但是对于 JS,它只会选择第一个元素。但是,是的,这是一种错误的做事方式。
  • 能否请您发布要对 PHP 进行的整个更新?内爆部分?
【解决方案2】:
<div class="form-check">
         <input class="form-check-input" type="checkbox" value="" **id="defaultCheck1"**>
         <label class="form-check-label" for="defaultCheck1">
        Ham
         </label> 
     </div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="" **id="defaultCheck1"**>
    <label class="form-check-label" for="defaultCheck1">
         Turkey
         </label>
</div> 

首先,您要复制 ID。在任何情况下,这都不合适,因为元素 ID 必须是唯一的。

其次,表单只为具有名称的字段元素提交值。他们还需要值,您将其全部保留为“”。这段代码中的“Ham”和“Turkey”只是文本字符串,不随表单提交。见HTML Forms - Are name and id required?

编辑 1:

PHP- 除此之外,您的 php 还需要一些修改:

$tempCheck = filter_input(INPUT_POST, "defaultCheck1", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$defaultCheck1 = (is_array($tempCheck)) ? implode(',', $tempCheck1) : null;

这些值没有出现在数组中。假设您有三个复选框,分别名为“a”、“b”和“c”。如果选中“a”的复选框,我将在 $_POST['a'] 中获取它的值。如果未选择“b”,则 $_POST['b'] 将不存在。

因此,对于您要处理的每个复选框值,您需要 a) 检查它是否存在于 $_POST 中,如果存在,则 b) 使用该值(即,将其添加到逗号分隔的字符串中)。

【讨论】:

  • 对。让我按照您的建议进行更改。
  • 好的。我该怎么做?
  • 你已经完成了伙计,你只需要为你可能期望的每个复选框都这样做: $fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
  • 好吧,让我测试一下。尽快更新您
  • 但是该类别的数据库中只有一列。如何保存多个选中的复选框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多