美好的一天! 我目前在使用复选框和隐藏字段插入值时遇到问题。任何提示或解决方案都将不胜感激。
所以我的问题是这样的:我有一个仅带有复选框和一个提交按钮的表单,如果我在复选框中选中一个值,则将显示一个隐藏的上载字段,该隐藏的值必须连接到所选值在复选框中。如何将隐藏值插入数据库中相应的复选框值。例如
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在数据库中为空。此刻我真的迷路了。在其他地方找不到解决方案。
我看到了一种模式,当我跳过一个复选框时,如检查value1,然后跳过value2,然后检查value3。未插入value3隐藏。仍未解决:(大声笑,这使我发疯。濒临退出。大声笑
答案 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>
在将值插入数据库时,我很难给出一个简洁的答案,因为我在您的应用程序上没有任何调试信息,所以我不知道您是否构造了结构它正确。我假设您有一个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_,因此不妨利用它。