使用隐藏的字段和复选框将值插入数据库

时间:2018-09-30 10:07:49

标签: php html

美好的一天! 我目前在使用复选框和隐藏字段插入值时遇到问题。任何提示或解决方案都将不胜感激。

所以我的问题是这样的:我有一个仅带有复选框和一个提交按钮的表单,如果我在复选框中选中一个值,则将显示一个隐藏的上载字段,该隐藏的值必须连接到所选值在复选框中。如何将隐藏值插入数据库中相应的复选框值。例如

HTML:

<label class="form-check-label">
  <input class="form-check-input" name="value[]" type="checkbox" value="Venue">
  Value 1
  <div id="hidden_fields">
    This is hidden: <input type="text" id="hidden_one" name="hidden_one[]">
  </div>
</label>
<br>
<label class="form-check-label">
  <input class="form-check-input" name="value[]" type="checkbox" value="Venue">
Value 2
  <div id="hidden_fields">
    This is hidden: <input type="text" id="hidden_one" name="hidden_one[]">
  </div>
</label>
<br>

PHP :(已更新)这是我现在拥有的。当我不选中第一复选框时。第二个复选框中的hidden_​​one没有插入

foreach($_POST['value'] as $key=>$value ){
  $hidden_one = $_POST["hidden_one"][$key];
    $sql = "INSERT INTO sample (value, hidden_one) VALUES ('$value','$hidden_one')";
    $result = mysqli_query($connection, $sql);

}

如果我检查值1并以隐藏形式输入了sample1,而我检查了值2并以隐藏形式输入了sample2。样本1必须与值1在同一列中,样本2必须与值2在同一列中。不能正确插入

更新: 所以我将代码更改为 foreach($_POST['value'] as $key=>$value ){ $hidden_one = $_POST["hidden_one"][$key];  但问题是有时无法正确插入。有时hidden_​​one在数据库中为空。此刻我真的迷路了。在其他地方找不到解决方案。

This is my updated form

我看到了一种模式,当我跳过一个复选框时,如检查value1,然后跳过value2,然后检查value3。未插入value3隐藏。仍未解决:(大声笑,这使我发疯。濒临退出。大声笑

1 个答案:

答案 0 :(得分:0)

将复选框的值插入到隐藏的输入字段中的一种方法是,使click函数具有$(this).val(),即您的被单击元素的值。然后,您可以将该值放入变量中。然后,将目标 parent 元素/容器作为目标复选框,并找到相应的输入字段。然后,您只需使用复选框的声明值设置该输入字段的值即可。

请注意,此JavaScript的符号位于jQuery中,并且您需要包括一个jQuery库,以便该解决方案能够正常工作。

$(document).ready(function () { 
    $('[name="value[]"]').click(function(){
        var mySelect=$(this).val();

        if( $(this).prop('checked') ) {
            $(this).parent().find('input[name="hidden_one[]"]').val(mySelect);
        }
        else {
            $(this).parent().find('input[name="hidden_one[]"]').val("");
        }
    })
});

示例:

$(document).ready(function () {	
	$('[name="value[]"]').click(function(){
		var mySelect=$(this).val();
		
		if( $(this).prop('checked') ) {
			$(this).parent().find('input[name="hidden_one[]"]').val(mySelect);
		}
		else {
			$(this).parent().find('input[name="hidden_one[]"]').val("");
		}
	})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="form-check-label">
  <input class="form-check-input" name="value[]" type="checkbox" value="Venue 1">
  Value 1
  <div id="hidden_fields">
    This is hidden: <input type="text" id="hidden_one" name="hidden_one[]">
  </div>
</label>
<br>
<label class="form-check-label">
  <input class="form-check-input" name="value[]" type="checkbox" value="Venue 2">
Value 2
  <div id="hidden_fields">
    This is hidden: <input type="text" id="hidden_one" name="hidden_one[]">
  </div>
</label>
<br>

Direct JS Fiddle link

在将值插入数据库时​​,我很难给出一个简洁的答案,因为我在您的应用程序上没有任何调试信息,所以我不知道您是否构造了结构它正确。我假设您有一个AJAX函数或一个表单操作来发布您的值。正如您在自己的尝试中指出的那样,这些值作为一个数组循环出现,您将必须循环遍历。但是,我不确定嵌套的foreach循环。

如果您需要进一步的帮助,请告诉我,在这种情况下,请用潜在的错误消息,相应的表单/ ajax代码更新您的问题,并且如果您的PHP文件包含其他任何相关信息,也请添加。

一个粗略的例子可能是:

<?php
$hidden_one_array=array_values($_POST['hidden_one']); //our posted array

$i=0; // iterator
$length=count($hidden_one_array); //length of the array

while($i < $length) {
    $sql="INSERT INTO sample (value, hidden_one) VALUES ('$value','$hidden_one_array[$i]')";
    $result=mysqli_query($connection, $sql);

    $i++;
}
?>

我们在这里所做的基本上是遍历整个数组,使用迭代器值作为指向每个要插入数据库的数组索引的索引指针。

还请注意,您可能应该研究准备好的语句以防止sql注入。您已经在使用mysqli_,因此不妨利用它。