【问题标题】:how to validate a form that uses 'action' by php server-side如何通过php服务器端验证使用“动作”的表单
【发布时间】:2014-12-28 08:45:56
【问题描述】:

我使用这个 from 向“2co”提交一些信息作为付款方式,其中一些信息我需要通过 PHP 服务器端进行验证,同时通过邮件向管理员发送通知,告诉他有人已经付款了。

现在这是表格。

<form method="post" action="https://sandbox.2checkout.com/checkout/purchase">
                            <div class="body">

                                <div class="half f_right">
                                    <label for="card_holder_name" class="width_100per"><span class="fontRed2">*</span>card_holder_name
                                        </label>
                                    <input type="text" name="card_holder_name" id="card_holder_name"
                                           class="form_textarea_rec"/>
                                </div>

                                <div class="half">
                                    <label for="country" class="width_100per"><span class="fontRed2">*</span>country</label>
                                    <select name="country" id="country" class="form_select_rec">
                                        <option value="EGY" title="Egypt">Egypt</option>
                                        <option value="SaudiArabia" title="saudi Arabia">Any other</option>
                                    </select>
                                </div>

                                <div class="half">
                                    <label for="street_address" class="width_100per"><span class="fontRed2">* </span>street_address </label>
                                    <textarea name="street_address" id="street_address"
                                              class="form_textarea_rec height_50px"></textarea>
                                </div>


                                <div class="half">
                                    <label for="street_address2" class="width_100per"> address2</label>
                                    <textarea name="street_address2" id="street_address2"
                                              class="form_textarea_rec height_50px"></textarea>
                                </div>


                                <div class="half f_right">
                                    <label for="city" class="width_100per"><span class="fontRed2">* city</span>
                                        </label>
                                    <input id="city" type="text" name="city" class="form_textarea_rec"/>
                                </div>


                                <div class="half f_right">
                                    <label for="state" class="width_100per"><span class="fontRed2">*</span>
                                        States</label>
                                    <input id="state" type="text" name="state" class="form_textarea_rec"/>
                                </div>


                                <div class="half">
                                    <label for="email" class="width_100per"> <span class="fontRed2">*</span>Email</label>
                                    <input id="email" type="text" name="email" class="form_textarea_rec"/>
                                </div>


                                <div class="half">
                                    <label for="zip" class="width_100per"> <span class="fontRed2">*</span>Zip</label>
                                    <input id="zip" type="text" name="zip" class="form_textarea_rec"/>
                                </div>

                                <div class="half">
                                    <label for="phone" class="width_100per"> <span class="fontRed2">*</span>
                                        Phone</label>
                                    <input id="phone" type="text" name="phone" class="form_textarea_rec"/>
                                </div>
                            </div>

                            <?php
                            $fullName = @$_POST['card_holder_name'];
                            ?>
                            <input type='hidden' name='sid' value='*****'/>
                            <input type='hidden' name='mode' value='2CO'/>
                            <input type='hidden' name='li_0_type' value='product'/>
                            <input type='hidden' name='li_0_name' value='<?php echo $planName ?> '/>
                            <input type='hidden' name='li_0_price' value='<?php echo $planPrice ?> '/>
                            <input type='hidden' name='card_holder_name' value='<?php echo $fullName ?>'/>
                            <input type='hidden' name='street_address' value='<?php @$_POST['street_address']; ?>'/>
                            <input type='hidden' name='street_address2' value='<?php @$_POST['street_address2']; ?>'/>
                            <input type='hidden' name='city' value='<?php @$_POST['city']; ?>'/>
                            <input type='hidden' name='state' value='<?php @$_POST['state']; ?>'/>
                            <input type='hidden' name='zip' value='<?php @$_POST['zip']; ?>'/>
                            <input type='hidden' name='country' value='<?php @$_POST['country']; ?>'/>
                            <input type='hidden' name='email' value='<?php @$_POST['email']; ?>'/>

                            <div class="footer">
                                <input name="submit" type="submit" value="Continue" class="s_btn"/>
                            </div>
                        </form>

现在我需要验证此字段并发送表单,我需要向管理员发送备注

我知道让它变成这样

<?php
if(isset($_POST['submit'])){
//remove the action from the form
//write the validation here ...
//and then send the mail 

//but how to post all this in the end to '2co'??
}
?>

【问题讨论】:

    标签: php forms validation


    【解决方案1】:

    您最终可以使用 curl 将其发布到 2co http://php.net/manual/en/book.curl.php

    发送邮件就像使用邮件功能http://php.net/manual/en/function.mail.php一样简单

    <?php
    if(isset($_POST['submit'])){
       //Do validation
       //send mail
       //post to 2co via curl 
    
    
    }
    ?>
    

    正如在这个问题中所说,有非卷曲的方法可以做到这一点How do I send a POST request with PHP?

    【讨论】:

    【解决方案2】:

    你问错问题了,你应该问“如何使用 php 将数据发布到另一台服务器?” 这里有很多答案:

    How do I send a POST request with PHP?

    http://www.lornajane.net/posts/2010/three-ways-to-make-a-post-request-from-php

    【讨论】:

      【解决方案3】:

      您需要在页面加载事件上通过 JavaScript 来完成。

      你需要做的改变:

      1. 如您所说,将操作更改为相同的 php 页面或不同的并检查 if(isset($_POST['submit'])) 的提交操作。
      2. 验证所有数据,发送邮件,设置 php var $validated=true else false 并设置一些会话变量,您应该验证以确认,来自支付服务器的响应。例如:payment_id、user_id |这些也应该发送到支付网关和网关响应返回,在你的情况下我认为sid
      3. if($validated) echo JavaScript 代码创建一个隐藏的form,所有信息都在隐藏的input 字段中,并在页面加载事件时自动提交表单。
      4. 来自支付服务器的响应,它将出现在您的特定 php 页面上,验证会话/用户信息。

      如果您使用 jquery,自动提交代码将如下所示:

      <head>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
      <!-- if you are not using jQuery and want to then use above code --> 
      
      <?php if($validated) { ?> <script type="text/javascript">
          $(function(){
              var form = $('<form></form>');
              form.attr("method", "post");
              form.attr("action", link);
              form.attr("style","display: none");
      
              var field = $('<input />');
              field.attr("type", "hidden");
              field.attr("name", "post_var1");
              field.attr("value", "val_1");
              form.append(field); //echo values by php <?php echo $value1; ?> like:
      
              var field1 = $('<input />');
              field1.attr("type", "hidden");
              field1.attr("name", "li_0_name");
              field1.attr("value", "<?php echo $planName ?>");
              form.append(field1); 
      
              //do same for all fields
      
              $(document.body).append(form);
              form.submit();
           }
       </script> <?php  } ?>
      

      对于非 jQuery(纯 JavaScript)代码,您可以搜索或询问我将编辑答案。

      【讨论】:

      • @Exlord:我知道。如果 OP 只想将信息发送到2co,那么 cUrl 就可以了。但我认为,它的支付网关集成。 还需要在支付服务器上重定向用户。它只能由 JavaScript 自动完成。 并且仔细地重复我的答案。我正在验证服务器端并在页面加载时提交。如果您禁用 JavaScript 或在客户端更改它,它将不会转到支付服务器,并且无法完成支付,因为它是通过支付网关的密钥加密的。 如果不是,那么你的答案是正确的,我的答案会帮助其他人
      • 我正在尝试处理您的示例,但这里有一些不清楚的地方“在页面加载事件时自动提交表单”,我按照您所说的做了所有事情,但仍然无法正常工作,只是返回表单没有任何动作。你能帮我清除一下吗
      • @YousefAltaf 抱歉迟到了...我给出的代码是 JavaScript 代码,需要在页面加载时运行。 查看逻辑: 用户打开你的页面 'xxx.php' -> 填写表单并提交 -> 操作设置为 'xxx.php' OR '' 所以if(isset($_POST['submit'])){ /*code to validate,email, and set $validated=true; */} 将执行 & 如果验证则 JavaScript代码将回显->'xxx.php'页面再次加载并且它不应该再次显示给用户,因此我们需要JavaScript自动提交->因此通过jQuery的$(); //runs on page load方法在页面加载时运行它。 我认为你的 JavaScript 没有自动运行你在使用 jQuery 吗?
      • 感谢您的提问,我以为您忘记了关于我的一切。是的,我可以使用 jQuery 没问题我已经尝试过,但问题是它在错误时冻结了页面。我现在尝试在提交之前验证字段,但没有运气。
      • @YousefAltaf 您遇到什么错误(页面冻结时)?我没找到你卡在哪里??使用 jquery 会更容易,因为普通的 javascript 代码很复杂。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2018-06-24
      相关资源
      最近更新 更多