【问题标题】:If a file hasn't been chosen then don't upload如果尚未选择文件,则不要上传
【发布时间】:2013-02-17 19:18:40
【问题描述】:

我在使用此表单时遇到了问题。我希望用户能够编辑数据库中的项目。他们在一个页面上选择了要编辑的项目,并通过 GET 将其发送到编辑页面。 GET 包含他们需要编辑的项目的 ID。

编辑页面加载插入到用户表单中的项目的详细信息(除了文件名)此字段留空。我正在尝试执行一些逻辑来检查用户是否选择了文件。

如果他们没有,那么这个字段应该被忽略,因为我认为用户对已经上传的文件很满意。

如果他们选择了一个文件,那么这意味着他们希望这是新图片。只有这样我才想运行逻辑来上传图片并将其名称插入数据库。

我通过以下方式获取我的 POST 详细信息:

$clean_pic = $_POST['pic'];

然后我说如果它是空白的,什么都不做,否则运行上传:

if($clean_pic = ''){}
    else{

它不工作。任何想法我应该如何找出它是否为空白?删减代码:

if (isset($_POST['add'])) 
{

    // validate 'pic': must consist of alphanumeric characters only.
    $_POST['pic'] = isset($_POST['pic']) ? $_POST['pic'] : '';
    //if(preg_match('/\.(jpg|gif|jpeg)$/i',$_POST['pic']))
        //{
        $clean_pic = $_POST['pic'];
        //}
    //else
        //{$error++; $errmsg .= 'Invalid pic. ';}

}


if (isset($_POST['add']) && ($error==0)) 
{                   


    if (!isset($_POST['pic'])) { echo"test1";}
else {echo"test222";}

    /*tied this too but it didnt work (it will always display result 1):
       if (!isset($_POST['pic'])) { echo"test1";}
   if (isset($_POST['pic']))  {echo"test222";}*/

}

else //output error messages 
{
/////////render form
?>
<form enctype="multipart/form-data" action="" method="post" id="save"><fieldset>
<table id="site-form">
    <tr>
    <td class="one_of_three"><label>Item Name:&nbsp;&nbsp;</label></td>
    <td class="two_of_three"><input type="text" name="fileName" id="fileName" value="<?php echo"$db_name";?>"/></td>
    <td><label class="errors" id="fileNameError">&nbsp;</label></td>
    </tr>
    <tr>
    <td class="one_of_three"><label>Picture:&nbsp;&nbsp;</label></td>
    <td class="two_of_three"><input type="file" name="userfile[]" id="pic"/></td>
    <td><label class="errors" id="picError">&nbsp;</label></td>
    </tr>

    <tr>
        <td class="one_of_three">&nbsp;</td>
        <td class="two_of_three"><input name="add" id="save_button" type="submit" value="Update"/>&nbsp;&nbsp;<a href="../">Cancel</a>.</td>
        <td>&nbsp;</td>
    </tr>
</table>
</fieldset></form>
<?php }?>

【问题讨论】:

    标签: php forms file upload


    【解决方案1】:

    if (!isset($_POST['pic'])) 呢?

    【讨论】:

    • 我现在正在尝试,但它不起作用:'code' $_POST['pic'] = isset($_POST['pic']) ? $_POST['pic'] : ''; if($_POST['pic']==''){什么都不做} else {上传文件} 'code'
    • 我可能不明白你想要达到什么目的。我认为您只想在用户选择文件时才做某事,并且可以通过这种方式完成:&lt;?php if (!isset($_POST['pic'])) { echo('Select a file'); } else { // do something } ?&gt;
    • 感谢您的帮助,但这仍然无法正常工作。我试过你给我的代码。我更改了帖子,以便您可以看到新代码是什么。 pic 的第一个 isset 测试似乎正在影响事物。如果我按原样运行代码,如果我选择或不选择文件,我将得到 echo test222 作为结果。如果我去掉那条线,那么我得到 echo test1 作为结果,如果我选择或不选择文件,test1 再次是结果。这只是给了我一个想法,我认为 else 可能无法正常工作....
    【解决方案2】:

    您无法使用“id”属性(“pic”)访问该文件。您必须使用“名称”属性(“用户文件”)的值。您可以使用php中的$_FILES数组检查文件是否上传。

    if(isset($_FILES) && isset($_FILES['userfile']) && (trim($_FILES['userfile']['name']) != '') ) {

    //你的上传代码在这里

    }

    其他

    {

    //没有上传文件

    }

    【讨论】:

    • 谢谢,但您完全误解了这个问题。问题询问他们是否在表单中选择了一个文件,然后运行上传逻辑。如果他们没有选择文件,则不要运行上传逻辑。因此检查文件是否已上传是没有用的。
    【解决方案3】:

    您需要检查以下内容: 一个是 $_POST['pic'] 是一个数组 第二个是你必须使用 enctype="multipart/form-data" 属性的形式。

    【讨论】:

    • 你能告诉我 print_r($_POST['pic']) 的输出是什么
    • print_r($_POST['pic']) 总是什么都不返回
    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2023-04-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多