【发布时间】: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