【问题标题】:get hidden value of the currently selected radio button获取当前选中单选按钮的隐藏值
【发布时间】:2014-06-27 17:33:40
【问题描述】:

我有一个带有来自 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 的值 ->“这不是正确的值,必须是 5”。 every 和 any 选择 radio ,并在 page -> 3 上传递 hidden 的第一个值 ,当我将隐藏输入更改为无线电输入并选择它时,传递正确的值没有任何问题...... 所以当输入被隐藏时会发生这个问题..为什么?和解决方案?

【问题讨论】:

  • 问题是隐藏字段同名
  • 是的,这就是我的想法,我尝试将 name="point" 更改为 name="point[]" ,但不起作用
  • 可能是另一个原因:传递正确的收音机值,因为我选择了它,但隐藏了我没有选择它..我想通过收音机自动获取它
  • 是的,你是对的,但你必须使用数组或使用某些条件
  • 如果它来自mysql查询,为什么不在提交单选后检查关联点?您实际上并不需要 php 端的“点”的隐藏输入,您检查来自您的参数的无线电并选择它的关联点。这样你也可以防止一些 html 注入

标签: php html forms


【解决方案1】:

无线电输入共享一个名称以定义组。

隐藏的输入不能共享名称,因为它们是谨慎的实体。

我建议将$awardid 附加到隐藏输入的名称。

<input type="hidden" name="point<?php echo $awardid; ?>" value="<?php echo $point ; ?>" />

然后,您可以根据选定的单选按钮获取该特定输入的值。

$radio = $_POST['radio'];
$point = $_POST['point'.$radio];

【讨论】:

    【解决方案2】:

    相同输入类型的所有表单元素共享相同的名称。表单元素的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()等事件监听器拦截表单提交,然后在允许表单提交通过之前禁用您不想提交的输入字段。

    【讨论】:

      【解决方案3】:

      您可以将point 重命名为point[radio buttons value]

      这样当您将点请求为数组时,您可以从中获取值,类似于 @$_REQUEST["point"][@$_REQUEST["radio"]];

      【讨论】:

        【解决方案4】:

        正如在 cmets 上所讨论的那样。我会展示我的方法。

        正如您提到的,您有一个 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" />
        

        然后提交。由于您不会检查,因此该点的值不会是正确的。

        【讨论】:

          猜你喜欢
          • 2015-12-16
          • 2018-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多