2

这是我正在尝试改进的文件上传脚本。我根本无法选择一种方法并且遇到了各种问题。

当文件被上传时,它被赋予一个访问类别,这是为了确定谁可以在以后看到该文件。我在这个字段中使用了一个枚举,但现在它是一个简单的 varchar。

通过使用 select distinct 语句,选项列表显示在表单上的下拉框中。

 <div class="uploadFormE">
                <label>Access Category: </label>
                <select name="accessCategory[]">
                    <?php
                        foreach($accessCategories as $eachCat){
                            $val = $eachCat['accessCategory'];
                           echo "<option value=" .$val.">" .$val. "</option>";
                        }

                    ?>
                </select>
            </div>

            OR TYPE NEW ONE

            <div class="uploadFormE">
                <label>New Access Category: </label>
                <input type="text" name="accessCategory[]"> </input>
            </div>

问题是“或键入一个新的”部分。(下拉菜单中的默认设置会覆盖可能输入到输入字段中的内容)

我想给上传者一个添加新类别的机会。

有解决方法吗?如果有更好的清洁方法,那么我会全力以赴。我打算使用一个单独的函数来“添加一个类别”,但因为它是一个不可能的字段。也没有足够的值来证明新表的合理性,我无法让枚举在更新时起作用。

谢谢。

编辑:

<div class="uploadFormE">
                <label>Access Category: </label>
                <select name="accessCategory[]">
                    <?php
                        foreach($accessCategories as $eachCat){
                            $val = $eachCat['accessCategory'];
                           echo "<option value=" .$val.">" .$val. "</option>";
                        }
                    ?>
                    <option value="newCat">New Category?</option>
                </select>
            </div>


            <div class="uploadFormE">
                <label>New Access Category: </label>
                <input type="text" class="GAH" name="newCategory"> </input>
            </div>


           $comments = htmlentities( trim( $_POST['comments'][$i] ) );

            if($_POST['accessCategory[]'] == "newCat"){
                $accessCat = htmlentities( trim ($_POST['newCategory'][$i]));
            }else{
                $accessCat = htmlentities( trim ($_POST['accessCategory'][$i]));
            }

            //doc, pdf, etc etc
            $category = htmlentities( trim( $_POST['category'][$i] ) );

            if($file['name'] != ""){
                $training->uploadDocument( $fileName, $category, $comments, $accessCat );
            }
4

2 回答 2

0

如果我正确理解您的问题空间,那么您有两个具有相同名称的元素。不。
而是创建唯一的 id 和名称,并在您的 php 中有一个 if 语句来处理。

如果你不能 - 创建第三个隐藏元素并执行一些 javascript 将值复制到其中并在 PHP 中使用这第三个元素的值。

于 2013-08-09T07:13:02.940 回答
0

添加新选项相当容易。我会通过(未经测试的代码存根)来做到这一点:

$output="<div class='uploadFormE'><label>Access Category: </label><select name="accessCategory" onChange=\"myjs(this.value)\">";
foreach($accessCategories as $eachCat)
    {
        $val = $eachCat['accessCategory'];
        $output.="<option value='$val'>$val</option>";
    }
$output.="<OPTION value='0' selected='yes'>Add New</OPTION></SELECT>";

$output.="<SPAN id='addnewspan' style='display: none;'><INPUT type='text' name='mynewdata'></SPAN>";

$output.="</DIV>";
echo $output;

JS:

function myjs(theval)
    {
    if(theval=="0")
        {
        document.getElementById("addnewspan").style.display="block;";
        }
        else
        {
        document.getElementById("addnewspan").style.display="none;";
        }
    }

您当然需要在另一个文件中处理输入。

编辑:

为了处理输入,您只需测试 $_POST 变量。

if($_POST['accessCategory']=='0')
    {
    $category=$_POST['mynewdata'];
    }
    else
    {
    $category=$_POST['accessCategory'];
    }
    //do something with $category.

注意:我会非常小心地添加任何用户访问权限 - 这必须是您的应用程序的一个非常紧密的功能。

需要注意的几点:

  1. 尽量不要像您的示例那样混合使用 php 和 html - 这使得跟踪和调试变得非常困难。
  2. "STUFF".$stuff."STUFF" 等价于 "STUFF$stuffSTUFF"。
  3. 如果要连接,请使用单引号,因为它可以减少解析器的负载。

不要害怕使用只有几个值的表。总体而言,存储对这些小列表的整数引用比重复存储值要好得多。它还使调试和更新更容易。

如果您在设计特权表时需要帮助,请尽管询问。

于 2013-08-09T08:00:34.450 回答