我有一个表单,其中每个输入都包含在数组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[]
内部所有内容的主要原因是我可以在数据库中存储这些项的索引,这样当我检索单个帖子的内容时,我可以按正确的顺序放置它们。如果我以错误的方式解决这个问题,有什么更好的方法呢?
答案 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>";
}
}