多个复选框插入

发布于 2024-11-19 14:36:08 字数 2749 浏览 0 评论 0原文

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

    <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));
}
?>

Here is simple form contain multiple checkboxes options and textarea input:

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

My problem is How can I insert checked options (could be more than one) AND textarea value (if entered) and insert all these input values into same column in DB but each input in "separate row". I tried this code but not work insert nothing (empty cell):

<?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));
}
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仅此而已 2024-11-26 14:36:08

保存到数据库的空单元格是 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());

}

其他答案也同样好,并指出了一些值得考虑的事情。我只是想让你知道为什么你的原始代码是错误的。

The empty cell that is being saved to the database is the value from your textarea.

The reason your code is only saving the textarea is because it is the only query being executed by mysql_query. Your foreach loop is overwriting each query and the last value of $insertSQL is the textarea query. So, to fix you have to move the mysql_query inside the foreach loop and connect to the database before the loop starts.

/** 
 *  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());

}

The other answers are just as good and pointed out some things worth considering. I just want you to learn why your original code was wrong.

蛮可爱 2024-11-26 14:36:08

如果我的理解是正确的:

IF(isset($_POST['InstrCheck']) && isset($_POST['comment'])) {
    $checked = $_POST['InstrCheck'];
    $comment= $_POST['comment'];
    IF(!empty($checked) && is_array($checked)) {
        foreach($checked as $check) {
            $query = 'INSERT INTO table (checkedID, comment) VALUES (\''.mysql_real_escape_string($check).'\', \''.mysql_real_escape_string($comment).'\'';
            mysql_query($query);
        }
    }
}

您可以根据自己的喜好编辑查询,这只是将多行插入数据库的快速方法。
编辑:我误读了您的第一个 HTML 表单,您应该将 textarea名称编辑为其他内容,然后InstrCheck[] 并将其改为 comment ,然后您可以使用我上面给出的示例。

If I get you right:

IF(isset($_POST['InstrCheck']) && isset($_POST['comment'])) {
    $checked = $_POST['InstrCheck'];
    $comment= $_POST['comment'];
    IF(!empty($checked) && is_array($checked)) {
        foreach($checked as $check) {
            $query = 'INSERT INTO table (checkedID, comment) VALUES (\''.mysql_real_escape_string($check).'\', \''.mysql_real_escape_string($comment).'\'';
            mysql_query($query);
        }
    }
}

You can edit the query to your preferences, this is just a quick way of inserting multiple rows into the DB.
edit: I misread your first HTML form, you should edit the name of the textarea to something else then InstrCheck[] and make it comment instead, then you can use my example given above.

听风吹 2024-11-26 14:36:08

您可以使用此 HTML 表单...

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
    <table>
        <thead>
            <tr><th colspan="2">BREATHING CIRCULATION</th></tr>
            <tr><th>#</th><th>Instruction Name</th></tr>
        </thead>
        <tbody>
            <tr><td><input name="InstrCheck0" type="checkbox" id="InstrCheck0" value="Respirations normal rate" /></td><td>Respirations normal rate</td></tr>
            <tr><td><input name="InstrCheck1" type="checkbox" id="InstrCheck1" value="Respirations effort normal" /></td><td>Respirations effort normal</td></tr>
            <tr><td><input name="InstrCheck2" type="checkbox" id="InstrCheck2" value="Breath Sounds-normal" /></td><td>Breath Sounds-normal</td></tr>
            <tr><td><input name="InstrCheck3" type="checkbox" id="InstrCheck3" value="Skin colour-normal" /></td><td>Skin colour-normal</td></tr>
            <tr><td><input name="InstrCheck4" type="checkbox" id="InstrCheck4" value="Heart rhythm & rate normal" /></td><td>Heart rhythm & rate normal </td></tr>
            <tr><td><input name="InstrCheck5" type="checkbox" id="InstrCheck5" value="No Oedema" /></td><td>No Oedema </td></tr>
        </tbody>
    </table>
    <textarea name="InstrCheck6" id="InstrCheck6" placeholder="set your own instruction"></textarea>
    <input type="hidden" name="MM_insert" value="form1" />
    <input type="hidden" name="pat_id" value="<?php echo $_GET['a']; ?>" />
</form>

...并使用此 PHP 脚本处理它:

<?php

    $Date = date("d-m-Y");
    $Time = date("H:i:s");
    //    Has the form been sent?
    if (isset($_POST["MM_insert"])) {
        //    We can't test what's in $_POST["MM_insert"] before we even know it exists
        if ($_POST["MM_insert"] == "form1")
        {
            //    ONE connection to the database is enough; it shouldn't be in a for or foreach loop
            mysql_select_db($database_PPS, $PPS);
            //    The pattern's id is stored in the pat_id hidden field, right?
            $pat_id = $_POST["pat_id"];
            //    Never trust user input!
            $pat_id = mysql_real_escape_string($pat_id);

            //    Checkboxes & textarea have name attributes going from 0 to 6 (see HTML code)
            for ($i = 0 ; $i < 7 ; $i++)
            {
                //    Is the number $i checkbox checked?
                if (isset($_POST["InstrCheck$i"]))
                {
                    //    Let's get its value
                    $value = $_POST["InstrCheck$i"];
                    //    Again... never trust user input.
                    $value = mysql_real_escape_string($value);
                    //    Insert data
                    mysql_query("
                        INSERT INTO instruction (instName, instTime, instDate, pat_id)
                        VALUES ('$value', '$Time', '$Date', '$pat_id')
                    ");
                }
            }
        }
    }

?>

注意:

  • 您不应该对单独的 HTML 元素使用相同的 id 属性。
  • 另外,如果您确实不需要 HTML 元素的 id 属性,请不要使用它们;如果您想在它们上使用 JavaScript,如果您想在它们上应用特定的 CSS 样式,或者如果您想将 元素附加到它们,则可能需要它们。

You could use this HTML form...

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
    <table>
        <thead>
            <tr><th colspan="2">BREATHING CIRCULATION</th></tr>
            <tr><th>#</th><th>Instruction Name</th></tr>
        </thead>
        <tbody>
            <tr><td><input name="InstrCheck0" type="checkbox" id="InstrCheck0" value="Respirations normal rate" /></td><td>Respirations normal rate</td></tr>
            <tr><td><input name="InstrCheck1" type="checkbox" id="InstrCheck1" value="Respirations effort normal" /></td><td>Respirations effort normal</td></tr>
            <tr><td><input name="InstrCheck2" type="checkbox" id="InstrCheck2" value="Breath Sounds-normal" /></td><td>Breath Sounds-normal</td></tr>
            <tr><td><input name="InstrCheck3" type="checkbox" id="InstrCheck3" value="Skin colour-normal" /></td><td>Skin colour-normal</td></tr>
            <tr><td><input name="InstrCheck4" type="checkbox" id="InstrCheck4" value="Heart rhythm & rate normal" /></td><td>Heart rhythm & rate normal </td></tr>
            <tr><td><input name="InstrCheck5" type="checkbox" id="InstrCheck5" value="No Oedema" /></td><td>No Oedema </td></tr>
        </tbody>
    </table>
    <textarea name="InstrCheck6" id="InstrCheck6" placeholder="set your own instruction"></textarea>
    <input type="hidden" name="MM_insert" value="form1" />
    <input type="hidden" name="pat_id" value="<?php echo $_GET['a']; ?>" />
</form>

...and treat it with this PHP script:

<?php

    $Date = date("d-m-Y");
    $Time = date("H:i:s");
    //    Has the form been sent?
    if (isset($_POST["MM_insert"])) {
        //    We can't test what's in $_POST["MM_insert"] before we even know it exists
        if ($_POST["MM_insert"] == "form1")
        {
            //    ONE connection to the database is enough; it shouldn't be in a for or foreach loop
            mysql_select_db($database_PPS, $PPS);
            //    The pattern's id is stored in the pat_id hidden field, right?
            $pat_id = $_POST["pat_id"];
            //    Never trust user input!
            $pat_id = mysql_real_escape_string($pat_id);

            //    Checkboxes & textarea have name attributes going from 0 to 6 (see HTML code)
            for ($i = 0 ; $i < 7 ; $i++)
            {
                //    Is the number $i checkbox checked?
                if (isset($_POST["InstrCheck$i"]))
                {
                    //    Let's get its value
                    $value = $_POST["InstrCheck$i"];
                    //    Again... never trust user input.
                    $value = mysql_real_escape_string($value);
                    //    Insert data
                    mysql_query("
                        INSERT INTO instruction (instName, instTime, instDate, pat_id)
                        VALUES ('$value', '$Time', '$Date', '$pat_id')
                    ");
                }
            }
        }
    }

?>

N.B:

  • You should NOT use the same id attribute for separate HTML elements.
  • Also, if you don't really need id attributes for HTML elements, don't use them; they can be needed if you want to use JavaScript on them, if you want to apply a specific CSS style on them, or if you want to attach <label> elements to them.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文