[英]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.