将信息输入到输入数组的数据库中....它总是插入最后的$ _POST值

时间:2014-07-11 15:04:59

标签: php

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

    } 

2 个答案:

答案 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];