HTML和Javascript在POST表单值之前修改

时间:2014-06-29 23:55:18

标签: javascript html forms dynamic paypal

大家好。

很抱歉,如果这个问题看起来很愚蠢,我使用Javascript / HTML时相当新...

我面临Paypal集成的问题。我以前做过,但只有一个独特的价格比我的新需求更简单。

现在我必须计算一个取决于用户输入的价格(选择选项1/2/3 /等......)。

所以我尝试修改表单的数据,然后再发送给PayPal。

这是一些代码: 表格:

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target='_new' id='paypalForm'>
<input name="submit" type="image" src="paypal__secure_logo.jpg" alt="PayPal Secured Paiement" align="middle" border="0"  onClick="compute()" />
                      <!---  <input type='hidden' value="3" name="amount" id= "000" /> --->
                        <input type="radio" name="custom" value="60"  >One Hour<br>
<input type="radio" name="custom" value="1400">1 Day<br>
<input type="radio" name="custom" value="10800">1 Week<br>
                        <input name="currency_code" type="hidden" value="<?php echo "EUR"; ?>" />
                        <input name="shipping" type="hidden" value="<?php echo "00.00"; ?>" />
                        <input name="tax" type="hidden" value="00.20" />
                        <input name="return" type="hidden" value="<?php echo "http://www.web.com/login.php"; ?>" />
                        <input name="cancel_return" type="hidden" value="<?php echo "http://www.web.com/cancel.php"; ?>" />
                        <input name="notify_url" type="hidden" value="<?php echo "http://www.web.com/ipn.php"; ?>" />
                        <input name="cmd" type="hidden" value="_xclick" />
                        <input name="business" type="hidden" value="<?php echo "XXXXXXXXXXX"; ?>" />
                        <input name="item_name" type="hidden" value="camp" />
                        <input name="no_note" type="hidden" value="1" />
                        <input name="lc" type="hidden" value="EN" />
                        <input name="bn" type="hidden" value="PP-BuyNowBF" />
</form>

和javascript部分:

    <script >
    function compute(){
    var formToSubmit = document.getElementsByName('paypalForm');    
    var radios = document.getElementsByName('custom');
    var price = 0;


for (var i = 0, length = radios.length; i < length; i++) { 
        if (radios[i].checked) {
            if (radios[i] = "60"){
            ///document.getElementsByName("amount").value = "4";
            price = "4";
            ///alert(document.getElementsByName("amount").value);
            }else if (radios[i] = "1400"){
                price = "10";
            ///document.getElementsByName("amount").value = "10";
            }else if (radios[i] = "10800"){
            ///document.getElementsByName("amount").value = "25";
            price = "25";
            }
            alert('Submitted')
            formToSubmit.append('<input type="hidden" name="amount" value="'+price+'" />');
            formToSubmit.submit();
            // only one radio can be logically checked, don't check the rest
            break;
        }
    }
    };
    </script>

我确实看到 javascript已执行,因为已显示已注释的提醒。

但我无法获得更新金额(我尝试先使用“document.getElementsByName(”amount“)更新金额.value =”25“;”在尝试添加之前整个表单元素通过javascript与“formToSubmit.append('

使用“document.getElementsByName(”amount“)。value =”25“;”价格显然已经改变,因为我在警告对话框中看到它,但是对于PayPal的POST数据表示没有采用新的变量集。

无论如何,如果您对保证PayPal表格有任何建议,我会采取,因为我担心有人可能会更改POST变量来改变价格,例如或任何类似的攻击,现在我只是计划检查paypal返回的自定义值,如果发现差异,请不要提供产品(并邮寄给用户)。

我已经看到有关于贝宝和表格的其他问题,但是尽管工作了很长时间,我仍然没有让它发挥作用。

感谢您阅读我,问候。

[编辑] 另一种解决方案是使用HTML的选项输入:

                <select single="single" name="amount">
                      <option value="1">1 Heure - 1 Hour -> 1€</option>
                      <option value="2">2 Heures - 2 Hours -> 2€</option>
                      <option value="4">4 Heures - 4 Hours -> 4€</option>
                      <option value="10">1 Jour - 1 Day -> 10€</option>
                      <option value="15">2 Jours - 2 Days -> 15€</option>
                      <option value="25">1 Semaine - 1 Week -> 25€</option>
                    </select>

对于税务计算,使用taxe_rate(百分比)而不是税:

<input name="tax_rate" type="hidden" value="20" />

而不是:

<input name="tax" type="hidden" value="20" />

并且

for (var i = 0; i < radios.length; i++)

而不是:

for (var i = 0, length = radios.length; i < length; i++)

问候!

2 个答案:

答案 0 :(得分:2)

你在循环中休息一下:

// only one radio can be logically checked, don't check the rest
break;

我认为这不会起作用。如果用户点击第二个单选按钮;代码运行;只检查循环中的第一个单选按钮;然后代码停止。代码永远不会检查第二个单选按钮。您需要删除break;

或者给每个单选按钮一个唯一的ID,并使用三个If,Then,else语句来检查按钮。

我看到三个单选按钮:

<input type="radio" name="custom" value="60"  >One Hour<br>
<input type="radio" name="custom" value="1400">1 Day<br>
<input type="radio" name="custom" value="10800">1 Week<br>

他们都有相同的名字。这意味着,要获取所有值,您需要获取该名称的所有元素,并循环遍历数组,检查数组中的每个元素。如果其中一个元素具有值,那么此时您可以中断。现在,代码在第一次迭代时中断。您的代码应如下所示:

if (radios[i] = "60") {
  ///document.getElementsByName("amount").value = "4";
  price = "4";
  ///alert(document.getElementsByName("amount").value);
  break;
} else if (radios[i] = "1400") {
  price = "10";
  ///document.getElementsByName("amount").value = "10";
  break;
} else if (radios[i] = "10800") {
  ///document.getElementsByName("amount").value = "25";
  price = "25";
  break;
}

在每个IF检查中放置break;,不在IF检查之外。

另一种方法是不使用任何for循环,并为每个INPUT元素赋予一个id。

<input type="radio" id="idOneHrBttn" value="60"  >One Hour<br>
<input type="radio" id="idOneDayBttn value="1400">1 Day<br>
<input type="radio" id="idOneWeekBttn value="10800">1 Week<br>

然后明确检查每个ID:

if (document.getElementsById("idOneHrBttn").checked) {
  price = "4";
  ///alert(document.getElementsById("amount").value);
} else if (document.getElementsById("idOneDayBttn").checked) {
  price = "10";
  ///document.getElementsById("amount").value = "10";
} else if (document.getElementsById("idOneWeekBttn").checked) {
  ///document.getElementsById("amount").value = "25";
  price = "25";
}

这样,您不需要循环。

答案 1 :(得分:1)

您的循环条件是否正确配置?:

for (var i = 0, length = radios.length; i < length; i++) {

i = 0之后应该有一个分号:

for (var i = 0;

不应该看起来像这样吗?:

for (var i = 0; i < radios.length; i++) {

看起来你试图在变量部分声明两个变量。我不确定这是否有效。