如何从PHP获取特定的无线电值

时间:2014-10-12 11:50:42

标签: javascript php html

我的“谢谢”页面上的单选按钮没有得到正确的值。

我希望在我的用户结束付款后,他会被重定向到感谢页面,填写表格中的一些值会在那里发布。我在form.php文件中使用此脚本存档:

<script type="text/javascript">

function CookieTheFormValues() {
var cookievalue = new Array();
var fid = document.getElementById(FormID);
for (i = 0; i < fid.length; i++)
{
   var n = escape(fid[i].name);
   if( ! n.length ) { continue; }
   var v = escape(fid[i].value);
   cookievalue.push( n + '=' + v );
}
var exp = "";
if(CookieDays > 0)
{
   var now = new Date();
   now.setTime( now.getTime() + parseInt(CookieDays * 24 * 60 * 60 * 1000) );
   exp = '; expires=' + now.toGMTString();
}
document.cookie = CookieName + '=' + cookievalue.join("&") + '; path=/' + exp;
return true;
}
</script>

而不是将此脚本放在感谢页面上:

<?php
$CookieName = "PersonalizationCookie";
$Personal = array();
foreach( explode("&",@$_COOKIE[$CookieName]) as $chunk )
{
   list($name,$value) = explode("=",$chunk,2);
   $Personal[$name] = htmlspecialchars($value);
}
?>

到目前为止,我从其他输入中得到了所有正确的值,但是从无线电我总是得到类名值的最后一个?这意味着,例如,如果我有这个代码:

 <input type="radio" name="emotion" id="basi" value="Basic Pack"    />

  <input type="radio" name="emotion" id="deli"  value="Deluxe Pack" />

 <input type="radio" name="emotion" id="premi"  value="Premium Pack"/>

在感谢页面中,我将此代码用于例如

Thank you for chosing <?php echo(@$Personal["emotion"]); ?> 

即使我检查基本或豪华收音机为什么会这样,我总是得到这个Thank you for choosing Premium Pack

1 个答案:

答案 0 :(得分:1)

你的循环:

for (i = 0; i < fid.length; i++)
{
   var n = escape(fid[i].name);
   if( ! n.length ) { continue; }
   var v = escape(fid[i].value);
   cookievalue.push( n + '=' + v );
}

将所有三个无线电都推送到您的cookie值。每个都会覆盖前一个,因为它们具有相同的名称。因此,最终您将“Premium Pack”的值映射到“情感”名称。您需要检查是否在推动val之前选择了收音机,可能类似于:

for (i = 0; i < fid.length; i++)
{
   var n = escape(fid[i].name);
   if( ! n.length ) { continue; }
   var v = escape(fid[i].value);
   // Only push in the selected emotion radio button
   if (n == "emotion") {
       if (fid[i].checked == true) cookievalue.push( n + '=' + v );
   }
   else cookievalue.push( n + '=' + v );
}