亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP提交的兩個HTML表單互相觸發

PHP提交的兩個HTML表單互相觸發

慕標琳琳 2023-10-24 21:14:56
我在一頁上有 2 個表格,但是當我按下“提交”按鈕時,另一個表格就會被執行。<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">  Name: <input type="text" name="fname">  <input type="submit" name="getNameSubmit"></form><?phpif ($_SERVER["REQUEST_METHOD"] == "POST") {    // collect value of input field    if(isset($_REQUEST['fname']) && $_REQUEST['fname']!="")        {            $name = htmlspecialchars($_REQUEST['fname']);              if (empty($name)) {                echo "Hello dear user.";            } else {                echo "Hello $name";            }    }}?>和<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">  Full text: <input type="text" name="stringtoreplace" value="">  Word(s) to change: <input type="text" name="wordstochange" value="">  Change to: <input type="text" name="wordstoinput" value="">  <input type="submit" name="wordReplaceSubmit"></form><?phpif ($_SERVER["REQUEST_METHOD"] == "POST") {    // collect value of input field -- the if(isset) stops a pre-comparison that throws an E_NOTICE level error    if(isset($_REQUEST['stringtoreplace']) && $_REQUEST['stringtoreplace']!="")    {     $stringoutput = htmlspecialchars($_REQUEST['stringtoreplace']);    }    if(isset($_REQUEST['wordstochange']) && $_REQUEST['wordstochange']!="")    {     $tochange = htmlspecialchars($_REQUEST['wordstochange']);    }    if(isset($_REQUEST['wordstoinput']) && $_REQUEST['wordstoinput']!="")    {     $changeto = htmlspecialchars($_REQUEST['wordstoinput']);    }    if (empty($stringoutput)) {        echo "Please enter your text and the words to change.";    } else {        echo str_replace($tochange, $changeto, $stringoutput);    }}?> 如何在不觸發另一個的情況下讓其中之一采取行動?功能和位置不是這里的一個因素,我只是在做一些練習,但如果能了解為什么會發生這種情況以及如何解決,那就太好了。
查看完整描述

2 回答

?
一只名叫tom的貓

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

        }

    }

}


查看完整回答
反對 回復 2023-10-24
?
胡子哥哥

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

    }

}


查看完整回答
反對 回復 2023-10-24
  • 2 回答
  • 0 關注
  • 168 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號