【问题标题】:Undefined index -> PHP Upload not working未定义的索引-> PHP 上传不起作用
【发布时间】:2019-09-06 13:41:50
【问题描述】:

PHP 上传:

注意:未定义索引:文件在

在线:$count = count($_FILES['file']['name']);

运行我发现的几乎所有出现此错误的代码...仍然没有任何结果

PHP 代码:

<?php
$count = 0;
if(isset($_POST['uploadFinish']))  { 
    $bcode = $_POST['code'];
    $newpath = "upload/".$bcode."/";
    if (!file_exists($newpath)) {
        mkdir($newpath, 0755, true);
    }
    $count = count($_FILES['file']['name']);
    if($count < 1) { 
        $message = "At least 1 file required"; $count='';
    } else {
        move_uploaded_file($_FILES['file']['tmp_name'], $newpath.'/File-'.$bcode);
    }
}
?>

HTML/JS:

<button class="btn btn-primary btntrg123" id="uploadBtn" style="background: #008489; border-color: #008489">Upload file</button> 
<form style="display: none!important;" id="uploadConf" method="post" enctype="multipart/form-data">
    <div style='height: 0px;width:0px; overflow:hidden;'>
        <input type="file" id="file" name="file[]" multiple="multiple" onclick="getFile()" class="btn btn-primary inptri123">
    </div>
    <input type="hidden" name="code" value="<?php echo $code; ?>">
    <input name="uploadFinish" value="1" type="hidden"> 
</form>
<script type="text/javascript">
$(".btntrg123").click(function(event){ 
    event.preventDefault();
    $(".inptri123").trigger('click');
}); 
function getFile(){ 
    document.getElementById("file").onchange = function () {
        var file = this.value;
        console.log(file);
        var form = document.getElementById('uploadConf');
        form.submit();
    };
}
</script>

两个代码都是相同的 php 文件。从其他文件运行 php,结果相同。

Console.log 给了我文件,但它没有上传到服务器。 文件夹已创建。

【问题讨论】:

  • $_FILES['file'] 将是数组
  • 小点如果你的代码可读(格式很好),那么它也有可能是可调试的
  • var_dump($_FILES); 检查它实际包含的内容。
  • var_dump($_FILES); => 数组(0) { }
  • 我在您的表单中没有看到任何 ajax 请求或 action

标签: javascript php html forms


【解决方案1】:

多文件上传时可以使用

$name=$_FILES['file']['name'][$index];

$tmp=$_FILES['file']['tmp_name'][$index];

您的代码应如下所示




$total = count($_FILES['file']['name']);
for( $i=0 ; $i < $total ; $i++ ) {


  $tmp= $_FILES['file']['tmp_name'][$i];

  if (!(empty($tmp )){

    $path= "/upload/" . $_FILES['file']['name'][$i];


    if(move_uploaded_file($tmp, $path)) {

         echo $_FILES['file']['name'][$i]. ' uploaded';
       }
  }
}

【讨论】:

  • PHP 注意:未定义索引:文件在 if(count($_FILES['file']['name'])) 行上
  • @Laurenti 你仍然会得到未定义的索引文件!
  • 你有没有上传文件夹没有手动创建上传文件夹
  • 是的,我收到了 PHP 通知:未定义索引:$total 上的文件(1 次),然后就像 $tmp 里面的 1000 个相同通知:)
  • 上传一个 13kb 的图片
【解决方案2】:

看来您只是漏掉了一个表单action

应该是这样的:

<form style="display: none!important;" id="uploadConf" method="post" enctype="multipart/form-data" action="/your/api/call">

或者,您可以使用javascript 为表单附加一个事件:

function processForm(e) {
    if (e.preventDefault) e.preventDefault();

    /* do what you want with the form */

    // You must return false to prevent the default form behavior
    return false;
}

var form = document.getElementById('uploadConf');
if (form.attachEvent) {
    form.attachEvent("submit", processForm);
} else {
    form.addEventListener("submit", processForm);
}

【讨论】:

  • 提交表单:var form = document.getElementById('uploadConf'); form.submit();
  • 您只需submit 它,但没有actionevent 的表单将无济于事(只需在某些浏览器中重新加载页面)。你需要说,应该在服务器上执行什么文件或动作。
  • 我在提交表单时发送值为 1 的 uploadFinish。 php(在我的逻辑中......我有点初学者)捕获的是,然后执行代码。将 php 移动到文件中,并将 action="upload.php" 放入表单并添加在 getFile 中触发的提交输入(删除 form.submit() ),我得到相同的通知。
  • @LaurentiuLomnasan 使用开发工具检查浏览器的网络选项卡。文件提交了吗?
  • 我看到那里的文件(启动器upload.php)状态200。
【解决方案3】:

我想你想检查上传文件的数量。

HTML

<button class="btn btn-primary btntrg123" id="uploadBtn" style="background: #008489; border-color: #008489">Upload file</button> 
<form action="upload.php" style="display: none!important;" id="uploadConf" method="post" enctype="multipart/form-data">
    <div style='height: 0px;width:0px; overflow:hidden;'>
        <input type="file" id="file" name="file[]" multiple="multiple" onclick="getFile()" class="btn btn-primary inptri123">
    </div>
    <input type="hidden" name="code" value="0">
    <input name="uploadFinish" value="1" type="hidden"> 
</form>
<script type="text/javascript">
$(".btntrg123").click(function(event){ 
    event.preventDefault();
    $(".inptri123").trigger('click');
}); 
function getFile(){ 
    document.getElementById("file").onchange = function () {
        var file = this.value;
        console.log(file);
        var form = document.getElementById('uploadConf');
        form.submit();
    };
}
</script>

试试这个

    <?php
$count = 0;
if(isset($_POST['uploadFinish']))  { 
    $bcode = $_POST['code'];
    $newpath = "upload/".$bcode."/";
    echo $newpath;
    if (!file_exists($newpath)) {
        mkdir($newpath, 0755, true);
    }
    $count = count($_FILES['file']['name']);
    if($count < 1) { 
        $message = "At least 1 file required"; $count='';
    } else {
        $total = count($_FILES['file']['name']);
        for( $i=0 ; $i < $total ; $i++ ) {
                move_uploaded_file($_FILES['file']['tmp_name'][$i], $newpath.'/File-'.$bcode.$_FILES['file']['name'][$i]);
        }
    }
}
?>
  1. 向表单添加了动作属性。

action="upload.php"

  1. 对处理上传的 PHP 代码稍作更改。

【讨论】:

  • 相同:注意:未定义索引:$count 行上的文件
  • 你能用这段代码替换 php 并检查
  • 上传后返回0。这意味着文件没有在表单中提交。可能是因为按钮的工作方式和表单的提交方式?
  • 可能是这个原因,让我检查一下
  • 使用新代码,它会在我上传时返回 $newpath 值。只是纯文本:上传/代码
猜你喜欢
  • 1970-01-01
  • 2019-07-04
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多