我有一个输入文件来选择一些pdf文件,在我选择pdf文件之后,一些文本输入打开,所以我可以为每个pdf文件提供标题。
因此,我有一个像这样的文本输入:<input type="text" name="title[]" value=""/>
然后验证用户是否像这样填写了这些输入:
if(isset($_POST['sendForm'])){
foreach ($_POST['title'] as $title) {
if(empty($title)){
echo 'Please give a title';
$ok = false;
}
如果用户填写了每个pdf的所有标题,我想把我的pdf上传到我的文件夹中,并插入上传的pdf的数据库信息,我也想保存每个pdf的数据库标题。
我遇到的问题是,如果我上传两个pdf并给予我的第一个pdf标题"test1"和我的第二个"test2"名称,在我的数据库中,这两个pdf标题以相同的标题保存,那总是我最后一个标题pdf的标题,在这种情况下是"test"。
我在这个例子中使用下面的代码,你看到这里有什么问题吗?
if($ok){
if(!empty($_FILES['pdfs']['tmp_name'])){
$pdfs = $_FILES['pdfs'];
$countPdf = count($_FILES['pdfs']['tmp_name']);
$folder = '../../uploads/pdfs_articles/';
for($i=0;$i<$countPdf;$i++){
$ext = substr($pdfs['name'][$i],-3);
$pdfName = $idlast.'-'.$i.time().'.'.$ext;
if($pdfs['type'][$i] == 'application/pdf'){
//here I want to get all values of my inputs with name title[]
// so I can insert on database title of each pdf
foreach ($_POST['title'] as $title) {
$pdf_title = $title;
}
$insPdf = $pdo->prepare("INSERT INTO pdfs_articles (pdf, article_id, title) VALUES (?,?,?)");
$insPdf->bindParam(1,$pdfName);
$insPdf->bindParam(2,$idlast);
$insPdf->bindParam(3,$pdf_title);
$insPdf->execute();
move_uploaded_file($pdfs['tmp_name'][$i], $path.$pdfName);
}
}
}
}
您正在遍历所有标题,将最后一个值留给$pdf_title
。那么你实际上是在处理你上传的pdf文件。
去掉那个循环,访问$_POST['title']
数组,就像你上传文件一样:
$insPdf = $pdo->prepare("INSERT INTO pdfs_articles (pdf, article_id, title) VALUES (?,?,?)");
$insPdf->bindParam(1,$pdfName);
$insPdf->bindParam(2,$idlast);
$insPdf->bindParam(3,$_POST['title'][$i]);
$insPdf->execute();
move_uploaded_file($pdfs['tmp_name'][$i], $path.$pdfName);
我认为你需要替换这个:
foreach ($_POST['title'] as $title) {
$pdf_title = $title;
}
与这个:$pdf_title = $_POST['title'][$i];