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