在服务器端验证后重定向整个表单

时间:2016-06-05 02:01:35

标签: php forms laravel cross-domain

所以我有一个包含客户端和服务器端验证的表单,但服务器端更重要,因为我们有像csrf保护这样的东西。表格必须首先来到我们的服务器,然后前往第二台服务器。

我需要能够将表​​单提交到我的服务器,运行我的验证,然后如果通过,则将整个表单发送到另一个页面。 - 我的意思是表单的action属性,所有字段,所有内容。它应该表现为表单的原始操作是重定向域。

这可能是curl,或者我可以从原始值动态创建一个新表单,并使用POST标题将其发送到另一个域吗?

应该提到:我没有访问其他服务器,它是第三方。

2 个答案:

答案 0 :(得分:0)

您可以在同一页面中进行验证,然后将其插入数据库并将当前页面重定向到另一页并检索数据,例如:

if(isset($_POST)){
    // here you assign variables to the post values like:
    $name = $_POST['name'];

    //then you run your validation from the database
    // assuming $con to be your db connection variable
    $query = mysqli_query($con, "SELECT * FROM table WHERE (blah blah blah)");
    if(mysqli_num_row ==1){
        if(mysqli_query($con, " INSERT INTO table VALUES(blah blah blah)")){
            //then you use the header to redirect the page to the next page
            header(location: 'path/to/page');
        }
    }
}

答案 1 :(得分:-1)

您可以使用其他页面上的Cookie或会话传递变量并使用它们。 假设您的表单名称是 FIRST_FORM_VALIDATE,这是在FIRST_FORM_PAGE页上。

现在在FIRST_FORM_PAGE上获取用户输入,并使用POST方法将此数据发送到FIRST_FORM_VALIDATE。如果数据正确,您可以在服务器上验证数据,将所有输入存储在会话变量中,如下所示 -

session_start();
$_SESSION['form_input1']=$_POST['form_input1'];

依此类推,存储所有变量。现在,您可以在另一个页面上使用这些变量来验证这些变量。完成验证后,销毁会话变量。

编辑 - 如果您要将数据发送到另一台服务器并希望阻止CSRF,那么最好的方法是将这些数据存储在临时数据库中,然后使用远程数据库连接在另一台服务器上访问它。