Php 从HTML表单上载文件时出错

Php 从HTML表单上载文件时出错,php,html,Php,Html,这里有个问题。 我有一个HTML表单,其中有几个字段。 其中一个字段-“上载文件”。 当我上传文件时,一切正常。但当我选择在没有文件的情况下提交表单时,会显示错误消息:“上传文件时出错,请重试”。在我看来,脚本认为上传文件是必需的。 我如何改变它 以下是我的PHP: //File upload // Where the file is going to be placed $target_path = "uploads/"; // Add the original filename to

这里有个问题。 我有一个HTML表单,其中有几个字段。 其中一个字段-“上载文件”。 当我上传文件时,一切正常。但当我选择在没有文件的情况下提交表单时,会显示错误消息:“上传文件时出错,请重试”。在我看来,脚本认为上传文件是必需的。 我如何改变它

以下是我的PHP:

//File upload

// Where the file is going to be placed 
$target_path = "uploads/";

// Add the original filename to our target path.  
//Result is "uploads/filename.extension" 
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}   

//End of file upload

谢谢大家!

您应该使用功能检查是否上载了文件

在调用函数move\u upload\u file之前,请尝试添加以下条件

if (is_uploaded_file($_FILES['uploadedfile']['tmp_name'])) {
返回布尔值,
true
false
,具体取决于操作的成功与否

解决方案是更严格地检查,例如,是否通过函数上传了文件

为了正常工作,函数
是上传的文件()
需要像
$\u FILES['userfile']['tmp\u name']
这样的参数,客户端计算机上上传的文件名
$\u FILES['userfile']['name']
不起作用


移动上传文件的目标路径应该是文件夹,而不是文件


您还应该检查文件夹是否可写,是否为dir。

这已成功,谢谢!不过,现在还有另一个问题。我希望该文件在作为电子邮件附件发送后在目录中被删除。当上传文件时,一切正常。但如果没有,我会收到以下错误消息:警告:unlink(uploads/)[function.unlink]:是第191行/mydomain.com/hawai/html/contact_email.php中的一个目录,如何解决它?如果这些帖子解决了这个问题,请接受一个答案,并在后续问题中提出另一个问题。通过评论和编辑,这比问答更受欢迎。这很有效,谢谢!不过,现在还有另一个问题。我希望该文件在作为电子邮件附件发送后在目录中被删除。当上传文件时,一切正常。但是如果没有,我会收到以下错误消息:警告:unlink(uploads/)[function.unlink]:是第191行/mydomain.com/hawai/html/contact_email.php中的目录吗?如何修复它?函数unlink的参数必须是一个文件。。在您的情况下,您传递了“uploads/”这是一个文件夹。如何定义该文件?我尝试了一些方法,但都不起作用。另外,当我使用$target_path时,文件实际上会从文件夹中删除,而当我使用file变量时,则不会。我想,也许我应该做一个类似的检查:如果(is_uploaded_file($uploadedfile']['tmp_name']){你到底把unlink函数调用放在哪里了?就在电子邮件发送之后://Send the message$numSent=$mailer->Send($message);printf(“sent%d messages\n”,$numSent);unlink($target\u path);