簡體   English   中英

使用POST將表單數據發送到當前頁面和另一個PHP頁面同時發送

[英]Sending Form Data Using POST To The Current Page And Another PHP Page At The Same Time

我看到另一個人在堆棧溢出中問這個問題,但我沒有從'他的帖子'得到任何明確的答案/想法。 我想知道是否有辦法通過POST將表單數據發送到當前的PHP頁面addstudio.php以驗證輸入的數據,如果輸入的數據有效,它將被重定向到下一個PHP頁面getstudio.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;
     }
 }
?>

對於上面的代碼,我想知道是否有一種方法可以在$valid = true時運行getstudio.php頁面。

我不能使用include 'getstudio.php';的代碼include 'getstudio.php'; 因為我希望getstudio.php在一個單獨的頁面上運行。

我不能使用代碼header("Location:getstudio.php");exit(); 運行要么是因為全局數組$_POST[]值沒有發送到PHP頁面,就像從表單直接調用頁面時那樣(例如: - <form action = 'getstudio.php' method = 'post'> )。

$valid = true時,有沒有辦法運行getstudio.php頁面,同時將存儲在$_POST[]數組中的值發送到getstudio.php頁面?

你有幾個選擇。

  1. 使用AJAX驗證表單; 然后,如果有效,請進行提交。
  2. 將數據存儲在客戶端或服務器端的某個頁面(cookie或會話)之間。
  3. 發送特制的html,使瀏覽器模仿發送表單的用戶。 [丑陋,用戶看到重繪]
  4. 保持驗證和處理在同一頁面(為什么分開?)。

在任何情況下都不要忘記在對用戶數據采取行動之前重新驗證,除非絕對確定數據不會受到用戶的影響(在上面的列表中,僅在會話中存儲數據時,仍然不推薦)。 然后,如果再次驗證,為什么還要單獨使用一個頁面呢?

所以據我所知你想先發送數據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();
        }
    });
});

這是您當前的頁面

<?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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM