添加依赖于无线电选择的隐藏表单属性

时间:2014-01-19 20:44:17

标签: javascript php jquery html forms

我有一个复杂的形式,我试图简化。我有2个订阅选项,6个月和12个月。对于购物车后端,我需要传递隐藏属性(订阅结束日期),这取决于用户选择的持续时间。

即。如果用户选择6个月,那么隐藏的attirbute应该包含此php作为值

有没有人知道如何在没有JS的情况下做到这一点?我不能使用JS,因为我使用的是PHP。

<form action="#" method="post">

<input type="radio" name="name" value="Six Months">Six Months</input>
<input type="radio" name="name" value="Twelve Months">Twelve Months</input>

<!-- add this if Six Months radio is selected
 -->
<input type="hidden" name="sub_enddate" value="<?php echo date('Ymd', strtotime("+12 month +1 day")); ?>"></input>

<!-- add this if Six Months radio is selected
 -->
<input type="hidden" name="sub_enddate" value="<?php echo date('Ymd', strtotime("+6 month +1 day")); ?>"></input>

</form>

http://jsfiddle.net/cNKkQ/

3 个答案:

答案 0 :(得分:0)

如果您不想使用JavaScript,则必须提交两次表单。所以:

<form action="#" method="post">

<input type="radio" name="subscriptionLength" value="Six Months">Six Months</input>
<input type="radio" name="subscriptionLength" value="Twelve Months">Twelve Months</input>

<?php
if ($_POST['subscriptionLength'] == "Six Months") {
    echo "<input type=\"hidden\" name=\"sub_enddate\" value=\"".date('Ymd', strtotime("+6 month +1 day"))."\"></input>";
} elseif ($_POST['subscriptionLength'] == "Twelve Months") {
    echo "<input type=\"hidden\" name=\"sub_enddate\" value=\"".date('Ymd', strtotime("+12 month +1 day"))."\"></input>";
}
?> 

</form>

然后你必须添加一个字段来确定他们是第一次还是第二次提交。

答案 1 :(得分:0)

  

没有JS 。但是你需要在这里使用JS。

// Index.php

<?php
    session_start();

    if ( (strtolower($_SERVER['REQUEST_METHOD']) == 'post') && !empty($_POST['radio_month']) ){

        $sub_enddate = ($_POST['radio_month']== "Six Months" ) ? $_POST['sub_enddate_6'] : $_POST['sub_enddate_12'];
        /*
         TODO Choose

         $_SESSION['sub_enddate'] = $sub_enddate;
          or

         $_COOKIE['sub_enddate'] = $sub_enddate;
          or 

         $QUERY_STRING ='';
         $QUERY_STRING = '?'.http_bulid_query(array('sub_enddate'=>$sub_enddate));

        */
        header("Location:action.php".$QUERY_STRING);
    }
?>   


<form action="#" method="post">

 <input type="radio" name="radio_month" value="Six Months">Six Months</input>
 <input type="radio" name="radio_month" value="Twelve Months">Twelve Months</input>

 <input type="hidden" name="sub_enddate_12" value="<?php echo date('Ymd', strtotime("+12 month +1 day")); ?>"></input>

 <input type="hidden" name="sub_enddate_6" value="<?php echo date('Ymd', strtotime("+6 month +1 day")); ?>"></input>

 <input type="submit" value="Submit" />     

 </form>

action.php的

session_start();

// choosen by "passing" type

$sub_enddate  = $_SESSION['sub_enddate'];
// or 
$sub_enddate  = $_COOKIE['sub_enddate']; 
// or 
$sub_enddate  = $_GET['sub_enddate'];  

答案 2 :(得分:0)

为什么不只是

<input type="radio" name="name" value="<?php echo date('Ymd', strtotime("+6 month +1 day")); ?>">Six Months</input>
<input type="radio" name="name" value="<?php echo date('Ymd', strtotime("+12 month +1 day")); ?>">Twelve Months</input>

使用JS而不使用客户端时间

window.onload=function() {
  var vals = ['<?php echo date('Ymd', strtotime("+6 month +1 day")); ?>',
     '<?php echo date('Ymd', strtotime("+12 month +1 day")); ?>']
  document.getElementById("form1").onsubmit=function() {
    this.sub_enddate.value=vals[this.elements["name"][0].checked?0:1]
  }
}

使用此HTML

<form id="form1" action="#" method="post">
  <input type="radio" name="name" value="Six Months">Six Months</input>
  <input type="radio" name="name" value="Twelve Months">Twelve Months</input>
  <input type="hidden" name="sub_enddate" value=""></input>
</form>