簡體   English   中英

PHP:如何與兩個單獨的表單輸入共享一個下拉菜單(一個文本區域,一個文件上傳)

[英]PHP: how can I share one drop-down menu with two separate form inputs (one textarea, one file upload)

我目前有兩種HTML表單。 他們都發布到process.php:一個發布文本到textarea,另一個發布上傳的文件。 隱藏的稱為“ act”的輸入的值分別為“ paste”或“ upload”,process.php使用此值來區分這兩種形式。 當前代碼(如下)工作正常。

<!--Box to paste list of queries-->
<form enctype="multipart/form-data" action="process.php" method="POST" onSubmit="return showPleaseWait()">
    <?php //This hidden input value 'paste' is used by process.php to distinguish the two forms ?>
    <input type="hidden" name="act" value="paste"/>
    <b><font color="#1F88A7">Paste in a list (one query per line):<br/></b><br/>
    <textarea id="text" cols="15" rows="6" name="ID_list" style='background-color:#ffffff; border:solid 1px #1F88A7'></textarea>
    <input id="butt" name="sub" type="submit" value="Submit" /><br />
</form>

<br />

<!--Box to upload a file -->
<form enctype="multipart/form-data" action="process.php" method="POST" onSubmit="return showPleaseWait()">
    <?php //This hidden input value 'upload' is used by process.php to distinguish the two forms ?>
    <input type="hidden" name="act" value="upload"/>
    <b><font color="#1F88A7">Or upload (plain text, one query per line):</font> </b><br />
    <input id="butt" name="uploadedfile" type="file" style='background-color:#ffffff; border:solid 1px #1F88A7'/><input type="submit" value="Upload File" />
</form>

在process.php我有這個:

if (isset($_POST['act'])){    
    if ($_POST['act'] == 'upload'){
        // ...process one way
        echo "file uploaded";
    }else if($_POST['act'] == 'paste'){
        // ...process another way
        echo "text uploaded";
    }
}

我現在想做的是添加一個下拉菜單,該菜單將以提交這兩種形式中的任何一種形式發布。 我可以將下面的代碼粘貼到這兩種形式中,但是此下拉菜單顯示了兩次(每種形式一次)。 我只想在頁面頂部顯示一次此下拉菜單,並使用兩種形式(“粘貼”或“上傳”)中的任何一種來提交其值。

<form action="process.php" method="post">
    <b><font color="#1F88A7">Select your query type:</font> </b><br />
    <select name="ID_type">
    <option value=""></option>
    <option value="type1">type1</option>
    <option value="type2">type2</option>
    <option value="type3">type3</option>
    </option>
    </select>
</form>

目標是通過將if語句包含到process.php中來不同地處理不同類型的查詢,例如:

if ($_POST['ID_type'] == 'type1'){}

這個問題似乎很簡單,也許由於我對html缺乏了解(如果上面的html中有什么可怕的內容而道歉),我可能無法解決,但是我找不到解決方法。 非常感謝您的幫助。

如果您不希望使用現有的兩種表單結構來解決任何javascript變通方法,那么您應該將所有內容都僅用一種表單包圍。 也許“ act”和“ query type”都應該是表格頂部的下拉菜單。 然后,根據是將行為設置為粘貼還是上載,您將查看文本區域或文件輸入-因為如果只是一種形式,則它們都將包括在內。

有多種方法可以通過javascript改善這種想法,例如,在允許發布之前,如果act = paste驗證文本區域是否包含數據,或者如果act = upload驗證文件上傳中是否有文件,但是您也可以這樣做所有服務器端,如果您不想使用JS。

您正在使它變得比原本應該的復雜,除非您確實有理由這樣做,否則如果我是您,我將以相同的形式使用它們。 然后將邏輯放入PHP,因為它們都調用相同的process.php腳本。

<form enctype="multipart/form-data"
   action="process.php" method="POST" onSubmit="return showPleaseWait()">  
<b><font color="#1F88A7">Select your query type:</font> </b><br />
<select name="ID_type">
<option value=""></option>
<option value="type1">type1</option>
<option value="type2">type2</option>
<option value="type3">type3</option>
</option>
</select>
<!-- Paste -->
<b><font color="#1F88A7">Paste in a list (one query per line):</b><br/>
<textarea id="text" cols="15" rows="6" name="ID_list" 
      style='background-color:#ffffff; border:solid 1px #1F88A7'></textarea>
<!-- upload -->
<b><font color="#1F88A7">Or upload (plain text, one query per line):</font></b>

<input name="uploadedfile" type="file" 
       style='background-color:#ffffff; border:solid 1px #1F88A7'/>   
<input id="butt" name="sub" type="submit" value="Submit" /><br />
</form>

我什至不使用hiddenfield和東西:

if (isset($_POST)){    
    if (is_uploaded_file($_FILES['yourfile']['uploadedfile'])){
        // ...process one way
        echo "file uploaded";
    }else if(isset($_POST['ID_list'])){
        // ...process another way
        echo "text uploaded";
    }

    if ($_POST['ID_type'] == 'type1'){
        //do whatever
    }
}

現在,如果您不希望用戶同時處理兩者,那么我將集中精力重新設計我的界面,使其僅允許一種類型的過程(也許使用單選按鈕或類似的方法)

暫無
暫無

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

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