我有一个输入文件来选择一些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标题&#34; test1&#34;以及我的第二个&#34; test2&#34; name,在我的数据库中这两个pdf标题以相同的标题保存,这总是我最后一个标题的标题pdf,在这种情况下&#34; test&#34;。
我在这个例子中使用下面的代码,你看到这里有什么不对吗?
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);
}
}
}
}
答案 0 :(得分:1)
您正在循环浏览所有标题,并将$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);
答案 1 :(得分:1)
我认为你需要替换它:
foreach ($_POST['title'] as $title) {
$pdf_title = $title;
}
有了这个:
$pdf_title = $_POST['title'][$i];