2 回答

TA貢獻1906條經驗 獲得超3個贊
<?php echo $_SERVER['PHP_SELF'];?>給出當前的 URL,因此因為它們位于同一頁面,所以會導致問題。您可以通過檢查頁面Ctrl + Shift + i然后單擊ElementsChrome 來檢查這一點。
一種解決方案可能是為兩個表單提供不同的 URL 或在發布請求上使用參數。例如<?php echo $_SERVER['PHP_SELF'].'?form=form1';?>-&<?php echo $_SERVER['PHP_SELF'].'?form=form2';?>
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(isset($_GET['form'])){
if($_GET['form'] == 'form1'){
//code for form1
}else{
//code for form2
}
}
}

TA貢獻1825條經驗 獲得超6個贊
好吧,讓我們開始討論為什么會發生這種情況。
HTML 的參數action告訴瀏覽器使用表單數據發送 POST 請求的 URL。在您的例子中,它是$_SERVER['PHP_SELF'],這是當前的 PHP 腳本。您對這兩種形式使用相同的內容。
當提交其中一份表單時,您的 PHP 腳本將被調用,并且腳本中的所有 PHP 都會被執行。第一部分(第一個表單之后的部分)檢查if ($_SERVER["REQUEST_METHOD"] == "POST"),確定這是一個 POST 請求,并嘗試繼續。之后,第二部分(第二個表單之后的部分)使用完全相同的檢查,確定是的,這是一個 POST 請求,并嘗試繼續進行。
理想情況下,使用兩個不同的頁面來處理兩種不同的表單會更干凈;但如果您希望將所有內容保留在同一頁面中,則可以使用幾個不同的選項來區分兩者。
1) 按照@sauhardnc 的建議,在每個表單的操作屬性中使用不同的查詢參數。表格看起來像:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?form=form1">
...
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?form=form2">
而 PHP 端會做類似的事情
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_GET['form'] == 'form1') {
// code for form1
} else {
// code for form2
}
}
2) 在每個表單中使用不同的輸入。表格看起來像:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
...
<input type="hidden" name="form" value="form1">
</form>
...
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
...
<input type="hidden" name="form" value="form2">
</form>
而 PHP 端會做類似的事情
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_REQUEST['form'] == 'form1') {
// code for form1
} else {
// code for form2
}
}
- 2 回答
- 0 關注
- 168 瀏覽
添加回答
舉報