无法找到为什么我有未定义的偏移通知

时间:2014-06-12 23:20:43

标签: php

我在news-create.php文件中有这个代码,我有一个表单在我的新闻表中插入数据。

一切正常,除非我的图片多次上传,当我插入新闻时。

我得到了这个错误:

注意:未定义的偏移量:$ext = substr($gb['name'][$i],-3);

中的3

注意:未定义的偏移量:if(in_array($gb['type'][$i],$extPerm))

中的3

你可以试着理解这些通知吗?

这就是我所拥有的:

在下面的代码之前,我存储在$ f数组中,用户在我的插入新闻表单中写入并上传我的新闻单个图像,然后我执行插入:

    $insNews = $pdo->prepare("INSERT INTO news (img, title, category, content) VALUES (?, ?, ?, ?)");
    $insNews->bindParam(1,$f['img']);
    $insNews->bindParam(2,$f['title']);
    $insNews->bindParam(3,$f['category']);
    $insNews->bindParam(4,$f['content']);               
    $insNews->execute();
    $insNews = $pdo->lastInsertId();

我得到了我的lastInsertId,因为我还想为我当前的新闻创建一个图库,所以我需要将当前插入的新闻与我的画廊表关联起来,所以我想到这个解决方案,我认为应该有效。

然后如果我的插入返回成功,我将进行多次上传,并在我的表库中插入当前id的库:

if($insNews->rowCount() >=1){
    if($_FILES['gb']['tmp_name']){
        $count = count($_FILES['gb']['tmp_name']);
        $gb = $_FILES['gb'];
        $folder = '../galery/';
        $year = date('Y');
        $month = date('m');

        if(!file_exists($folder.$year)){
        mkdir($folder.$year,0755);
        }

        if(!file_exists($folder.$year.'/'.$month)){
        mkdir($folder.$year.'/'.$month,0755);
        }

        for($i=0;$i<=$count;$i++){

            $ext = substr($gb['name'][$i],-3);
            $name = $folder.$year.'/'.$month.'/'.$idlast.'-'.$i.time().'.'.$ext;
            $extPerm = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif');
            if(in_array($gb['type'][$i],$extPerm)){
            uploadImage($gb['tmp_name'][$i], $name, '800', $folder);

            //and then I will do my insert into galery table here
            $insGal = $pdo->prepare("INSERT INTO gallery (img, id_news) VALUES (?, ?)");
            $insGal->bindParam(1,$name);
            $insGal->bindParam(2,$idlast);

            }
        }

    }

    if($f['status'] == '1'){
        echo 'Sucess inserting news';
    }
    else{
        echo 'Sucess intersing news, but you need to active it.';
    }

2 个答案:

答案 0 :(得分:2)

$i <= $count更改为$i < $count。当数组包含3个元素时,索引从0运行到2。你走得太远了。

答案 1 :(得分:1)

除了@Barmar的回答。它看起来像你在为你的循环计算错误的数组。你的代码:

$count = count($_FILES['gb']['tmp_name']);//shouldn't this be just $_FILES['gb'] as that's what you're iterating over? 
$gb = $_FILES['gb'];  

//
 for($i=0;$i<$count;$i++){ //$count contains the length of $_FILES['gb']['tmp_name']