【问题标题】:Parsing array from parts of a form从表单的一部分解析数组
【发布时间】:2021-08-11 20:24:41
【问题描述】:

我有一个表单,其中的一部分是动态扩展的。并且这部分表单被保存到不同的表(mysql)中,这部分必须是一个数组。但是我在发布表单时收到错误消息。 “数组到字符串的转换”

下面是我添加动态部分的表单和javascript。

$(document).ready(function(){      
   
    var i=1;  

    var x=1;

    //Add function when buttons is clicked
    $('.addb').click(function() {
        button = $(this).val()

        if (button == 'lev') {
            x++;
        }

        i++;

        var data = '<div id="row'+i+'" class="row'+x+'"><div class="row rounded align-items-center" style=" margin: auto; margin-top:10px; background-color: #e3e3e3;"> <div class="col-sm-7"><div class="form-group-sm"><input type="hidden" name="level[]" value="'+x+'"><select class="form-control searchenable" name="food_id[]" id="food_id'+i+'" required><option value="">Velg ingrediens nr '+i+'</option><?php foreach($foods as $row) {?><option value="<?php echo $row['food_id']; ?>" <?php if($row['food_id'] == old('food_id')) echo 'SELECTED="SELECTED"'; ?>> <?php echo $row['food']." ".$row['measure']." ".$row['mweight']."g per enhet"; ?></option><?php } ?></select><!-- Error --> <?php if( $validation->getError('food') ) {?><div class='alert alert-danger mt-2'><?= $error = $validation->getError('food'); ?> </div><?php }?></div></div><div class="col-sm-3"><div class="form-group-sm"><input type="text" class="form-control" name="mengde[]" required value="<?= old('mengde') ?>" placeholder="Antall/Mengde"><!-- Error --><?php if( $validation->getError('mengde') ) {?> <div class='alert alert-danger mt-2'><?= $error = $validation->getError('protein'); ?></div><?php }?></div></div><div class="col-sm-2 justify-content-center"><div class="form-group-sm"><button type="button" name="remove" id="'+i+'" class="btn-sm btn-danger btn_remove">Fjern nr '+i+'</button></div></div></div></div>';

        var data2 = '<div id="row'+i+'" class="row'+x+'"><div class="row"><div class="short-div"><p>Nivå '+x+'</p></div></div><div class="row rounded align-items-center" style=" margin: auto; margin-top:10px; background-color: #e3e3e3;"> <div class="col-sm-7"><div class="form-group-sm"><input type="hidden" name="level[]" value="'+x+'"><select class="form-control searchenable" name="food_id[]" id="food_id'+i+'" required><option value="">Velg ingrediens nr '+i+'</option><?php foreach($foods as $row) {?><option value="<?php echo $row['food_id']; ?>" <?php if($row['food_id'] == old('food_id')) echo 'SELECTED="SELECTED"'; ?>> <?php echo $row['food']." ".$row['measure']." ".$row['mweight']."g per enhet"; ?></option><?php } ?></select><!-- Error --> <?php if( $validation->getError('food') ) {?><div class='alert alert-danger mt-2'><?= $error = $validation->getError('food'); ?> </div><?php }?></div></div><div class="col-sm-3"><div class="form-group-sm"><input type="text" class="form-control" name="mengde[]" required value="<?= old('mengde') ?>" placeholder="Antall/Mengde"><!-- Error --><?php if( $validation->getError('mengde') ) {?> <div class='alert alert-danger mt-2'><?= $error = $validation->getError('protein'); ?></div><?php }?></div></div><div class="col-sm-2 justify-content-center"><div class="form-group-sm"><button type="button" name="remove" id="'+i+'" class="btn-sm btn-danger btn_remove">Fjern nr '+i+'</button></div></div></div></div>';


        if (button == 'ing') {
            if (x > 1) {
                $('#dynamic_field2').append(data);

                //Add select2 to added line
                $(".searchenable").select2({
                    placeholder: " -- Velg ingrediens -- "
                });
            } else {
                $('#dynamic_field').append(data);

                //Add select2 to added line
                $(".searchenable").select2({
                    placeholder: " -- Velg ingrediens -- "
                });
            }
        } else if (button == 'lev') {
            $('#dynamic_field2').append(data2);
            
            document.getElementById('rem_level').type = 'button';
            
            document.getElementById('rem_level').value = x;
           
           //Add select2 to added line
            $(".searchenable").select2({
                placeholder: " -- Velg ingrediens -- "
            });
        }
    });

    //Button remove row ingredient
    $(document).on('click', '.btn_remove', function(){  

        var button_id = $(this).attr("id");   

        $('#row'+button_id+'').remove();  


    });  


    //add select2 to the first ingredient
    $(".searchenable").select2({
            placeholder: " -- Velg ingrediens -- "
    });

    //Buttom remove level
    $(document).on('click', '.btn_rem_level', function(){  

        var button_id = $(this).val();   

        $('.row'+button_id+'').remove();  
        document.getElementById('rem_level').value = x - 1;

        x = x - 1;


        if (x < 1) {
            document.getElementById('rem_level').type = "hidden";
            x = 1;
        }

    });  
    
}); 
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <!--<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
    <script type="text/javascript">

<div class="container">
    <div class="row">
    <h2>Legg til Oppskrift</h2>
    </div>

    <?php 
    // Display Response
    if(session()->has('message')){
    ?>
    <div class="alert <?= session()->getFlashdata('alert-class') ?>">
        <?= session()->getFlashdata('message') ?>
    </div>
    <?php
    }
    ?>

    <?php $validation = \Config\Services::validation(); ?>
    <div class="row">
        <div class="col-md-12">
            <form action="<?=site_url('recipe/store')?>" method="post">
            <div class="form-group">
                <label for="food">Oppskrift tittel:</label>
                <input type="text" class="form-control" name="recipe" required value="<?= old('recipe') ?>">

                <!-- Error -->
                <?php if( $validation->getError('name') ) {?>
                <div class='alert alert-danger mt-2'>
                    <?= $error = $validation->getError('name'); ?>
                </div>
                <?php }?>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
        <div class="form-group">
                <label for="kategori_id">Kategori</label><br>
                <select class="form-control" name="category_id" id="category_id" required>
                    <option value="">Velg kategori</option>
                    <?php foreach($kategorier as $kategori) {?>
                        <option value="<?php echo $kategori->kategori_id;?>" <?php if($kategori->kategori_id == old('category_id')) echo 'SELECTED="SELECTED"'; ?>><?php echo $kategori->kategori; ?></option>
                    <?php } ?>
                </select>
                <!-- Error -->
                <?php if( $validation->getError('category_id') ) {?>
                <div class='alert alert-danger mt-2'>
                    <?= $error = $validation->getError('category_id'); ?>
                </div>
                <?php }?>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <h4>Ingredienser</h4>
        </div>
    </div>
    <div class="row rounded align-items-center" style="margin: auto; margin-top: 10px; background-color: #e3e3e3;">
        <div class="col-md-7 align-items-center">
            <div class="form-group-sm">
                <input type="hidden" name="level[]" value = "1">
                <select class="form-control searchenable" name="food_id[]" id="food_id" required>
                    <option value="">Velg ingrediens</option>
                    <?php foreach($foods as $row) {?>
                        <option value="<?php echo $row['food_id']; ?>" <?php if($row['food_id'] == old('food_id')) echo 'SELECTED="SELECTED"'; ?>> <?php echo $row['food']." ".$row['measure']." ".$row['mweight']."g per enhet"; ?></option>
                    <?php } ?>
                </select>
                <!-- Error -->
                <?php if( $validation->getError('food') ) {?>
                <div class='alert alert-danger mt-2'>
                    <?= $error = $validation->getError('food'); ?>
                </div>
                <?php }?>
            </div>
        </div>
    
        <div class="col-md-3">
            <div class="form-group-sm">
                <input type="text" class="form-control" name="mengde['+i+']" required value="" placeholder="Antall/Mengde">

                <!-- Error -->
                <?php if( $validation->getError('mengde') ) {?>
                <div class='alert alert-danger mt-2'>
                    <?= $error = $validation->getError('protein'); ?>
                </div>
                <?php }?>
            </div>
        </div>
    </div>

    <span id="dynamic_field"></span>
    <span id="dynamic_field2"></span>

    <div class="row" style="margin-top:10px;">
        <div class="col-md-12">
            <div class="form-group-sm">
                <button type="button" name="add" id="add" class="btn btn-success addb" value="ing">Legg til Ingrediens</button>
                <button type="button" name="add2" id="add2" class="btn btn-success addb" value="lev">Legg til nivå</button>
                fjern nivå <input type="hidden" name="rem_level" id="rem_level" class="btn btn-danger btn_rem_level" value ="test">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <div class="form-group">
                <label for="instructions">Instruksjoner</label><br>
                <textarea type="text" class="form-control" name="instructions" required>
                    <?php if(NULL !== old('instructions')) echo old('instructions'); ?>
                </textarea>

                <!-- Error -->
                <?php if( $validation->getError('instructions') ) {?>
                <div class='alert alert-danger mt-2'>
                    <?= $error = $validation->getError('instructions'); ?>
                </div>
                <?php }?>
            </div>
        </div>
    </div>
    
    <div class="row">
        <div class="col-md-12"> 
            <button type="submit" class="btn btn-success" name="submit">Lagre</button>
        </div>
        </form>
    </div>
</div>

【问题讨论】:

    标签: javascript arrays forms codeigniter dynamic


    【解决方案1】:

    发现问题。在表单发布后,它试图将数组作为字符串处理。所以只有我在学习处理数组的方法......

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 2020-07-18
      • 2016-06-18
      • 1970-01-01
      • 2016-01-26
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多