2016-11-29 68 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。 –

相關問題