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']
,这是不行的。是这样吗?我拥有数组中的所有内容的主要原因是,我可以在数据库中存储这些项目的索引,以便在检索单个帖子的内容时,我可以按正确顺序放置它们。如果我以错误的方式去解决这个问题,有什么更好的方法来做到这一点?
另外,我的道歉我刚才的问题的shoddiness,因为我没有提供足够的信息和编辑它到地狱(尽管我从评论和答案中学到了很多东西)。我希望这个问题更清楚一点。 – rpivovar
如果$ items数组中的某个数组是另一个数组,那么您将不得不遍历该数组。 – Difster
你可以循环发布文件和/或将它们粘合在一起,问题不清楚。 – rtfm