【发布时间】: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 中的数据库表,以便我可以阅读他们的答案。