文件上传时出现PHP错误

时间:2014-02-06 08:39:22

标签: php

我首先使用示例编码进行文件上传。输入数据后,显示错误。像

已成功连接上传:bottom.png 输入:image / png 大小:5.7373046875 kB 存储在:C:\ xampp \ tmp \ phpD383.tmp 注意:未定义的索引:第53行的C:\ xampp \ htdocs \ Deen_php \ sample.php中的文件 无法输入数据:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的')'附近使用正确的语法

PHP

<?php
if(isset($_POST['insert']))
{
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = 'root';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';


$allowedExts = array("gif", "jpeg", "jpg", "png","txt");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/txt"))
&& ($_FILES["file"]["size"] < 50000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }

$num = $_POST['num'];
$name = $_POST['name'];
$age = $_POST['age'];
$file = $_POST['file'];



$sql = "INSERT INTO sample ".
       "(num,name,age,file1) ".
       "VALUES('$num','$name',$age, $file)";

mysql_select_db('test_db');

$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}

echo "Entered data successfully\n";
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "C:/" . $_FILES["fileToUpload"]["name"]);

mysql_close($conn);

}
?>

HTML

<form action="<?php $_PHP_SELF ?>" method="POST" enctype="multipart/form-data">
  Num: <input type="text" name="num" />
  Name: <input type="text" name="name" />
  Age: <input type="text" name="age" />
  File Upload<input name="file" type="file" /><br />
  <input type="submit" id="insert" name="insert" value="Submit" />
</form>

4 个答案:

答案 0 :(得分:2)

您无法通过$ _POST访问file类型的输入,可以通过$ _FILES访问,如代码中所示。

如果您想存储文件名,可以

$file = $_FILES["file"]["tmp_name"];

此外,如果您将字符串传递给db,请将它们用引号括起来,就像您在$name$num的查询中所做的那样。

注意:请记住,不推荐使用mysql_ *函数。所以尝试使用mysqli或PDO

答案 1 :(得分:0)

我认为问题是你的sql语法。改为:

$sql = "INSERT INTO sample (num,name,age,file1) VALUES('$num','$name', '$age', '$file')";

答案 2 :(得分:0)

fileToUpload更改为file

来自

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "C:/" . $_FILES["fileToUpload"]["name"]);

move_uploaded_file($_FILES["file"]["tmp_name"], "C:/" . $_FILES["file"]["name"]);

===========================================

也改变了sql格式。

   $sql = "INSERT INTO sample (num,name,age,file1) VALUES('$num','$name', '$age', '$file')";

=============================================== =============

同时更改文件名

$file = $_POST['file'];

$file = $_FILES["file"]["name"]

=============================================== ==================

通过在项目文件夹中创建上传目录来更改存储路径。

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

答案 3 :(得分:0)

你想要什么?

如果要存储文件内容,则应使用file_get_contents代替move_uploaded_file。要获得临时名称$_FILES["file"]["tmp_name"]。直接从这个文件中读取。

如果要永久存储保存文件并保存此文件的路径,请使用move_uploaded_file和我们自己的名称(不必$_FILES["file"]["name"])并保存您传递的路径(或路径的有意义部分)到move_uploaded_file。 无论如何都不会设置$_POST['file']

您在MySQL查询中忘记了引号。

另外,您编写了$_FILES["fileToUpload"]["tmp_name"](其他数组键)。

对于内容类型(MIME),也使用数组。

您应该使用$ext = pathinfo($filename, PATHINFO_EXTENSION);进行文件扩展。

只有正确且不被弃用的MySQL工作方式才是带有预处理语句的PDO。您的代码允许SQL注入。此外,之后建议您使用框架。