Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将与单个记录同名的多个字段插入数据库_Php_Mysql - Fatal编程技术网

Php 将与单个记录同名的多个字段插入数据库

Php 将与单个记录同名的多个字段插入数据库,php,mysql,Php,Mysql,在我的应用程序中,有一个表单具有两个选择字段,其中最后一个选择设置为具有多个选择。我需要的是将第一对select字段作为单个记录插入数据库。当我尝试使用for循环执行此操作时,我能够将记录作为单行插入,直到并且除非我为第二个选择字段仅选择一个值。但是如果我为第二次选择选择多个字段,则记录不正确 在这里,用户还可以通过单击“添加”按钮添加更多div 情景1 如果我为两个select选择单个字段,则输出将为: A, D B, E A, D B, E 情景2 如果我为第二个选择选择多个字段,如a、

在我的应用程序中,有一个表单具有两个选择字段,其中最后一个选择设置为具有多个选择。我需要的是将第一对select字段作为单个记录插入数据库。当我尝试使用for循环执行此操作时,我能够将记录作为单行插入,直到并且除非我为第二个选择字段仅选择一个值。但是如果我为第二次选择选择多个字段,则记录不正确

在这里,用户还可以通过单击“添加”按钮添加更多div

情景1

如果我为两个select选择单个字段,则输出将为:

A, D
B, E
A, D
B, E
情景2

如果我为第二个选择选择多个字段,如a、D、E和B、F。使用上面的相同循环,结果将是:

A, D
B, E
A, D
B, E
如果我为第二个选择字段广告选择多个字段,并且用户可以像这样添加更多div,那么如何插入相同的字段

编辑1

<div id="scope-brand-div">
                <div class="col-md-6">
                  <div class="form-group">
                    <label for="scope"><?php echo $this->lang->line('xin_project_scope');?></label>
                    <select name="scope[]" class="form-control select-border-color border-warning scope-select" data-plugin="select_hrm" data-placeholder="<?php echo $this->lang->line('xin_project_scope');?>">
                      <option value=""></option>
                      <?php foreach($all_project_scope as $scope) { ?>
                      <option value="<?php echo $scope->scope_name; ?>"><?php echo $scope->scope_name; ?></option>
                      <?php } ?>
                    </select>
                  </div>
                </div>
                <div class="col-md-6">
                  <div class="form-group brands-ajax">
                    <label for="brands_used"><?php echo $this->lang->line('xin_brands_used');?></label>
                    <select multiple name="brands_used[]" class="form-control select-border-color border-warning brand-select" data-plugin="select_hrm" data-placeholder="<?php echo $this->lang->line('xin_brands_used');?>">
                    <option value=""></option>
                      <?php foreach($all_brands as $brands) { ?>
                      <option value="<?php echo $brands->brand_name; ?>"><?php echo $brands->brand_name; ?></option>
                      <?php } ?>
                    </select>
                  </div>
                </div>
              </div>

<script type="text/javascript">
$(document).ready(function(){
    $('#add-new').click(function(){
    var invoice_items = '<div id="scope-brand-div">'
                        + '<div class="col-md-6">'
                        +'<div class="form-group">'
                        + '<label for="scope"><?php echo $this->lang->line('xin_project_scope');?></label>'
                        +'<select name="scope[]" class="form-control scope-select"  data-placeholder="<?php echo $this->lang->line('xin_project_scope');?>">'
                        +'<option value=""></option>'
                        <?php foreach($all_project_scope as $scope) { ?>
                        +'<option value="<?php echo $scope->scope_name; ?>"><?php echo $scope->scope_name; ?></option>'
                        <?php } ?>
                        + '</select>'
                        + '</div>'
                        + '</div>'
                        + '<div class="col-md-6">'
                        + '<div class="form-group brands-ajax">'
                        + '<label for="brands_used"><?php echo $this->lang->line('xin_brands_used');?></label>'
                        +'<select name="brands_used[]" class="form-control brand-select" data-placeholder="<?php echo $this->lang->line('xin_brands_used');?>">'
                        +'<option value=""></option>'
                        <?php foreach($all_brands as $brands) { ?>
                        +'<option value="<?php echo $brands->brand_name; ?>"><?php echo $brands->brand_name; ?></option>'
                        <?php } ?>
                        +'</select>'
                        +'</div>'
                        + '</div>'
                        +'</div>'
    $('#clone-parent').append(invoice_items).fadeIn(500);
});
});
</script>

<?php
    public function add_project() {
    $s = $this->input->post('scope');
    $b = $this->input->post('brands_used');
    foreach( $s as $key => $n ) {
       $rows[] = $n.",".$b[$key];
        //insert query
      }
}

?>
关于你的html

标签中的for仅在与字段的id属性关联时才能正常工作。 在文本和value属性中具有相同值的标记可以完全删除它们的value属性-它在提交时的工作方式完全相同,但会从html中删除bloat。 我在id后面添加了一个计数器,在最外层添加了clonable类,以帮助javascript克隆过程。 brands_used[]]需要是brands_used[0][]以防止一级索引不必要的增加。 重写:

<div id="scope-brand-div0" class="clonable">
    <div class="col-md-6">
        <div class="form-group">
            <label for="scope0"><?php echo $this->lang->line('xin_project_scope'); ?></label>
            <select id="scope0" name="scope[]" class="form-control select-border-color border-warning scope-select" data-plugin="select_hrm" data-placeholder="<?php echo $this->lang->line('xin_project_scope'); ?>">
                <option></option>
                <?php foreach ($all_project_scope as $scope) {
                    echo "<option>{$scope->scope_name}</option>";
                } ?>
            </select>
        </div>
    </div>
    <div class="col-md-6">
        <div class="form-group brands-ajax">
            <label for="brands_used0"><?php echo $this->lang->line('xin_brands_used'); ?></label>
            <select multiple id="brands_used0" name="brands_used[0][]" class="form-control select-border-color border-warning brand-select" data-plugin="select_hrm" data-placeholder="<?php echo $this->lang->line('xin_brands_used'); ?>">
                <option></option>
                <?php foreach ($all_brands as $brands) {
                    echo "<option>{$brands->brand_name}</option>";
                } ?>
            </select>
        </div>
    </div>
</div>
这意味着您可以使用相同的第一级键访问相关的范围和使用的值。在遍历数据时,作用域数据将是一个字符串,而使用的是一个数组

要迭代:

// make an object-oriented mysqli connection ($mysqli)
$stmt = $mysqli->prepare("INSERT INTO tablensme (scope, brand_used) VALUES (?, ?)");
$stmt->bind_param('ss', $scope, $brand_used);
$posted = $this->input->post();
foreach ($posted['scope'] as $index => $scope) {
    // use $scope string
    foreach ($posted['brands_used'][$index] as $brand_used) {
        // use $brand_used string
        $stmt->execute();
    }
}
假设您有一个规范化的db表结构,并且希望为每个表行写入一个范围值和一个brand_used值,那么在循环之前设置准备好的语句和绑定变量,然后从内部循环调用execute

这是100%未测试的,但插入样本数据的预期结果将是以下新行:

('ACS', 'Opterna'),
('ACS', 'Norden'),
('SMA TV', 'Opterna')

你能发布你的完整代码吗?请看我的编辑。我已经添加了代码。我想你正在考虑制作一个更深的$\u post数组结构,这样你就可以将数据组分开。从范围[]的角度考虑。我认为您需要一个计数器变量来声明第一级分组索引,否则自动递增将不符合需要。这只是猜测/暗示-不是答案。可以安全地减少到添加到我的编辑@Mick这是我可以从我的手机和您提供的详细信息做的最好的事情。如果这不符合要求,我将尝试调整我的答案,但您需要非常清楚我的答案是如何失败的,并提供任何客户端或服务器端错误消息。在测试我的代码之前,我在原始文件中创建了相同的场景,只是为了获得您提到的帖子结构。数组0=>array 0=>'Opterna',1=>'Opterna',2=>'Opterna',3=>'Norden',这是我对$\u POST['brands\u used']的结果。我已将brands_used[]更改为brands_used[0][]每次克隆Foeld时,[0]必须递增-这将保持分组。这就是js block打算做的。
// make an object-oriented mysqli connection ($mysqli)
$stmt = $mysqli->prepare("INSERT INTO tablensme (scope, brand_used) VALUES (?, ?)");
$stmt->bind_param('ss', $scope, $brand_used);
$posted = $this->input->post();
foreach ($posted['scope'] as $index => $scope) {
    // use $scope string
    foreach ($posted['brands_used'][$index] as $brand_used) {
        // use $brand_used string
        $stmt->execute();
    }
}
('ACS', 'Opterna'),
('ACS', 'Norden'),
('SMA TV', 'Opterna')