我有一个带有来自mysql查询的变量的表单,我从一个表格2的无线电和隐藏输入值传递,没有问题与收音机..但隐藏不传递正确的值,只传递第一个值在页面上找到它。 当我选择当前选择的单选按钮
时,我希望获得2个无线电值并隐藏在一起<input type="radio" name="radio" value="<?php echo $awardid ; ?>" />
<input type="hidden" name="point" value="<? echo $point ; ?>" />
打印后:
<input type="radio" name="radio" value="1">
<input type="hidden" name="point" value="3">
<input type="radio" name="radio" value="2">
<input type="hidden" name="point" value="5">
<input type="radio" name="radio" value="3">
<input type="hidden" name="point" value="8">
elc ...
例如,当我选择第二个无线电时,传递无线电2的正确值并传递隐藏3的值 - > &#34;这不是正确的价值,必须是5&#34; 。 每一个和任何选择收音机,传递它隐藏在页面上的第一个值 - &gt; 3 ,当我将隐藏的输入更改为无线电输入并选择它时,传递正确的值没有任何问题... 所以当隐藏输入时会发生这个问题..为什么?和解决方案?
答案 0 :(得分:1)
无线电输入共享一个名称以定义该组。
隐藏的输入无法共享名称,因为它们是谨慎的实体。
我建议将$awardid
附加到隐藏输入的名称。
<input type="hidden" name="point<?php echo $awardid; ?>" value="<?php echo $point ; ?>" />
然后,您可以根据所选的单选按钮获取该特定输入的值。
$radio = $_POST['radio'];
$point = $_POST['point'.$radio];
答案 1 :(得分:0)
相同输入类型的所有表单元素共享相同的名称。表单元素的name
字段是表单提交中键/值对的键。因此,当您有3个隐藏的输入字段具有name
字段的相同值时,它必须选择一个。请记住,隐藏的输入字段根本不与代码中彼此靠近组织的无线电输入字段相关联。您的浏览器不知道您的点数字段与无线电字段有关。
您的所有输入字段都应具有唯一的名称,例如
<input type="radio" name="radio" value="1">
<input type="hidden" name="point1" value="3">
<input type="radio" name="radio" value="2">
<input type="hidden" name="point2" value="5">
<input type="radio" name="radio" value="3">
<input type="hidden" name="point3" value="8">
然后你可以用
来修改他们的价值观$_POST['radio']
$_POST['point1']
等等。
编辑但是,这确实意味着对于每个表单提交,无论选择哪个无线电输入,每次都会发送每个隐藏字段的数据。要解决此问题,您可以使用事件监听器(例如.submit())拦截前端的表单提交,然后在允许表单提交之前禁用您不希望提交的输入字段。 / p>
答案 2 :(得分:0)
您可以将point
重命名为point[radio buttons value]
因此,当您将point请求为数组时,您可以从中获取此值@$_REQUEST["point"][@$_REQUEST["radio"]];
答案 3 :(得分:0)
正如评论中所讨论的那样。我会展示我的方法。
所以当你提到你有一个mysql查询来创建你的输入(点和无线电)我认为这是这样的:
因为我在php上编程已经有一段时间了,请不要理会语法
$query = "select radio, point from someTable where someconditions_here ";
while( /*there is some row*/ ){
echo "<input type=\"radio\" name=\"radio\" value=\"".$row[radio]."\">";
echo "<input type=\"hidden\" name=\"point\" value=\"".$row[point]."\">";
}
我的建议是你只需打印收音机,提交后再检查与之相关的点,如下所示:
if ( isset($_POST['radio']) ){
$qryToFindPoint = "select point from someTable where sameconditions_here AND radio = " . $_POST['radio'] ;
//do whatever you need here with the selected point
}else{
$query = "select radio, point from someTable where someconditions_here ";
while( /*there is some row*/ ){
echo "<input type=\"radio\" name=\"radio\" value=\"".$row[radio]."\">";
}
}
这只是想法。当然,您应该使用正确的 mysqli 或 PDO 函数来执行查询并避免sql注入。
使用这种方法,您也可以避免使用HTML注入。在你的最终结果中说另一个答案暗示:
<input type="hidden" name="point1" value="4" />
任何人都可以编辑html代码并将此值更改为:
<input type="hidden" name="point1" value="400000" />
然后提交。正如你不会检查的那样,它的值不是正确的。