Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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
javascript、php和mysql的动态表单字段:奇怪的错误_Javascript_Php_Jquery_Mysql_Dynamic Forms - Fatal编程技术网

javascript、php和mysql的动态表单字段:奇怪的错误

javascript、php和mysql的动态表单字段:奇怪的错误,javascript,php,jquery,mysql,dynamic-forms,Javascript,Php,Jquery,Mysql,Dynamic Forms,我的动态表单字段脚本出现了一个非常奇怪的错误。解释起来并不容易,但我会尽力的 我有一个带有java脚本的HTML表单要添加 1选择字段 2个文本字段& 9个复选框 通过单击一个链接来动态地创建 每个动态表单集在mysqldb中创建一个自己的条目 “一个选择”字段和“两个文本”字段正确插入数据到my db中 但是有了9个复选框,就出现了一个错误 例如:如果我创建了两个表单集,并选中了“每个第一个”复选框,则数据库条目正确无误 但是 如果我创建了两个表单集,并且我将在第一个表单集复选框1和第二个表单

我的动态表单字段脚本出现了一个非常奇怪的错误。解释起来并不容易,但我会尽力的

我有一个带有java脚本的HTML表单要添加

1选择字段 2个文本字段& 9个复选框 通过单击一个链接来动态地创建

每个动态表单集在mysqldb中创建一个自己的条目

“一个选择”字段和“两个文本”字段正确插入数据到my db中

但是有了9个复选框,就出现了一个错误

例如:如果我创建了两个表单集,并选中了“每个第一个”复选框,则数据库条目正确无误

但是

如果我创建了两个表单集,并且我将在第一个表单集复选框1和第二个表单集复选框2上进行检查,我的db条目将在第一个表单集中写入第一个和第二个复选框条目!!!数据库条目。第二个db条目中没有第二个复选框条目

也许我的截图会让你更容易理解

这是我的剧本。我真的希望有人能帮助我。我一直在寻找解决方案,但是

<?php
include('dbconnection.php');
?>

<!DOCTYPE HTML>
<head>
<script type="text/javascript" src="theme/scripts/jquery.js"></script>
<script type="text/javascript" src="theme/scripts/jqueryui.js"></script>


<script type="text/javascript">
var counter = 0;
$(function(){
 $('p#add_field').click(function(){
 counter += 1;
 $('#container').append(
   '<strong>Artikel ' + counter + '</strong><br />'

 + '<select name="artikel[]' + '">'
 + '<option value="test1">' + 'test1' + '</option>'
 + '<option value="test2">' + 'test2' + '</option>'
 + '</select><br /><br />'

 + '<b>Beschreibung oder Anzahl:</b><br>'
 + '<input name="beschreibung[]' + '" type="text" class="login-username" /><br />'

 + '<b>Preis in €:</b><br>'
 + '<input id="preis_' + counter + '" name="preis[]' + '" type="text" class="login-username" /><br />'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Aus-/Einbau<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Aus und Einbauarbeiten<br>" id="1a_' + counter + '" name="ausein[]' + '" />'
 + '<label for="1a_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Instandsetzung<br>'
 + '<div class="roundedTwo">'
 + '<input type="checkbox" value="Teil instand gesetzt<br>" id="2b_' + counter + '" name="instand[]' + '" />'
 + '<label for="2b_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Teillack<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Teillackierung<br>" id="3c_' + counter + '" name="rep[]' + '" />'
 + '<label for="3c_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Farbangleich<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Farbtonangleichung<br>" id="4d_' + counter + '" name="farb[]' + '" />'
 + '<label for="4d_' + counter + '"></label>'
 + '</div>'
 + '</span>'


// + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Neuteil<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Neuteil wurde verbaut<br>" id="5e_' + counter + '" name="neu[]' + '" />'
 + '<label for="5e_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Beilack.<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Beilackierung<br>" id="6f_' + counter + '" name="spot[]' + '" />'
 + '<label for="6f_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Finisch<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Finischarbeit<br>" id="7g_' + counter + '" name="finisch[]' + '" />'
 + '<label for="7g_' + counter + '"></label>'
 + '</div>'
 + '</span>'


 + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Delle Rep.<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value=" Dellen instand gesetzt<br>" id="8h_' + counter + '" name="delle[]' + '" />'
 + '<label for="8h_' + counter + '"></label>'
 + '</div>'
 + '</span>'


// + '<div style="float: left; width: 20px;">&nbsp;</div>'

 + '<span style="float: left; width: 70px; text-align: center;">'
 + 'Lederrep.<br>'
 + '<div class="roundedTwo">'   
 + '<input type="checkbox" value="Lederreparatur<br>" id="9i_' + counter + '" name="leder[]' + '" />'
 + '<label for="9i_' + counter + '"></label>'
 + '</div>'
 + '</span>'

 + '<div class="decoration"></div>'

 + '<input id="renr_' + counter + '" name="renr[]' + '" type="hidden" value="' + '<?php echo $renr ?>' + '" />'
 + '<input id="datum_' + counter + '" name="datum[]' + '" type="hidden" value="' + '<?php echo $datum ?>' + '" />'
 + '<input id="jahr_' + counter + '" name="jahr[]' + '" type="hidden" value="' + '<?php echo $jahr ?>' + '" />'
 + '<input id="id1_' + counter + '" name="id1[]' + '" type="hidden" value="' + '<?php echo $id1 ?>' + '" />'

     );
   });
 });
</script>

</head>

<body>

<?php

$id = $_GET['id'];
if (isset($_POST['submit_val'])) {

    if ($_POST['artikel']) {

    $post_count = count($_POST['artikel']);

        for ($i=0;$i<$post_count;$i++) {

            $values1 = mysql_real_escape_string($_POST['artikel'][$i]);
            $values2 = mysql_real_escape_string($_POST['preis'][$i]);
            $values3 = mysql_real_escape_string($_POST['beschreibung'][$i]);
            $values4 = mysql_real_escape_string($_POST['ausein'][$i]);
            $values5 = mysql_real_escape_string($_POST['instand'][$i]);
            $values6 = mysql_real_escape_string($_POST['rep'][$i]);
            $values7 = mysql_real_escape_string($_POST['farb'][$i]);
            $values8 = mysql_real_escape_string($_POST['neu'][$i]);
            $values9 = mysql_real_escape_string($_POST['spot'][$i]);
            $values10 = mysql_real_escape_string($_POST['finisch'][$i]);
            $values14 = mysql_real_escape_string($_POST['delle'][$i]);
            $values15 = mysql_real_escape_string($_POST['leder'][$i]);
            $values11 = mysql_real_escape_string($_POST['datum'][$i]);
            $values12 = mysql_real_escape_string($_POST['jahr'][$i]);
            $values13 = mysql_real_escape_string($_POST['renr'][$i]);
            $values16 = mysql_real_escape_string($_POST['id1'][$i]);

            $query = mysql_query("INSERT INTO rechnung (artikel,preis,beschreibung,ausein,instand,rep,farb,neu,spot,finisch,delle,leder,datum,jahr,renr,kd) VALUES ('$values1', '$values2', '$values3', '$values4', '$values5', '$values6', '$values7', '$values8', '$values9', '$values10', '$values14', '$values15', '$values11', '$values12', '$values13', '$values16')", $conid );  

        }
    }

    echo "<h3><strong>" . count($_POST['artikel']) . "</strong> Artikel hinzugefügt</h3>";
    //mysql_close();
}
?>

<?php if (!isset($_POST['submit_val'])) { ?>

 <form method="post" action="?id=<?php echo $id; ?>">

 <div id="container">
 <div id="neu"><p id="add_field"><a href="#"><img src="plus.png" width="30px"><b>Artikel hinzufügen</b></a></p></div>
 <div class='decoration'></div>
 </div>
 <input type="submit" name="submit_val" value="Weiter zu Fahrzeugdaten" class="button button-blue"/>
 </form>                

<?php } ?>

</body>

该问题是由复选框的名称引起的

无论tgeir类型:controlname[],都使用相同的逻辑为所有表单控件指定名称。是的,由于最后的[],php将把这些参数解释为数组。到目前为止,一切顺利

但是,在html中,如果未选中复选框,则该复选框不是成功的控件,因此不会将其提交到服务器

如果在第一条记录中未选中第二个复选框,则空vslue将不会发送到服务器。如果随后在第二条记录中选中第二个复选框,则它将是提交值中第二个复选框顺序的第一个值

如果您使用print\u r在php代码中打印$\u POST,则更容易描述这一点


解决方案是在复选框的名称中包含一个索引,以指示它们属于哪个记录。因此,不要使用ausein[]作为名称,而是使用ausein[0]、ausein[1]等作为名称。

来自@Shadow的解决方案非常有用。 但是我必须设置默认计数

var counter = 0;


这就解决了我的问题。

我在[此处]的复选框名称中包含了一个索引。但这不是正确的解决方案。我收到另一个错误-第一个db条目没有复选框值。第二个条目是第一个复选框值,第三个条目是第二个复选框值,依此类推。。。还有什么想法吗?索引应该从0开始,我更新了我的响应以反映这一点。或者只移动计数器+=1;到事件处理程序的末尾。
var counter = -1;