我试图在'$ class'变量上使用!isset来查看它是否有值,然后将mysql_query函数作为基础。但这是不行的。看错了什么?
<?php session_start();
$heyyou = $_SESSION['usern'];
$points = $_SESSION['points'];
$school = $_SESSION['school'];
$class = $_POST['class'];
$prof = $_POST['prof'];
$date = $_POST['dater'];
$fname = $_FILES['fileToUpload']["name"];
?>
<div id='contenttext' class='contenttext'>
<?php
@mysql_select_db($database) or die( "Unable to select database");
$query = "INSERT INTO uploadedfiles (usename, filename, date, teacher, class) VALUES ('$heyyou', '$fname', '$date', '$prof', '$class')";
if (!isset($class)){
echo 'You need to pick a class for the content'; }
else{
mysql_query($query); }
mysql_close();
?>
<?php
if (($_FILES["fileToUpload"]["type"] == "image/gif" || $_FILES["fileToUpload"]["type"] == "image/jpeg" || $_FILES["fileToUpload"]["type"] == "image/png") && $_FILES["fileToUpload"]["size"] < 10000000)
{
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"upload/" . $_FILES["fileToUpload"]["name"]);
echo "Your file has successfully been uploaded, and is awaiting moderator approval for points." . "<html><br><a href='uploadfile.php'>Upload more.</a>";
}
else
{
echo "Files must be either JPEG, GIF, or PNG and less than 10,000 kb";
}
?>
</div>
</body>
</html>
答案 0 :(得分:1)
您的代码存在两个主要的安全问题:
['type']
和['name']
字段完全由用户控制,并且在上传PHP脚本的同时破解上传以说它是gif是微不足道的。然后,您可以使用用户提供的文件名,WHICH CAN CONTAIN PATH INFORMATION,并将其直接转储到您的服务器。这使得恶意用户可以在服务器上的任何位置上传任何文件。小点#3:
您不检查数据库查询是否成功。永远不要假设查询成功。即使SQL语句完全有效,也有太多其他原因导致它无论如何都会失败。始终使用... = mysql_query(...) or die(mysql_error())
作为最小错误处理程序检查查询调用。
答案 1 :(得分:0)
可能是因为您正在设置$ class。试试if (empty($class)){
答案 2 :(得分:0)
我可能错了,但是课程是一个保留字,请尝试另一个名字和$ class!=“”
http://www.php.net/manual/en/reserved.keywords.php
BTW删除你的数据库Conect信息请告诉我们我很好,但有些读这篇文章的人可能不是。 ;-)
答案 3 :(得分:0)
尝试此操作,首先初始化所有变量,然后分配POST
值。
例如:
$class='';
$class = $_POST['class'];
if (!isset($class)){
echo 'You need to pick a class for the content';
}
答案 4 :(得分:0)
您不能使用$ class,因为class是保留的关键字。 这也可能有用:
$query = "INSERT INTO uploadedfiles (usename, filename, date, teacher, class) VALUES ($heyyou, $fname, $date, $prof, $class)";
由于双引号可以理解变量内部的变量。 另一个想法是date是一个MySQL保留的关键字。 Finlly试着看看$ _POST ['class'];像这样的内容: echo $ _POST ['class']; 因为也许你忘记给你的html元素命名。
答案 5 :(得分:0)
由于$ class = $ _POST ['class'],总是设置变量$ class。所以isset($ class)将始终为true,无论类发布值如何。请注意以下陈述中的差异:
$class = '';
if (isset($class)) {
echo 'a';
}
if($class) {
echo 'b';
}
the output is: a
//replace this:
if (!isset($class)){
echo 'You need to pick a class for the content'; }
else{
mysql_query($query);
}
//with this:
if (isset($class) && $class){
mysql_query($query);
else{
echo 'You need to pick a class for the content'; }
}