Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件\获取\内容():文件名不能为空(上传文件是可选的)_Php_Html_Mysql - Fatal编程技术网

Php 文件\获取\内容():文件名不能为空(上传文件是可选的)

Php 文件\获取\内容():文件名不能为空(上传文件是可选的),php,html,mysql,Php,Html,Mysql,我是php新手。我用php制作了一个简单的上传表单。这是我的密码 <html><head></head> <body> <form method="post" action="" enctype="multipart/form-data"> Upload File: <input type="file" name="upload" /><br> <input type="sub

我是php新手。我用php制作了一个简单的上传表单。这是我的密码

<html><head></head>
<body>

<form method="post" action="" enctype="multipart/form-data">

    Upload File:
    <input type="file" name="upload" /><br> 
    <input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>

<?php
include("config.php");

if(isset($_POST['submit'])  )
{


$filename = $con->real_escape_string($_FILES['upload']['name']);
$filedata= $con->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));
$filetype = $con->real_escape_string($_FILES['upload']['type']);
$filesize = intval($_FILES['upload']['size']);

if ($_FILES['upload']['name'] == 0 ){

echo "<br><br> New record created successfully";

}

else {

    $query = "INSERT INTO contracts(`filename`,`filedata`, `filetype`,`filesize`) VALUES ('$filename','$filedata','$filetype','$filesize')" ;

    if ($con->query($query) === TRUE) {
    echo "<br><br> New record created successfully";
    } else {
    echo "Error:<br>" . $con->error;
    }

}
$con->close(); 
}   

?>
它很好用。但是,如果我在没有附加任何文件的情况下按submit,它会在第20行的C:\xampp\htdocs\contractdb\filetest.php中显示错误,警告:file\u get\u contents:Filename不能为空

我想上传文件是可选的,因为不是每个用户都有附加的文件。我还希望用户在上传后下载文件,而不删除文件\u get\u contents$\u files['upload']['tmp\u name']

我该怎么做?

试试这个:

if (isset($_POST['submit']) & ($_FILES['upload']['name']!=''))
{
    // Statement
}

您的检查应在调用file_get_content之前进行,这样它不会引发错误,并且您只在文件输入不为空时调用函数:

if(isset($_POST['submit'])  ) {

if ($_FILES['upload']['size'] != 0 ) {

  $filename = $con->real_escape_string($_FILES['upload']['name']);
  $filedata= $con->real_escape_string(file_get_contents($_FILES['upload']
  ['tmp_name']));
  $filetype = $con->real_escape_string($_FILES['upload']['type']);
  $filesize = intval($_FILES['upload']['size']);


  $query = "INSERT INTO contracts(`filename`,`filedata`, `filetype`,`filesize`) VALUES ('$filename','$filedata','$filetype','$filesize')" ;

  if ($con->query($query) == TRUE) {
   echo "<br><br> New record created successfully";
  } else {
   echo "Error:<br>" . $con->error;
  }

 } 

 else {
   echo 'error: empty file';
 }
}

isset$_POST['submit']&isset$_文件['upload']?您可以使用isset for files添加另一个if语句,两个单独的查询。@如果我添加了isset$\u POST['submit']&&isset$\u files['upload'],它仍然显示相同的错误?我还尝试了两个独立的查询,但它仍然显示相同的错误。还是我做错了?@AmrAly我编辑了问题中的代码。我做对了吗?对不起,我是新手,所以我不知道我做得对不对。