Php 在数据库目录中上载图像
我在数据库目录中的图像上载有点问题。图像上载我的头像文件夹,不能显示我的页面,因为问题是在数据库id中,用户名表显示我的数据,但imagelocation表不能显示我的目录。请任何人告诉我,我的代码中有什么问题,请更正它指定行 upload.phpPhp 在数据库目录中上载图像,php,Php,我在数据库目录中的图像上载有点问题。图像上载我的头像文件夹,不能显示我的页面,因为问题是在数据库id中,用户名表显示我的数据,但imagelocation表不能显示我的目录。请任何人告诉我,我的代码中有什么问题,请更正它指定行 upload.php <?php include("connecton.php"); $_SESSION['username']="kyle"; $username = $_SESSION['username']; if($_POST['su
<?php
include("connecton.php");
$_SESSION['username']="kyle";
$username = $_SESSION['username'];
if($_POST['submit'])
{
//get file attribute
$name = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];
if($name)
{
//start upload process
$location = "avatars/$name";
move_uploaded_file($tmp_name,$location);
$query = mysql_query("UPDATE users SET imagelocation='$location' WHERE username='$username'");
die("Your avatar has been uploaded! <a href='view.php'>HOme</a>");
}
else
die("Please select a file");
}
echo "Welcome, ".$username."!<p>";
echo "Upload Your Image:
<form action='upload.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile'> <input type='submit' name='submit' value='upload!'>
</form>
";
?>
<?php
include("connecton.php");
$username = $_SESSION['username'];
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
if (mysql_num_rows($query)==0)
die ("User not found");
else
{
$row = mysql_fetch_assoc($query);
$location = $row['imagelocation'];
echo "<img src='$location' width='100' height='100'>";
}
?>
upload.php和view.php的第一个php语句应该是:
session_start();
a) 您不检查上载是否成功。至少做一些类似的事情:
if ($_FILES['myfile']['error'] === UPLOAD_ERR_OK) {
... upload went ok
}
b) 您正在使用原始用户的文件名将其存储在服务器上,并且未对文件名进行清理。没有任何东西可以阻止恶意用户设置文件名,例如。/../../../../../../../../../../../../some/critical/system/file
,然后您的脚本将愉快地覆盖该文件名
c) 您没有检查移动上传的文件()
是否成功:
if (!move_uploaded_file(...)) {
die("Move failed!")
}
$stmt = mysql_query(...)
if ($stmt === FALSE) {
die("MySQL query failed: " . mysql_error());
}
d) 您不检查数据库查询是否成功:
if (!move_uploaded_file(...)) {
die("Move failed!")
}
$stmt = mysql_query(...)
if ($stmt === FALSE) {
die("MySQL query failed: " . mysql_error());
}
e) 您尚未清理$filename
,因此恶意用户可以再次破坏您的查询并使用SQL注入攻击直接攻击您的数据库
f) 您正在执行
选择*FROM…
以获取图像的位置。是否确定表中包含“imagelocation”行?您没有使用同一行检查insert查询是否成功,因此可能是输入错误,而实际上是“imglocation”。正确提问的问题包含50%的答案。你的问题甚至没有问题描述。