繁体   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