【问题标题】:multiple checkboxes insertion多个复选框插入
【发布时间】:2011-07-12 19:01:28
【问题描述】:

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

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

我的问题是如何插入选中的选项(可能不止一个)和 textarea 值(如果输入)并将所有这些输入值插入数据库的同一列但每个输入都在“单独的行”中。我尝试了这段代码但没有工作插入任何内容(空单元格):

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

【问题讨论】:

  • 您是否能够将至少一个检查值写入数据库?
  • 不,并且在检查数据库表时没有出现错误消息我发现空单元格但插入了另一个值。

标签: php mysql forms


【解决方案1】:

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

}

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

【讨论】:

    【解决方案2】:

    如果我猜对了:

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

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

    【讨论】:

    • 我需要将它们全部插入同一列(选中的选项和文本输入)
    【解决方案3】:

    你可以使用这个 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 样式,或者如果你想将 元素附加到它们,则可能需要它们。

    【讨论】:

    • 我完全按照您在此处所做的操作,在 Dreamweaver 或 db 中都没有收到任何错误消息,但根本没有插入任何内容,我想知道输入丢失在哪里???跨度>
    • 尝试在mysql_query语句后面加上echo mysql_error();,看看SQL是否有问题。
    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2012-08-20
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多