Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中使用内爆函数动态上传图像?_Php_Html - Fatal编程技术网

如何在php中使用内爆函数动态上传图像?

如何在php中使用内爆函数动态上传图像?,php,html,Php,Html,我多次收到此错误。无论您发送什么代码,我都对其进行了测试。 在DB中,我使用property\u idisIntegertype和property\u imgisvarchar <?php if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){ // check that needed superglobals are set $query="INSERT INTO img_tbl(`propert

我多次收到此错误。无论您发送什么代码,我都对其进行了测试。
在DB中,我使用
property\u id
is
Integer
type和
property\u img
is
varchar

<?php
 if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){  // check that needed superglobals are set
    $query="INSERT INTO img_tbl(`property_id`,`property_img`) VALUES(?,?)"; //'$property_id','$join_string')";
    if($stmt=$conn->prepare($query)){
        foreach($_FILES['files']['tmp_name'] as $key=>$tmp_name){
            $property_img[]=$_FILES['files']['name'][$key];
            $join_string=implode(' ',array_slice($_FILES['files']['name'][$key],0,5));
            copy($tmp_name,'uploads/'.$join_string);
        }
// I don't know the value type of $property_id.  If integer, use i instead of s.
        if(!$stmt->bind_param('is',$property_id,$join_string)){
            echo "bind failed";  // $stmt->error;  // do not echo when public
        }elseif(!$stmt->execute()){
            echo "execute failed";  // $stmt->error;  // do not echo when public
        }else{
            header('location:listpro_img.php');
        }
        $stmt->close(); 
    }else{
        echo "prepare failed"; // $mysqli->error;  // do not echo when public
    }
    $conn->close();
}else{
    echo "insufficient data submitted";
}
?>

好的,我在我的一台服务器上运行了你的html,以查看我处理的是什么类型的
$\u POST
&
$\u文件
数据。我上传了三个小JPG,得到了这个:

$_POST=['property_id'=>'test','submit'=>'Submit'];
$_FILES=['files'=>[
            'name'=>['4x4.jpg','catfish.jpg','calc.jpg'],
            'type'=>['image/jpeg','image/jpeg','image/jpeg'],
            'tmp_name'=>['/tmp/phps6I8zU','/tmp/phpgbmn2z','/tmp/phpo9wSgg'],
            'error'=>[0,0,0],
            'size'=>[14243,43314,36173]
        ]
    ];
*请注意,我需要删除
btn-btn-info
类,以便实际访问文本字段


从这一点上,我意识到您正在从
foreach()
循环内部调用
introde()
,这会把事情弄糟
$join_string
在每次迭代中都会被调用(上传的每个文件1个)。即使
内爆()
正在接收一个数组(但它没有),每次都会覆盖
$join\u string

这是我的更新代码--加载了错误检查,以帮助您隔离和消除任何遗留问题:

if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){  // check that needed superglobals are set
    $query="INSERT INTO img_tbl(`property_id`,`property_img`) VALUES (?,?)";
    if($stmt=$conn->prepare($query)){
        foreach($_FILES['files']['tmp_name'] as $key=>$tmp_name){
            if(!copy($tmp_name,"uploads/{$_FILES['files']['name'][$key]}")){  // // not move_uploaded_file() ?
                echo "<div>copy error @ $tmp_name & uploads/{$_FILES['files']['name'][$key]}</div>";
            }
        }
        if(!$stmt->bind_param('ss',$_POST['property_id'],implode(' ',$_FILES['files']['name']))){
            echo "bind failed";  // $stmt->error;  // do not echo when public
        }elseif(!$stmt->execute()){
            echo "execute failed";  // $stmt->error;  // do not echo when public
        }else{
            header('location:listpro_img.php');
        }
        $stmt->close(); 
    }else{
        echo "prepare failed"; // $conn->error;  // do not echo when public
    }
    $conn->close();
}else{
    echo "insufficient data submitted";
}
if(设置($\u POST['submit'],$\u POST['property\u id'],$\u FILES['FILES']){//检查是否设置了所需的超全局变量
$query=“插入img_tbl(`property_id`,`property_img`)值(?,)”;
如果($stmt=$conn->prepare($query)){
foreach($\u FILES['FILES']['tmp\u name']作为$key=>$tmp\u name){
如果(!copy($tmp_name,“uploads/{$_FILES['FILES']['name'][$key]}”){////不移动\u上传的\u file()?
echo“复制错误@$tmp_名称并上载/{$_文件['FILES']['name'][$key]}”;
}
}
如果(!$stmt->bind_-param('ss',$\u-POST['property\u-id']),内爆('',$\u-FILES['FILES']['name'])){
回显“绑定失败”;//$stmt->error;//公开时不回显
}elseif(!$stmt->execute()){
回显“执行失败”;//$stmt->error;//公开时不回显
}否则{
标题('location:listpro_img.php');
}
$stmt->close();
}否则{
回显“准备失败”;//$conn->错误;//公开时不回显
}
$conn->close();
}否则{
回应“提交的数据不足”;
}
我已将所有超全局检查写入一个
isset()
调用。这个语法是有效的,看看你是否好奇

原始进程在查询中使用了不安全的未初始化数据。我已经为您实现了一个带有占位符的。我不知道
$property\u id
的预期数据类型,因此我将其指定为字符串(
s
),但它可能是一个整数(
I
)--您必须在那里确定正确的声明

确保
property\u img
表列中有足够的长度来接收以空格分隔的图像文件名的完整长度。如果上载了许多文件和/或它们的名称相对较长,则它们可能在
VARCHAR(255)
字段中被截断


编辑:如果
$propert\u id
是一个整数,则应将输入字段仅限于数值(有几种方法可实现此目的)。然后在接收代码的表单中验证提交的值是否安全。如前所述,在
bind
调用中将
s
替换为
I

我将
property\u id
作为整数,将
property\u img
作为varcharI,我只使用$\u POST和$\u文件。如果我错了,请告诉我correct@sudha我已经运行了一些实际测试,现在我想我已经为您完成了大部分代码。请运行此代码段并告诉我是否有任何中断。如果答案有错误,我会修正的。请删除您以前的评论以整理页面。在您以前的代码的帮助下,我执行了它,并得到了我想要的结果…感谢您的帮助和宝贵的时间。我将脱机几个小时。请准备一个带有示例数据的在线演示链接,并为我解释目录,我回来后会帮助您。使用print\r或var\u dump函数调试代码,并查看传递的$\u帖子中的值。保留原始代码没有错。这使我的回答有意义。我的新代码不再使用
array\u slice()
。请向我展示我所要求的超全球数据,这样我就可以自信地回答你的问题,而不会在花时间帮助你之后被另一位志愿者“挖走”。
if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){  // check that needed superglobals are set
    $query="INSERT INTO img_tbl(`property_id`,`property_img`) VALUES (?,?)";
    if($stmt=$conn->prepare($query)){
        foreach($_FILES['files']['tmp_name'] as $key=>$tmp_name){
            if(!copy($tmp_name,"uploads/{$_FILES['files']['name'][$key]}")){  // // not move_uploaded_file() ?
                echo "<div>copy error @ $tmp_name & uploads/{$_FILES['files']['name'][$key]}</div>";
            }
        }
        if(!$stmt->bind_param('ss',$_POST['property_id'],implode(' ',$_FILES['files']['name']))){
            echo "bind failed";  // $stmt->error;  // do not echo when public
        }elseif(!$stmt->execute()){
            echo "execute failed";  // $stmt->error;  // do not echo when public
        }else{
            header('location:listpro_img.php');
        }
        $stmt->close(); 
    }else{
        echo "prepare failed"; // $conn->error;  // do not echo when public
    }
    $conn->close();
}else{
    echo "insufficient data submitted";
}