这是一个包含多个复选框选项和文本区域输入的简单表单:
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table>
<tr><th colspan="2">BREATHING CIRCULATION</th></tr>
<tr><th>#</th><th>Instruction Name</th></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Respirations normal rate"></td><td>Respirations normal rate</td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Respirations effort normal"></td><td>Respirations effort normal</td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Breath Sounds-normal"></td><td>Breath Sounds-normal</td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Skin colour-normal"></td><td>Skin colour-normal</td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Heart rhythm & rate normal"></td><td>Heart rhythm & rate normal </td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="No Oedema"></td><td>No Oedema </td></tr>
</table>
<textarea name="InstrCheck[]" id="InstrCheck" placeholder="set your own instruction"> </textarea>
<input type="hidden" name="MM_insert" value="form1">
<input type="hidden" value="<?php echo $_GET['a'];?>" name="pat_id">
</form>
我的问题是如何插入选中的选项(可能不止一个)和文本区域值(如果输入)并将所有这些输入值插入数据库中的同一列,但每个输入都在“单独的行”中。我试过这段代码但没有插入任何东西(空单元格):
<?php
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
$pat_id = $_GET['a'];
$Date = date("d-m-Y");
$Time = date("H:i:s");
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
foreach ($_POST['InstrCheck'] as $value) {
$insertSQL = "INSERT INTO instruction (instName, instTime, instDate, pat_id) VALUES ('$value', '$Time', '$Date', '$pat_id')";
}
mysql_select_db($database_PPS, $PPS);
$Result1 = mysql_query($insertSQL, $PPS) or die(mysql_error());
$insertGoTo = "Patint_selection.php?a=$pat_id";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>
最佳答案
正在保存到数据库的空单元格是来自 textarea
的值。
您的代码仅保存 textarea
的原因是因为它是 mysql_query
执行的唯一查询。您的 foreach
循环正在覆盖每个查询,而 $insertSQL
的最后一个值是 textarea 查询。因此,要解决此问题,您必须将 mysql_query
移动到 foreach
循环中,并在循环开始之前连接到数据库。
/**
* Moving the mysql_query inside the loop requires you connect to the database
* before the loop starts
*/
mysql_select_db($database_PPS, $PPS);
/** Move your mysql_query inside your foreach loop **/
foreach ($_POST['InstrCheck'] as $value) {
$insertSQL = "INSERT INTO instruction (instName, instTime, instDate, pat_id) VALUES ('$value', '$Time', '$Date', '$pat_id')";
// Moved inside the loop...now this will run for each loop
$Result1 = mysql_query($insertSQL, $PPS) or die(mysql_error());
}
其他答案也一样好,指出了一些值得考虑的事情。我只是想让你了解为什么你的原始代码是错误的。
关于php - 多个复选框插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669590/