2017-07-15 5 views
0

私は、各入力が配列items[]に含まれている形式を持っています。この配列には、テキスト入力とファイル入力の両方が含まれています。それが既に大きな赤い旗なら、TLDR - テキストとファイルの両方の入力を含む配列をデータベースのアップロード用に同じSQL文に渡すことはできますか?PHP:配列にはテキストとファイルの両方の入力が含まれていますか?

私のPHPには、 "paragraph"と "image"という入力の名前をエコーするエコーステートメントがあります。 「段落」はテキスト入力であり、「画像」はファイル入力である。

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$_FILES['items']よう$_POST['items']とないものを含んでいるので、これは動作しません、推測しています。その場合ですか?私が配列items[]の中にあるすべての主な理由は、データベース内にこれらの項目のインデックスを格納できるので、単一の投稿の内容を取得するときに、正しい順序で配置できるようになります。私がこれを間違った方法で行っている場合、これを行う良い方法は何ですか?

+0

ある$_FILESを使用してファイルの入力にアクセスすることはできませんが、 (私はコメントと回答から多くを学んだが)。私はこの質問がもう少し明確であることを願っています。 – rpivovar

+0

$ items配列内の何かが別の配列である場合は、その配列に対しても繰り返し処理を行う必要があります。 – Difster

+1

あなたは投稿とファイルをループすることができますか、またはそれらを一緒に接着する、質問は明確ではありません。 – rtfm

答えて

1

あなたは、コンテンツ利用可能な変数は、また、私は十分な情報を提供して地獄にそれを編集していなかったので、私の前の質問のshoddinessのための私の謝罪name, type, tmp_name, error and size

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