if语句对mysql的查询

时间:2011-03-21 18:23:12

标签: php mysql-management

我试图在'$ 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>

6 个答案:

答案 0 :(得分:1)

您的代码存在两个主要的安全问题:

  1. 您对SQL注入攻击持开放态度(请参阅:http://bobby-tables.com/
  2. 您一味地相信用户对文件上传没有恶意。 ['type']['name']字段完全由用户控制,并且在上传PHP脚本的同时破解上传以说它是gif是微不足道的。然后,您可以使用用户提供的文件名,WHICH CAN CONTAIN PATH INFORMATION,并将其直接转储到您的服务器。这使得恶意用户可以在服务器上的任何位置上传任何文件。
  3. 小点#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'; }
}