在数据库中输入数组的信息,它总是插入最后一个$_POST值


enter information into database of an input array....its always inserting the last $_POST value

我有一个输入文件来选择一些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];