【问题标题】:checking checkbox and then input to a new row检查复选框,然后输入到新行
【发布时间】:2014-07-14 13:57:22
【问题描述】:

如何根据复选框结果插入数据库。

我有 5 个房间可用,用户可以预订超过 1 个。

如何将数据插入到我的预订表中,仅针对选定的房间。

这是我正在尝试的,但它只适用于第一个房间,确实尝试过 elseif,但这也没有用。

    if(isset($_POST['room1'])) {
        $query = "insert into bookings (bookingNo,roomNo) 
        values ('$bookingNo','1')";                 
        $result = mysql_query($query);
    } 

这基本上只是输入房间号和该房间的详细信息,例如预订日期和时间。

谢谢

表格

            <fieldset>

            <legend>Rooms</legend>
                <ol>
                    <li>
                        <label for =youthCafe>Youth Cafe</label>
                        <input type="checkbox"name="roomid[]" value="1" ><br>
                        <label for =inkwellMain>Inkwell Main</label>
                        <input type="checkbox" name="roomid[]" value="2"><br>
                        <label for =inkwellSmall>Inkwell Small</label>
                        <input type="checkbox"name="roomid[]" value="3"><br>
                        <label for =kitchen>Kitchen</label>
                        <input type="checkbox"name="roomid[]" value="4"><br>
                        <label for =outsideCatering>Outside Catering</label>
                        <input type="checkbox" name="roomid[]" value="5"><br>
                    </li>
                </ol>
            </fieldset>

【问题讨论】:

  • 您必须将复选框名称声明为数组。通过获取名称作为数组,您可以申请 for/foreach 循环。

标签: javascript php html mysql database


【解决方案1】:

您应该首先创建表单。由于您没有提到它,我将发布一个示例:

重要提示:您应该使用 MYSQLi 或 PDO 函数来避免 sql 注入。除此之外,这是您需要的。 (只是基础)

<?php
if ( isset($_POST['roomid']) ){
    foreach( $_POST['roomid'] as $value ){ //Receive the checkboxes as an array

         //you did not specify where $bookingNo came from, so
         //I'm assuming that you already have it from somewhere.

         $query = "insert into bookings (bookingNo,roomNo) 
                    values ('$bookingNo','$value')"; 

         $result = mysql_query($query);
    }
}
?>

<html>

<body>
    <form name="frm" method="post">
        <input type="checkbox" name="roomid[]" value="1"/>Room 1<br/>
        <input type="checkbox" name="roomid[]" value="2"/>Room 2<br/>
        <input type="checkbox" name="roomid[]" value="3"/>Room 3<br/>
        <input type="submit" name="submit" value="Send"/><br/>
    </form>
</body>

</html>

【讨论】:

  • 是的,我从另一个存储 bookingNo 和 customerNo 的表中得到了 bookingNo,谢谢,我会尝试让你知道它是否有效。
  • @FallingStar 注意HTML表单roomid[]上的复选框名称,这是php将$_POST['roomid']理解为数组的方式
  • 还是不行,只会把第一个写入数据库。
  • 你能显示var_dump( $yourRoomVariable );的结果吗?
  • 我的意思是等效变量:$_POST['roomid']
【解决方案2】:

如果 room1 是复选框。 可能 $_POST['room1'] 设置为“on”而不是“true”或“1”。 先调试 $_POST['room1']

var_dump($_POST['room1']);

大多数情况下,这有助于了解有关类型和设置值的更多信息。

【讨论】:

    【解决方案3】:

    您可以使用 javascript 在调用服务器上的 ajax 函数的复选框上设置一个事件。服务器上的函数更新数据库。这样您就可以将数据库工作与接口工作分开。使用 JQuery 它看起来像:

    $('#myformelement :checkbox').click(function() {
       $.ajax({
            "url":      (call function using http request)...,
            "type":     "post",
            "data":     { elementid },
            "success":  function(data) {
                //everything ok
            },
            "error": function(data) {
               //error
            }
        });
    

    【讨论】:

      【解决方案4】:

      试试这个代码

      <form action="index.php" method="post">
      <input type="checkbox" name="room[]" value="1" />PHP<br />
      <input type="checkbox" name="room[]" value="2" />HTML<br />
      <input type="checkbox" name="room[]" value="3" />Java<br />
      <input type="checkbox" name="room[]" value="4" />C++<br />
      <input type="checkbox" name="room[]" value="5" />C++<br />
      <input type="submit" value="submit" />
      </form>
      if ( isset($_POST['room']) ){
          foreach($_POST['room'] as $value)
          {
              $query = "insert into bookings (bookingNo,roomNo) 
                  values ('$bookingNo','$value')";                 
                  $result = mysql_query($query);
          }
      }
      

      【讨论】:

      • 这仅适用于 1 个框,我需要它来允许选中多个框并为每个框插入一个新行。例如,如果房间 1 和 2 是支票,它将插入 bookingno x room 1,然后在不同的行上插入 bookingno x 和房间 2。
      • 它适用于所有选中的复选框。例如。如果通过选中 3 个复选框提交表单,则 foreach 循环将执行 3 次,因此将执行 3 个插入查询。试试看
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2018-04-20
      相关资源
      最近更新 更多