2 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
<?php echo $_SERVER['PHP_SELF'];?>給出當(dāng)前的 URL,因此因為它們位于同一頁面,所以會導(dǎo)致問題。您可以通過檢查頁面Ctrl + Shift + i然后單擊ElementsChrome 來檢查這一點。
一種解決方案可能是為兩個表單提供不同的 URL 或在發(fā)布請求上使用參數(shù)。例如<?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條經(jīng)驗 獲得超6個贊
好吧,讓我們開始討論為什么會發(fā)生這種情況。
HTML 的參數(shù)action告訴瀏覽器使用表單數(shù)據(jù)發(fā)送 POST 請求的 URL。在您的例子中,它是$_SERVER['PHP_SELF'],這是當(dāng)前的 PHP 腳本。您對這兩種形式使用相同的內(nèi)容。
當(dāng)提交其中一份表單時,您的 PHP 腳本將被調(diào)用,并且腳本中的所有 PHP 都會被執(zhí)行。第一部分(第一個表單之后的部分)檢查if ($_SERVER["REQUEST_METHOD"] == "POST"),確定這是一個 POST 請求,并嘗試繼續(xù)。之后,第二部分(第二個表單之后的部分)使用完全相同的檢查,確定是的,這是一個 POST 請求,并嘗試繼續(xù)進行。
理想情況下,使用兩個不同的頁面來處理兩種不同的表單會更干凈;但如果您希望將所有內(nèi)容保留在同一頁面中,則可以使用幾個不同的選項來區(qū)分兩者。
1) 按照@sauhardnc 的建議,在每個表單的操作屬性中使用不同的查詢參數(shù)。表格看起來像:
<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 關(guān)注
- 183 瀏覽
添加回答
舉報