簡體   English   中英

PHP表單以html格式提交。 總是負荷

[英]PHP Form Submit in html. Always Loads

我點擊提交按鈕時試圖重命名html。 問題是它會在頁面加載時重命名頁面,即使我沒有點擊提交按鈕,是否有任何可以避免的情況。 我想加載它只提交?

   <form method="post" action="<?php rename("log.html","OLD.LOG/log.html.bac.date");  $file=fopen("log.html","w+"); ?>">
            <input name="Rename" type="submit"  id="Rename" value="Clear Page" >
            <p class="logout"><a id="exit" href="#">Exit</a></p>
            </form></p>

PHP引擎將在生成HTML時執行<?php?>之間的代碼。 它不能以輸出的內容為條件做任何事情。

您需要將該代碼移動到單獨的.php文件中,並將該文件的URL放在action屬性中。

如果我正確理解了您的問題,您有一個表單並單擊“重命名”按鈕應該在PHP服務器中將“log.html”重命名為“OLD.LOG / log.html.bac.date”。 我強烈反對讓客戶端決定重命名文件的名稱。 使用您當前的方法,客戶端(瀏覽器)發送重命名操作的詳細信息。 這可能是一個安全循環漏洞,攻擊者可以使用該漏洞重命名服務器中的重要文件。

假設您正在進行簡單的表單提交(不需要花哨的ajax),請將操作更改為指向服務器中的php文件。

   <form method="post" action="/rename">
        <input name="Rename" type="submit"  id="Rename" value="Clear Page" >
        <p class="logout"><a id="exit" href="#">Exit</a></p>
   </form></p>

我假設你已經設置了一些帶有一些bootstrap / front控制器的干凈URL來在PHP服務器中執行rename.php ,否則,使用

<form method="post" action="/rename.php">

然后在rename.php有類似以下的代碼

<?php 
rename("log.html","OLD.LOG/log.html.bac" . time());  
$fh = fopen("log.html","w"); 
fclose($fh);
?>

我添加了time()以防止每次都覆蓋備份文件。 並始終關閉您打開的文件處理程序。 我還假設您只想創建空的log.html ,而不是閱讀它。 所以w就夠了,不需要w+ 此外,我假設您有一些身份驗證/授權措施,以防止通過執行重命名操作太多來對服務器進行DOS攻擊。

如果要使用輸出表單的相同PHP文件,則將POST請求中的額外參數傳遞給同一URL。 有很多方法可以做到這一點,最簡單的方法就是這樣。 但您可以使用正確的HTTP標頭正確地執行此操作,但使用相同的URL來顯示表單以及處理表單。 有許多MVC框架,如Zend框架,它們能夠通過檢查HTTP方法(GET,POST,DELETE,ect)路由到同一控制器中的不同操作

暫無
暫無

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

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