php - 多个复选框插入

标签 php mysql forms

这是一个包含多个复选框选项和文本区域输入的简单表单:

    <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/

相关文章:

php - Doctrine ORM关联的默认值

php - 使用 laravel 进行异步评分(喜欢/不喜欢)

php - SQL : Unknown column in 'where clause'

php - 在表单中传递多行输入并在 PHP 中迭代它们?

forms - Drupal 7 将表单保存到数据库

php - 使用下拉菜单和文本字段通过 Php 过滤 My sql

mysql - 带计时器和错误处理的 Node.js MySQL 连接

MySQL:如何在线性时间内确定表A和B中的哪些行被表C中的行引用?

mysql - 计算按等级分组的左右子节点总数

c# - ASP.NET MVC 表单问题