【问题标题】:Saving multiple record into database with more than 1 table rows将多条记录保存到具有超过 1 个表行的数据库中
【发布时间】:2014-02-15 22:48:12
【问题描述】:

我有一个行数未知的表,您可以添加行和删除行以及 当我使用 javascript 和 php 添加超过 1 行时,如何将所有表行数据保存到数据库中。

以下是表格行的示例: HTML:

<form action="#" method="post" id="myForm">   
    <div class="row clearfix">
    <div class="col-md-12 column">
      <table class="table table-bordered table-hover" id="tab_logic">
        <thead>
          <tr >
            <th class="text-center">
              #
            </th>
            <th class="text-center">
              First Name
            </th>
            <th class="text-center">
              Last Name
            </th>                                               
          </tr>
        </thead>
        <tbody>
          <tr id='addr0'>
            <td>1</td>
              <td><input type="text" name='fn'  placeholder='First Name' tabindex="1" /></td>
              <td><input type="text" name='ln' placeholder='Last Name' tabindex="2"/></td>
          </tr>
          <tr id='addr1'></tr>
        </tbody>
      </table>
    </div>
  </div>
    <input type="button" id="add_row" class="pull-left" value="add row"/><input type="button" id='delete_row' class="pull-right" value="delete row"/><br/>
    <input type="submit" class="btn" value="Submit" tabindex="5" name="addName" id="sub"/>
  </form>

这是添加和删除行的代码 查询:

$(document).ready(function(){
var i=1;
$("#add_row").click(function(){
$('#addr'+i).html("<td>"+ (i+1) +"</td><td><input name='fn' type='text' placeholder='First Name"+i+"' class='form-control'></td><td><input  name='ln' type='text' placeholder='Last Name"+i+"'  class='form-control input-md'></td>");

$('#tab_logic').append('<tr id="addr'+(i+1)+'"></tr>');
  i++; 
});
  $("#delete_row").click(function(){
  f(i>1){
   $("#addr"+(i-1)).html('');
     i--;
  }
});
});

PHP:

if(isset($_POST['addName'])){
    $userid = $database->getUserID();
    if(isset($_POST['fn']) && isset($_POST['ln'])){
        $firstname = $_POST['fn'];
        $lastname = $_POST['fn'];
        if(empty($_POST['fn'])){
            $session->Error() = '*'
        } else if(empty($_POST['ln'])){
            $session->Error() = '*'
        } else {
            $database->AddUser = ('$userid', '$firstname', '$lastname');
        }
    }       
}

JSFIDDLE

【问题讨论】:

    标签: php jquery html


    【解决方案1】:

    你在正确的轨道上。要将数组作为POST 数据发送,您需要将[] 添加到元素名称中。由于您还试图保持数组键匹配(名字和姓氏),因此您需要将 i 放入数组名称中。然后在 PHP 中使用foreach() 循环数组。

    所以不是

    name='fn' and name='ln'
    

    使用

    name='fn["+i+"]' and name='ln["+i+"]'
    

    在 PHP 中:

    if(isset($_POST['addName'])){
    $userid = $database->getUserID();    
    if(isset($_POST['fn']) && isset($_POST['ln'])){
            foreach ($_POST['fn'] AS $key=>$firstname){
                $lastname = $_POST['ln'][$key];
                if(empty($firstname)){
                    $session->Error() = '*'
                } else if(empty($lastname)){
                    $session->Error() = '*'
                } else {
                    $database->AddUser = ('$userid', '$firstname', '$lastname');
                }
            }
        }      
    }
    

    看看你如何用foreach()循环fn数组,然后用$key匹配数组值?如果此代码不起作用,请确保您的表单使用print_r($_POST) 正确发布数据,您应该会看到两个数组,一个用于fn,一个用于ln,并具有匹配的数组键。

    【讨论】:

    • 如果我在 php $_POST['mn']; 中添加中间首字母的文本框怎么样? foreach 会影响循环吗?
    • 如果您仍然循环使用名字,您可以使用 $middle = $_POST['mn'][$key]; 访问中间首字母
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多