2017-07-15 58 views
0

我有一个表格,其中每个输入包含在数组。该数组包含文本输入和文件输入。如果这已经是一个巨大的红旗,那么TLDR - 可以将包含文本和文件输入的数组传递给用于数据库上传的相同SQL语句吗?PHP:数组可以包含文本和文件输入吗?

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

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

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

^这个回声“段落”,但不回声“图像”。

对于有点更清晰,这里是形式:

<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'],这是不行的。是这样吗?我拥有数组中的所有内容的主要原因是,我可以在数据库中存储这些项目的索引,以便在检索单个帖子的内容时,我可以按正确顺序放置它们。如果我以错误的方式去解决这个问题,有什么更好的方法来做到这一点?

+0

另外,我的道歉我刚才的问题的shoddiness,因为我没有提供足够的信息和编辑它到地狱(尽管我从评论和答案中学到了很多东西)。我希望这个问题更清楚一点。 – rpivovar

+0

如果$ items数组中的某个数组是另一个数组,那么您将不得不遍历该数组。 – Difster

+1

你可以循环发布文件和/或将它们粘合在一起,问题不清楚。 – rtfm

回答

1

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

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