2013-05-08 36 views
0

我正在嘗試爲工作創建一個自動回覆腳本,它將根據需要顯示錶單域,如NameUsernamePassword。選擇提交後,我希望腳本移除表單,並在輸出中顯示相應的響應,而無需將其發佈到其他頁面。最終有一個form.php和result.php爲我想要的每個單獨的場景將會太混亂,因此我試圖完成這一點。迄今爲止的形式,我有:如何在將PHP表單提交給相同頁面之前將頁面空白?

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
    <table width="100%" cellpadding="10" cellspacing="0"> 
     <tr> 
      <td style="width:33%"> 

      </td> 
      <td style="width:33%">&nbsp;</td> 
      <td style="width:33%">&nbsp;</td> 
     </tr> 
     <tr> 
      <td colspan="3" style="width:99%"> 
       <label>Name</label><span class="req">*</span> 
       <span id="reqName" style="color:Red;display:none;">&nbsp;</span> 
       <br /> 
       <input type="text" name="name"> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3" style="width:99%"> 
       <label>Username</label><span class="req">*</span> 
       <span id="reqProblem" style="color:Red;display:none;">&nbsp;</span> 
       <br /> 
       <input type="text" name="username"> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3" style="width:99%"> 
       <label for="txtProblem">Password</label><span class="req">*</span> 
       <span id="reqProblem" style="color:Red;display:none;">&nbsp;</span> 
       <br /> 
       <input type="text" name="password"> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3" style="width:99%"> 
      <br /> 
      <input type="submit" name="submit" value="Submit"> 
      </td> 
     </tr> 
    </table> 
</form> 

對於PHP,我有:

<?php 
if(isset($_POST['submit'])) { 
    echo "<h4>Response</h4>"; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $name = $_POST['name']; 

    echo "<p>Hello, $name <br /> 


    Your Login Information is as follows: 
    Username: $username 
    Password: $password. 
</p>"; 
} 
?> 

所以總結起來,我想PHP isset之前徹底清除一切,並與相應的替換結果。

+0

你的標題表明你有一個錯誤,但你的問題的文字似乎是說,你只是想建議在添加新功能。請考慮更新您的問題,以清楚地反映您期望發生的事情,現在正在發生的事情以及您嘗試過的事情。 – 2013-05-08 17:02:37

+0

謝謝,除非你提到它,否則聽起來不像那樣。我現在糾正了它! :) – 2013-05-08 19:35:12

回答

1

在目前的形式中,發生的事情是,您的HTML被髮送到瀏覽器(或者在瀏覽器的途中至少有一些不可見的緩衝區),並且一旦您進入了您的部分環境控制表單處理的腳本。

所以你有兩個選擇。一種是通常將其保留在您擁有的狀態,但是使用ob_start()和相關函數進行輸出緩衝 - 在這種情況下我不建議這麼做 - 或者只是重新安排代碼的順序。

一般來說,這些單頁自我處理表單最常見的設計模式是讓您的處理邏輯位於最上方,並且表單或成功/失敗消息的輸出以結果爲條件。

要執行此操作,請將您的PHP代碼移動到文件的頂部。在你現在的POST代碼結束時,如果帖子成功了,那麼你輸出你的消息,但沒有別的。如果不成功,或者如果還沒有任何帖子,那麼你輸出表單html。沿着這些線:

<?php 
if($no_post_or_failure) 
{ 
// output html 
?> 
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
... 
<?php 
} // aaaand we're done! 
?> 

而就是這樣。我希望是有道理的:)

+0

變量'$ no_post_or_failure'來自哪裏,分配給它的是哪裏?感謝您的幫助,至今爲止,我非常感謝 – 2013-05-09 08:20:46

+0

我只是將它作爲您自己的變量或程序邏輯的佔位符。基本上,只有在A)沒有POST數據,或B)有POST數據但是如果驗證邏輯失敗的情況下,該循環才應執行,因此無論如何您都需要顯示錶單。 – BrianHall 2013-05-10 17:58:45

0

只要改變你的PHP:

<?php 
if(isset($_POST['submit'])) { 
    echo "<h4>Response</h4>"; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $name = $_POST['name']; 

    echo "<p>Hello, $name <br /> 
    Your Login Information is as follows: 
    Username: $username 
    Password: $password. 
    <a href="yourPHPfileName.php">Back</a> 
</p>"; 
}else{ 
?> 
//YOUR HTML FORM GOES HERE 
<?php 
} 
相關問題