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