Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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 从if(){…;}条件访问elseif(){..}条件中的数组数据_Php_Arrays_Forms_Form Submit - Fatal编程技术网

Php 从if(){…;}条件访问elseif(){..}条件中的数组数据

Php 从if(){…;}条件访问elseif(){..}条件中的数组数据,php,arrays,forms,form-submit,Php,Arrays,Forms,Form Submit,我在一个表单中有两个表单提交按钮,我想在elseif(){…}中使用$data['picu path']=$upload,但它不起作用。我只能在if(){…}内部或html正文内部打印$upload。如何将$upload保存在$data数组中?谢谢 代码如下: 提交你的帖子 这是因为$uploaded只存在于您在中声明它的if语句中。您需要在elseif中再次循环文件,或移动$upload和$failed的声明,以及从该if块中填充它们的for循环,以便在两个路径中都可以访问变量 编辑-尝试

我在一个表单中有两个表单提交按钮,我想在
elseif(){…}
中使用
$data['picu path']=$upload,但它不起作用。我只能在
if(){…}
内部或html正文内部打印
$upload
。如何将
$upload
保存在
$data
数组中?谢谢

代码如下:



提交你的帖子

这是因为
$uploaded
只存在于您在中声明它的if语句中。您需要在elseif中再次循环文件,或移动
$upload
$failed
的声明,以及从该if块中填充它们的for循环,以便在两个路径中都可以访问变量

编辑-尝试以下操作:

 if (!empty($_FILES["files"]["name"][0]) ) {
        $files = $_FILES["files"];
        //arrarys to include files uploaded successfully and failed
        $uploaded = array();
        $failed = array();
        //access tmp_name arrary
        foreach ($files['name'] as $position => $file_name) {
            $file_tmp = $files["tmp_name"][$position];

            $file_ext = explode(".", $file_name);
            $file_ext = strtolower(end($file_ext));

            $file_name_new = uniqid("", true) . "." . $file_ext;
            $file_destination = "uploads/" . $file_name_new;
            if (move_uploaded_file($file_tmp, $file_destination)) {
                $uploaded[$position] = $file_destination;
            } else {
                $failed[$position] = "error";
            }   
        } 
        print_r($uploaded);
    }

if (isset($_POST[submit_post])) {
        $data = array();
        $data['comments'] =  $_POST['comments'];
        $data ['pic_path'] = $uploaded;
} 

我已经把
$upload=array()
if(){…}elseif(){…}
之外。但是仍然
print\r($upload)
只在
if(){…}
中有效,而不是在
elseif(){…}
中。我用应该有效的代码编辑了我的答案。试试看。谢谢你的编辑,我已经试过了,但是
$data['picu path']=$upload值仍然为空。而且似乎摆脱
if(isset($\u POST[submit\u POST]){…}
也会奏效。但是,我不知道这会对表单验证产生多大影响。但我将在我的完整代码中尝试一下:)一个可能的原因是,当您在提交文件后重新加载页面时,$_filesvar会被垃圾收集,因为您超出了范围,您需要确保在页面重新加载时将数据注入表单中,从而保留数据。实际上,在仔细查看之后,无法将文件重新填充回表单,您有两个选项。第一种方法是避免对每个文件都要求表单提交,而是使用JavaScript通过每次创建一个新字段来允许多次上传,或者可以使用JavaScript和Ajax从表单本身上传。另一个选项是临时保存文件,并创建某种ID系统来标识这些文件属于该用户表单,并在设置的时间后将其删除。就我个人而言,我只需要使用JavaScript,然后只有一个提交按钮。
 if (!empty($_FILES["files"]["name"][0]) ) {
        $files = $_FILES["files"];
        //arrarys to include files uploaded successfully and failed
        $uploaded = array();
        $failed = array();
        //access tmp_name arrary
        foreach ($files['name'] as $position => $file_name) {
            $file_tmp = $files["tmp_name"][$position];

            $file_ext = explode(".", $file_name);
            $file_ext = strtolower(end($file_ext));

            $file_name_new = uniqid("", true) . "." . $file_ext;
            $file_destination = "uploads/" . $file_name_new;
            if (move_uploaded_file($file_tmp, $file_destination)) {
                $uploaded[$position] = $file_destination;
            } else {
                $failed[$position] = "error";
            }   
        } 
        print_r($uploaded);
    }

if (isset($_POST[submit_post])) {
        $data = array();
        $data['comments'] =  $_POST['comments'];
        $data ['pic_path'] = $uploaded;
}