2016-11-29 37 views
1

我看到另一个人在堆栈溢出中提出这个问题,但我没有从'his post'得到任何明确的答案/想法。我想知道是否有方法通过POST发送表单数据到当前PHP页面addstudio.php来验证输入的数据&如果输入的数据是有效的,它将被重定向到下一个PHP页面getstudio.php发送表单数据使用POST到当前页面和另一个PHP页面在同一时间

将表单数据发送给我用下面的行当前页面: -

<form action = "<?php $_PHP_SELF ?>" method = "post"> 

这是刚刚做验证表单信息,如果窗体是空白,然后显示在消息相同的PHP页面,其代码如下所示。

<?php 
$valid = true; 
$studioIdError = $studioNameError = $studioAddressError = $studioPCodeError = $studioTelNoError = ""; 
if($_SERVER["REQUEST_METHOD"] == "POST"){ 
    if(empty($_POST["studioId"])){ 
     $studioIdError = " *This Field Cannot Be Empty"; 
     $valid = false; 
    } 
    if(empty($_POST["studioName"])){ 
     $studioNameError = " *This Field Cannot Be Empty"; 
     $valid = false; 
    } 
    if(empty($_POST["studioAddress"])){ 
     $studioAddressError = " *This Field Cannot Be Empty"; 
     $valid = false; 
    } 
    if(empty($_POST["studioPCode"])){ 
     $studioPCodeError = " *This Field Cannot Be Empty"; 
     $valid = false; 
    } 
    if(empty($_POST["studioTelNo"])){ 
     $studioTelNoError = " *This Field Cannot Be Empty"; 
     $valid = false; 
    } 
} 
?> 

为了上面的代码,我想知道是否有一种方法,我可以得到getstudio.php页面时$valid = true运行。

我不能使用代码include 'getstudio.php';,因为我想要getstudio.php在单独的页面上运行。

我不能使用代码header("Location:getstudio.php");exit();运行,因为全局数组$_POST[]中的值不会发送到PHP页面,就像直接从窗体调用页面时那样(例如: - <form action = 'getstudio.php' method = 'post'>)。

$valid = true发送存储在$_POST[]阵列中的值到getstudio.php页面时,有没有办法运行getstudio.php页面?

+1

如果要将相同的POST数据发送到两个不同的URL,最好的方法是使用AJAX。检查结果[这里](https://www.google.co.uk/search?q=post+to+two+different+forms)。 –

+0

感谢您的提示。我对AJAX一无所知,因为我仍然对此感到陌生。我会研究更多,并找出如何做到这一点。 –

回答

0

这里是你的当前页面

<?php 
$_POST["studioName"] = 'testdata'; 
$valid = true; 

if(empty($_POST["studioName"])){ 
    $studioNameError = " *This Field Cannot Be Empty"; 
    $valid = false; 
} 

// send data to getstudio.php if valid 
if($valid){ ?> 
    <form method="post" action="getstudio.php" id="senddata"> 
     <input type="hidden" name="postdata" value="<?php print_r($_POST); ?>"> 
    </form> 
<script> 
    document.getElementById("senddata").submit(); 
</script> 
<?php } ?> 

这里是你的getstudio 。php文件接收已验证的发布数据

<?php 
    echo '<pre>'; 

    print_r($_POST['postdata']); 

    die; 
+0

您提供的代码有效,保留另一个隐藏表单,并将原始值输入到隐藏表单中,然后通过'action =“getstudio.php”'传递隐藏表单。 –

+0

我刚刚通过表单提交,在隐藏字段中传递了所有发布数据的数组。您也可以使用SESSION将数据发送到另一页:) –

2

您有几个选项。

  1. 使用AJAX验证表单;那么,如果有效,请进行提交。
  2. 将数据存储在页面(cookie或会话)之间的客户端或服务器端。
  3. 发送专门制作的html,使浏览器模仿发送表单的用户。 [难看,用户看到重画]
  4. 保持验证和处理在同一页面(为什么分开?)。

在任何情况下,在对用户数据进行操作之前不要忘记重新验证,除非绝对确保数据不会受到用户的影响(在上面的列表中,仅当在会话中存储数据时,仍然不推荐)。然后,如果再次验证,为什么还要打开一个单独的页面?

+0

1.是的,我尝试了AJAX,但不幸的是我失败了,因为我不能很好地理解代码,并且无法正确地将其应用于我的代码(我的错误)。 2.将数据分开存储在一个会话中,但我可以在稍后增加复杂性(值得一试)。 3.发送一个特制的HTML表单,就像你说的很丑陋(我完全同意),但是我尝试了它并且工作。 4.为什么打扰一个单独的页面?因为这是我得到的要求,这就是为什么。 –

1

因此,据我所知,你想发送数据第一addstudio.php比Getstudio.php但你想第二个重定向。

让你的HTML这样的:

<form action="getstudio.php" method="POST"> 
    <!-- etc --> 
</form> 

让你的Javascript这样的(包括jQuery的):

$(".your-form-class").on('submit',function(evt){ 
    evt.preventDefault(); 
    var instance = $(this); 
    var formData = new FormData($(".your-form-class")[0]); 
    $.ajax({ 
     type:"POST", 
     data:formData, 
     url:"addstudio.php", 
     success:function(response){ 
      instance.submit(); 
     } 
    }); 
}); 
+0

我尝试了上面的代码,正如你所说的,但表单似乎完全忽略了'addstudio.php'中的数据验证过程并转到了'getstudio.php'。我添加了上面显示的JavaScript代码以及JQuery CDN。 –

相关问题