Php 当我不';不要在上传输入中附加任何文件

Php 当我不';不要在上传输入中附加任何文件,php,file-upload,insert,pdo,prepared-statement,Php,File Upload,Insert,Pdo,Prepared Statement,当我没有附加任何文件时,在Postgresql数据库中插入某些内容时出错。我有一个表单,其中有一些输入,我在一个表中插入,还有一个输入,用于将多个文件和一些信息上传到另一个表中 上载输入为空时出错: 致命错误:对C:\wamp\www\arn\upload.php第60行的非对象调用成员函数prepare() 第60行:$sth=$dbh->prepare(“插入到arn_信息(arn、modelos、familias、problema、solucao)值(?,,,,,?)” 我的表格: <

当我没有附加任何文件时,在Postgresql数据库中插入某些内容时出错。我有一个表单,其中有一些输入,我在一个表中插入,还有一个输入,用于将多个文件和一些信息上传到另一个表中

上载输入为空时出错:

致命错误:对C:\wamp\www\arn\upload.php第60行的非对象调用成员函数prepare()

第60行:$sth=$dbh->prepare(“插入到arn_信息(arn、modelos、familias、problema、solucao)值(?,,,,,?)”

我的表格:

<?php
$sth = $dbh->query("SELECT * FROM arn_info");

    $sth->setFetchMode(PDO::FETCH_ASSOC);

    if($sth){
        $row = $sth->fetch();

        echo '<form method="post" action="upload.php" enctype="multipart/form-data" >';
        echo '<input type="hidden" name="id" />';
        echo 'ARN: <input type="text" name="arn" /><br />';
        echo 'Familias: <input type="text" name="familias" /> <br />';
        echo 'Problema: <textarea class="tinymce" name="problema" cols="30" rows="10">';
        echo '</textarea>';
        echo 'Solução: <textarea class="tinymce" name="solucao" cols="30" rows="10">';
        echo '</textarea>';

        echo '<input type="hidden" name="MAX_FILE_SIZE" value="2000000">';
        echo 'Anexos: <input name="userfile[]" type="file" class="multi" id="userfile">';

        echo '<input name="upload" type="submit" class="box" id="upload" value="ADD ARN">';
        echo '</form>';

     }
?>
<?php

if(isset($_POST['upload']))
{
    $uploadDir = 'uploads/';

    $fileArn = $_POST['arn'];
    $id = $_POST['id'];
    $arn = $_POST['arn'];
    $modelos = $_POST['modelos'];
    $familias = $_POST['familias'];
    $problema = $_POST['problema'];
    $solucao = $_POST['solucao'];

    foreach ($_FILES["userfile"]["error"] as $key => $error)
    {      
        if ($error == UPLOAD_ERR_OK)
        {           
            $fileName = $_FILES['userfile']['name'][$key];
            $tmpName = $_FILES['userfile']['tmp_name'][$key];
            $fileSize = $_FILES['userfile']['size'][$key];
            $fileType = $_FILES['userfile']['type'][$key];

            $folderName = $_POST['arn'] . "/";

            if (!file_exists ( $uploadDir . $folderName )) {
            $arnFolder = mkdir($uploadDir . $folderName, 0777);
            }

            $filePath = $uploadDir . $folderName  . basename($fileName);

            $result = move_uploaded_file($tmpName, $filePath);

            if (!$result) {
            echo "Error adding Files";
            exit;
            }

            include 'includes/connection.php';

            $fileName = addslashes($fileName);
            $filePath = addslashes($filePath);

            if (!file_exists ($fileName)) {

            $info = array ($fileName , $fileSize , $fileType , $filePath , $fileArn );

            $sth = $dbh->prepare("INSERT INTO upload2 (name, size, type, path , id_arn ) VALUES ( ? , ? , ? , ? , ? )");
            $sth->execute($info);
            }
        }

        } //END OF LOOP

        $parametros = array($arn,$modelos,$familias,$problema,$solucao);

        $sth = $dbh->prepare("INSERT INTO arn_info (arn , modelos , familias , problema , solucao) VALUES ( ? , ? , ? , ? , ? )");

        $sth->execute($parametros); 

        if($sth){
            header("location: admin.php?inserted=1");
        }
}
?>

我的上传和插入PHP:

<?php
$sth = $dbh->query("SELECT * FROM arn_info");

    $sth->setFetchMode(PDO::FETCH_ASSOC);

    if($sth){
        $row = $sth->fetch();

        echo '<form method="post" action="upload.php" enctype="multipart/form-data" >';
        echo '<input type="hidden" name="id" />';
        echo 'ARN: <input type="text" name="arn" /><br />';
        echo 'Familias: <input type="text" name="familias" /> <br />';
        echo 'Problema: <textarea class="tinymce" name="problema" cols="30" rows="10">';
        echo '</textarea>';
        echo 'Solução: <textarea class="tinymce" name="solucao" cols="30" rows="10">';
        echo '</textarea>';

        echo '<input type="hidden" name="MAX_FILE_SIZE" value="2000000">';
        echo 'Anexos: <input name="userfile[]" type="file" class="multi" id="userfile">';

        echo '<input name="upload" type="submit" class="box" id="upload" value="ADD ARN">';
        echo '</form>';

     }
?>
<?php

if(isset($_POST['upload']))
{
    $uploadDir = 'uploads/';

    $fileArn = $_POST['arn'];
    $id = $_POST['id'];
    $arn = $_POST['arn'];
    $modelos = $_POST['modelos'];
    $familias = $_POST['familias'];
    $problema = $_POST['problema'];
    $solucao = $_POST['solucao'];

    foreach ($_FILES["userfile"]["error"] as $key => $error)
    {      
        if ($error == UPLOAD_ERR_OK)
        {           
            $fileName = $_FILES['userfile']['name'][$key];
            $tmpName = $_FILES['userfile']['tmp_name'][$key];
            $fileSize = $_FILES['userfile']['size'][$key];
            $fileType = $_FILES['userfile']['type'][$key];

            $folderName = $_POST['arn'] . "/";

            if (!file_exists ( $uploadDir . $folderName )) {
            $arnFolder = mkdir($uploadDir . $folderName, 0777);
            }

            $filePath = $uploadDir . $folderName  . basename($fileName);

            $result = move_uploaded_file($tmpName, $filePath);

            if (!$result) {
            echo "Error adding Files";
            exit;
            }

            include 'includes/connection.php';

            $fileName = addslashes($fileName);
            $filePath = addslashes($filePath);

            if (!file_exists ($fileName)) {

            $info = array ($fileName , $fileSize , $fileType , $filePath , $fileArn );

            $sth = $dbh->prepare("INSERT INTO upload2 (name, size, type, path , id_arn ) VALUES ( ? , ? , ? , ? , ? )");
            $sth->execute($info);
            }
        }

        } //END OF LOOP

        $parametros = array($arn,$modelos,$familias,$problema,$solucao);

        $sth = $dbh->prepare("INSERT INTO arn_info (arn , modelos , familias , problema , solucao) VALUES ( ? , ? , ? , ? , ? )");

        $sth->execute($parametros); 

        if($sth){
            header("location: admin.php?inserted=1");
        }
}
?>

如果我附加了一个或多个文件,一切正常

谢谢

致命错误:对C:\wamp\www\arn中的非对象调用成员函数prepare() \第60行上载.php

看来你的$sth不是一个对象。如果您想看到更具描述性的消息,则必须告诉PDO您确实希望看到错误。尝试以下操作(可能在“connection.php”中):


在您的文件中找不到
$dbh
的定义。因此,该变量不存在,您无法对其调用
prepare()
方法。

我的错,以上是很好的一般建议,但不是问题的原因。这个问题是由于在循环中包含了连接,如果没有文件上传,这个连接将永远不会执行。以下是修复方法:

<?php

include 'includes/connection.php';

if(isset($_POST['upload']))
{
    $uploadDir = 'uploads/';

    $fileArn = $_POST['arn'];
    $id = $_POST['id'];
    $arn = $_POST['arn'];
    $modelos = $_POST['modelos'];
    $familias = $_POST['familias'];
    $problema = $_POST['problema'];
    $solucao = $_POST['solucao'];

    foreach ($_FILES["userfile"]["error"] as $key => $error)
    {      
        if ($error == UPLOAD_ERR_OK)
        {           
            $fileName = $_FILES['userfile']['name'][$key];
            $tmpName = $_FILES['userfile']['tmp_name'][$key];
            $fileSize = $_FILES['userfile']['size'][$key];
            $fileType = $_FILES['userfile']['type'][$key];

            $folderName = $_POST['arn'] . "/";

            if (!file_exists ( $uploadDir . $folderName )) {
            $arnFolder = mkdir($uploadDir . $folderName, 0777);
            }

            $filePath = $uploadDir . $folderName  . basename($fileName);

            $result = move_uploaded_file($tmpName, $filePath);

            if (!$result) {
            echo "Error adding Files";
            exit;
            }

            $fileName = addslashes($fileName);
            $filePath = addslashes($filePath);

            if (!file_exists ($fileName)) {

            $info = array ($fileName , $fileSize , $fileType , $filePath , $fileArn );

            $sth = $dbh->prepare("INSERT INTO upload2 (name, size, type, path , id_arn ) VALUES ( ? , ? , ? , ? , ? )");
            $sth->execute($info);
            }
        }

        } //END OF LOOP

        $parametros = array($arn,$modelos,$familias,$problema,$solucao);

        $sth = $dbh->prepare("INSERT INTO arn_info (arn , modelos , familias , problema , solucao) VALUES ( ? , ? , ? , ? , ? )");

        $sth->execute($parametros); 

        if($sth){
            header("location: admin.php?inserted=1");
        }
}
?>


我在定义$dbh的地方有一个include,如果我像另一个答案中所说的那样附加文件,那么include是在错误的地方完成的。