[英]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.