PHP:数组可以同时包含text和amp;文件输入?

时间:2017-07-15 03:24:38

标签: php arrays multidimensional-array

我有一个表单,其中每个输入都包含在数组items[]中。此数组包含文本输入和文件输入。如果那已经是一个巨大的红旗,那么 TLDR - 包含文本和文件输入的数组是否可以传递到同一个SQL语句进行数据库上传?

我在PHP中有一个echo语句,我尝试回显输入的名称,"段落"和"图像"。 "段"是一个文本输入,"图像"是一个文件输入。

foreach($_POST['items'] as $index => $item){

    $key = key($item);
    echo $key;
    ....

^这回应"段落#34;但不回应"图像"。

为了更加清晰,以下是表格:

<form method="post" action="insert.php" enctype="multipart/form-data">

    <textarea name="title"></textarea>

    <!--paragraph input-->
    <div><textarea name="items[][paragraph]"></textarea></div>
    <!--paragraph input-->
    <div><textarea name="items[][paragraph]"></textarea></div>
    <!--paragraph input-->
    <div><textarea name="items[][paragraph]"></textarea></div>
    <!--file input-->
    <div><input type="file" name="items[][image]" id="uploadImage" multiple></div>
    <!--file input-->
    <div><input type="file" name="items[][image]" id="uploadImage" multiple></div>
    <!--file input-->
    <div><input type="file" name="items[][image]" id="uploadImage" multiple></div>

    <input type="submit" name="upload" value="Upload" id="upload">

</form>

...和php。由于我只是试图查看foreach是否可以识别文件输入,因此无法处理文件类型并将其存储在目录中。

<?php

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

    $host = "";
    $dbname = "";
    $user = "";
    $pass = "";

    try {    
        $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $statement = $db->prepare("INSERT INTO table (placement, datatype, typetext) VALUES (:placement, :datatype, :typetext)");

        if($statement){

            if(is_array($_POST['items'])){

                foreach($_POST['items'] as $index => $item){

                    //this is where I'm trying to catch the names of
                    //the inputs, "paragraph" and "image". This will
                    // print "paragraph", but will NOT print "image"

                    $key = key($item);
                    echo $key;

                    $statement->execute(['placement' => $index, 'datatype' => key($item), 'typetext' => $item[key($item)]]);
                }
            }
        }
        $db = null;
    }
    catch(PDOException $e) {
        echo $e->getMessage();
    }
    exit(header("location: insert.php"));
}
?>

我猜测,因为foreach包含$_POST['items']而不是$_FILES['items'],这不起作用。是这样的吗? ?我拥有数组items[]内部所有内容的主要原因是我可以在数据库中存储这些项的索引,这样当我检索单个帖子的内容时,我可以按正确的顺序放置它们。如果我以错误的方式解决这个问题,有什么更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以使用$_FILES访问文件输入,但内容可用变量不是name, type, tmp_name, error and size

foreach($_FILES['items'] as $index => $item){
  foreach ($item as $value) {
    echo "$index : {$value['image']} <br>";
  }
}