繁体   English   中英

文件上传时出现PHP错误

[英]PHP error at file upload

我正在使用第一个和样本编码文件上传。 输入数据后,显示错误。 喜欢

已成功连接上传: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>

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

如果要存储文件名,可以执行此操作

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

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

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

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

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

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"]);

你想要什么?

如果要存储文件内容,则应使用file_get_contents而不是move_uploaded_file 要获取临时名称,请使用$_FILES["file"]["tmp_name"] 直接从此文件中读取。

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

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

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

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

您应该使用$ext = pathinfo($filename, PATHINFO_EXTENSION);获得文件扩展$ext = pathinfo($filename, PATHINFO_EXTENSION);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM