我首先使用示例编码进行文件上传。输入数据后,显示错误。像
已成功连接上传: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>
答案 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注入。此外,之后建议您使用框架。