我在StackOverflow上找到了一些主题,我读了一些关于如何从复选框插入数据到MySQL数据库的内容。我读过关于使用数组将值插入数据库的文章。现在的问题是,只要我按下提交按钮,除了复选框值外,表单中的所有数据都包含在内。因此,表单工作,因为它应该,只有复选框的值没有插入到我的数据库。以下是我所做的:
my form的一部分:
<form method="post" action="add_schulen.php" class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Name Schule: </label>
<div class="col-md-9 col-sm-9 col-xs-12">
<input type="text" name="schulname" class="form-control" placeholder="Namen der Schule">
</div>
</div>
<div class="col-md-3 col-sm-3 col-xs-12 profile_left">
<input type="checkbox" name="schulen[]" value="1A"> 1A <br />
<input type="checkbox" name="schulen[]" value="1B"> 1B <br />
<input type="checkbox" name="schulen[]" value="1C"> 1C <br />
<input type="checkbox" name="schulen[]" value="1D"> 1D <br />
<input type="checkbox" name="schulen[]" value="1E"> 1E <br />
<input type="checkbox" name="schulen[]" value="1F"> 1F <br />
<input type="checkbox" name="schulen[]" value="1G"> 1G <br />
<input type="checkbox" name="schulen[]" value="1H"> 1H <br />
</div>
<div class="col-md-3 col-sm-3 col-xs-12 profile_left">
<input type="checkbox" name="schulen[]" value="2A"> 2A <br />
<input type="checkbox" name="schulen[]" value="2B"> 2B <br />
<input type="checkbox" name="schulen[]" value="2C"> 2C <br />
<input type="checkbox" name="schulen[]" value="2D"> 2D <br />
<input type="checkbox" name="schulen[]" value="2E"> 2E <br />
<input type="checkbox" name="schulen[]" value="2F"> 2F <br />
<input type="checkbox" name="schulen[]" value="2G"> 2G <br />
<input type="checkbox" name="schulen[]" value="2H"> 2H <br />
</div>
<button type="submit" name="addschulen" value="addschulen" class="btn btn-warning btn-lg pull-right">Schule anlegen</button>
</form>
我的完整PHP代码在我的add_schulen.php:
顶部<?php
include 'inc/database.php';
// Check if form is submitted
if (isset ($_POST['addschulen'])) {
$schulname = mysqli_real_escape_string ($connect, $_POST['schulname']);
$ansprechperson = mysqli_real_escape_string ($connect, $_POST['ansprechperson']);
$schulstrasse = mysqli_real_escape_string ($connect, $_POST['schulstrasse']);
$schulplz = mysqli_real_escape_string ($connect, $_POST['schulplz']);
$schulort = mysqli_real_escape_string ($connect, $_POST['schulort']);
$schultelefon = mysqli_real_escape_string ($connect, $_POST['schultelefon']);
$klassen = mysqli_real_escape_string ($connect, $_POST['schulen']);
// Setting up a blank variable to be used in the coming loop.
$alleKlassen = "";
// For every checkbox value sent to the form.
foreach ($klassen as $klasse) {
// Append the string with the current array element, and then add a comma and a space at the end.
$alleKlassen .= $klasse . ", ";
}
$query_insert_schule = mysqli_query($connect,"INSERT INTO `schule` (`schulname`, `ansprechperson`, `schulstrasse`, `schulplz`, `schulort`, `schultelefon`, `klasse`)
VALUES ('$schulname', '$ansprechperson', '$schulstrasse', '$schulplz', '$schulort', '$schultelefon', '$alleKlassen')");
if (mysqli_affected_rows($connect) == 0) //<--
{
die('Could not update data: ' . mysql_error());
} else {
$msg_success= '<strong>Gratulation!</strong> Die Schule wurde erfolgreich hinzugefügt. Zur <a href="schulverwaltung.php"><span style="color:#fff;">Übersicht aller Schulen >></span></a>';
}
}
?>
正如我所说的,只要我单击提交按钮,所有数据都包括在内,除了复选框的值。有人知道为什么吗?我做错了什么?这是我第一次尝试在数据库中插入复选框值。
谢谢,克里斯。
我已经尝试过了,它只是没有插入数据库,但我只是把它打印出来。尝试从$_POST['schulen']
中删除字符串转义,因为这是已经清理/预定义的数据。并且还使用substr()
删除数组末尾的最后一个逗号。
试试这个:
<?php
// Check if form is submitted
if (isset ($_POST['addschulen'])) {
$schulname = $_POST['schulname'];
$ansprechperson =$_POST['ansprechperson'];
$schulstrasse = $_POST['schulstrasse'];
$schulplz =$_POST['schulplz'];
$schulort = $_POST['schulort'];
$schultelefon =$_POST['schultelefon'];
$klassen = $_POST['schulen'];
// Setting up a blank variable to be used in the coming loop.
$alleKlassen = "";
// For every checkbox value sent to the form.
foreach ($klassen as $klasse) {
// Append the string with the current array element, and then add a comma and a space at the end.
$alleKlassen .= $klasse . ", ";
}
$alleKlassen = substr($alleKlassen , 0, -2);
print_r($alleKlassen);
}else{
echo '<form method="post" action="" class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Name Schule: </label>
<div class="col-md-9 col-sm-9 col-xs-12">
<input type="text" name="schulname" class="form-control" placeholder="Namen der Schule">
</div>
</div>
<div class="col-md-3 col-sm-3 col-xs-12 profile_left">
<input type="checkbox" name="schulen[]" value="1A"> 1A <br />
<input type="checkbox" name="schulen[]" value="1B"> 1B <br />
<input type="checkbox" name="schulen[]" value="1C"> 1C <br />
<input type="checkbox" name="schulen[]" value="1D"> 1D <br />
<input type="checkbox" name="schulen[]" value="1E"> 1E <br />
<input type="checkbox" name="schulen[]" value="1F"> 1F <br />
<input type="checkbox" name="schulen[]" value="1G"> 1G <br />
<input type="checkbox" name="schulen[]" value="1H"> 1H <br />
</div>
<div class="col-md-3 col-sm-3 col-xs-12 profile_left">
<input type="checkbox" name="schulen[]" value="2A"> 2A <br />
<input type="checkbox" name="schulen[]" value="2B"> 2B <br />
<input type="checkbox" name="schulen[]" value="2C"> 2C <br />
<input type="checkbox" name="schulen[]" value="2D"> 2D <br />
<input type="checkbox" name="schulen[]" value="2E"> 2E <br />
<input type="checkbox" name="schulen[]" value="2F"> 2F <br />
<input type="checkbox" name="schulen[]" value="2G"> 2G <br />
<input type="checkbox" name="schulen[]" value="2H"> 2H <br />
</div>
<button type="submit" name="addschulen" value="addschulen" class="btn btn-warning btn-lg pull-right">Schule anlegen</button>
</form>';
}
?>
因为你使用的是html数组,所以你必须像数组一样对它们进行foreach:
$schulen= $_POST['schulen'];
foreach( $schulen as $s ){
//code
}
现在如果你写:echo $s;(在//code下),它将打印用户选中的复选框的值…所以现在你应该很容易解决了;)例如,如果要转义:
$schulen= $_POST['schulen'];
for( $i=0; $i< count($schulen); $i++ ){
$schulen[ $i ]= mysqli_real_escape_string( $schulen[ $i ] );
}
如果你想放入数据库,你需要一个合适的字段(例如:一个文本字段将是很好的)那么你必须使用内爆&爆炸……$todatabase= implode($schulen, '|');获取数组:$schulen= explosion ('|', $fromdatabase);