【问题标题】:Multiple checkboxes into database form [duplicate]数据库表单中的多个复选框[重复]
【发布时间】:2020-04-28 15:17:39
【问题描述】:

我在将多个复选框添加到已经有其他类型表单的数据库中时遇到问题。当我提交表单时,无论我选择了多少,只有 1 个复选框会上传到我的数据库中。有我的表单代码:

        <form action="mywebsite/#ankieta<--this works" class="needs-validation" novalidate="" method="post">
        <div class="row">
          <div class="col-md-6 mb-3">
            <label for="firstName">Jaki termin Ciebie najbardziej interesuje?</label>
            <div class="d-block my-3">
              <div class="custom-control custom-checkbox">
                <input id="data1" name="termin" type="checkbox" value="25.01.2020" class="custom-control-input" checked="" required="">
                <label class="custom-control-label" for="data1">25.01.2020</label>
              </div>
              <div class="custom-control custom-checkbox">
                <input id="data2" name="termin" type="checkbox" value="01.02.2020" class="custom-control-input" required="">
                <label class="custom-control-label" for="data2">01.02.2020</label>
              </div>
              <div class="custom-control custom-checkbox">
                <input id="data3" name="termin" type="checkbox" value="15.02.2020" class="custom-control-input" required="">
                <label class="custom-control-label" for="data3">15.02.2020</label>
              </div>
            </div>
          </div>
          <div class="col-md-6 mb-3">
            <label for="iloscOsob">Liczba zgłaszanych osób.</label>
            <div class="d-block my-3">
            <input class="form-control" type="number" name="liczbaosob" value="1" min="1" max="99" id="iloscOsob" required="required">
            </div>
          </div>
          <div class="col-md-6 mb-3">
            <label for="firstName">Czy interesuje Cię wypożyczenie sprzętu?</label>
            <div class="d-block my-3">
              <div class="custom-control custom-radio">
                <input id="sprzettak" name="sprzet" type="radio" value="tak" class="custom-control-input" checked="" required="">
                <label class="custom-control-label" for="sprzettak">Tak</label>
              </div>
              <div class="custom-control custom-radio">
                <input id="sprzetnie" name="sprzet" type="radio" value="nie" class="custom-control-input" required="">
                <label class="custom-control-label" for="sprzetnie">Nie</label>
              </div>
            </div>
          </div>
        </div>

        <hr class="mb-4">

        <div class="row">
          <div class="col-md-6 mb-3">
            <label for="sendname">Imię i nazwisko</label>
            <input name="imienazwisko" type="name" class="form-control" id="sendname" placeholder="Jan Kowalski">
            <div class="invalid-feedback">
              Please enter a valid email address for shipping updates.
            </div>
          </div>

          <div class="col-md-6 mb-3">
            <label for="sendemail">Email</label>
            <input name="email" type="email" class="form-control" id="sendemail" placeholder="moj@email.com">
            <div class="invalid-feedback">
              Please enter a valid email address for shipping updates.
            </div>
          </div>
        </div>

        <hr class="mb-4">
        <div class="mb3">
          <label for="same-address">Czy masz jakieś pytanie?</label>
          <textarea name="pytanie" class="form-control" id="same-address" placeholder="Max. 255 znaków"></textarea>
        </div>

        <hr class="mb-4">
        <button class="btn btn-primary btn-lg btn-block" type="submit" name="submit">Wyślij</button>
      </form>

还有我的 PHP:

<?php
$imienazwisko = $_POST['imienazwisko'];
$termin = $_POST['termin'];
$liczbaosob = $_POST['liczbaosob'];
$sprzet = $_POST['sprzet'];
$email = $_POST['email'];
$pytanie = $_POST['pytanie'];

$conn = new mysqli('localhost', 'username', 'password', 'db');
if ($conn->connect_error){
header("location: index.php?signup=error&error=" . urlencode('Connection failed: ' . $conn->connect_error)); exit;
}
else{
$stmt = $conn->prepare("insert into form1(imienazwisko, termin, liczbaosob, sprzet, email, pytanie)
    values(?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssss", $imienazwisko, $termin, $liczbaosob, $sprzet, $email, $pytanie);
$stmt->execute();
if ($stmt->error) {
    header("location: index.php?signup=error&error=" . urlencode($stmt->error));

    $stmt->close();
    $conn->close();
    exit;
} else {
    $stmt->close();
    $conn->close();
    header("location: index.php?signup=success");
    exit;
}
}

我知道我必须以某种方式将一个数组添加到 termin (temin[]) 但 IDK 如何在现有的 PHP 文件中执行此操作,我在这里寻求帮助,但不幸的是无法应用我找到的任何东西。顺便说一句,其他一切都很完美,我稍微更改了代码。提前谢谢你。

【问题讨论】:

  • 如果他们选中多个框,应该将什么放入数据库?
  • 如果您只希望用户选择一个termin 值,那么您实际上并不需要复选框——您需要单选字段或选择字段。如果您想允许多选,复选框或多选是合适的。如果保留复选框,则需要在字段名称后添加[],以防止覆盖来自同名字段的早期输入值。如果您通过$_POST 传递termin 值的数组,那么您将需要决定如何存储数据。您可以将单个字符串(以逗号分隔的值)存储到 termin 列,或者...您可以规范化。
  • 我希望人们能够检查多个终端框(这是他们想参加活动的日期,我允许更多选择,以后会选择最多的选择,或者我们会讨论和妥协) 然后将其发送到我在 phpmyadmin 中的数据库表,以便我可以阅读他们的答案。

标签: php mysql forms checkbox


【解决方案1】:

使用数组样式的名称,那么$_POST['termin'] 将是一个包含所有检查值的数组。

              <div class="custom-control custom-checkbox">
                <input id="data1" name="termin[]" type="checkbox" value="25.01.2020" class="custom-control-input" checked="" required="">
                <label class="custom-control-label" for="data1">25.01.2020</label>
              </div>
              <div class="custom-control custom-checkbox">
                <input id="data2" name="termin[]" type="checkbox" value="01.02.2020" class="custom-control-input" required="">
                <label class="custom-control-label" for="data2">01.02.2020</label>
              </div>
              <div class="custom-control custom-checkbox">
                <input id="data3" name="termin[]" type="checkbox" value="15.02.2020" class="custom-control-input" required="">
                <label class="custom-control-label" for="data3">15.02.2020</label>
              </div>
            </div>

【讨论】:

    【解决方案2】:

    亲爱的,您更改了 Html 文件,例如... name="termin[]" 和 PHP 文件..... $termin = implode(',',$_POST['termin']);

    谢谢??

    【讨论】:

    • 谢谢,因为您的回答对我有帮助。但我还必须添加 $b = implode(",", $termin);在我正常的 $termin = $_POST['termin'];然后在 $stmt->bind_param 中将 $termin 更改为 $b。干杯!
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多