2011-03-21 96 views
1

我想在'$ class'變量上使用!isset來查看它是否有值,然後將mysql_query函數作爲基礎。但這是不行的。看到有什麼不對?如果語句在mysql查詢

<?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

最新問題? probs最好不要發佈您的數據庫細節了;) – 2011-03-21 18:26:37

回答

0

可能是因爲$ class正在被你設定。嘗試if (empty($class)){

+0

我明白了,我有點後錯了。感謝您的新功能 – Shawn 2011-03-21 18:28:15

0

我也許錯了,但類是保留字換個名稱和$類!=「」

http://www.php.net/manual/en/reserved.keywords.php

BTW刪除您DB瞬移信息,請大家我是很好的,但一些人讀這可能不是。 ;-)

+1

儘管您無法使用保留關鍵字創建常量或函數,但您可以*創建一個與關鍵字具有相同名稱的變量。 – Charles 2011-03-21 18:40:12

+0

感謝您的澄清。 – webLacky3rdClass 2011-03-21 18:47:08

0

試試這個,首先初始化所有變量,然後分配POST值。 如:

$class=''; 
$class = $_POST['class']; 
if (!isset($class)){ 
    echo 'You need to pick a class for the content'; 
} 
+0

這是無用的一步。一個變量在第一次分配時創建。你所做的只是創建一個空的字符串。 – 2011-03-21 18:49:38

1

兩個主要安全問題與您的代碼:

  1. 你是SQL注入攻擊(見:http://bobby-tables.com/)敞開
  2. 你盲目信任的用戶不惡意的文件上傳。 ['type']['name']字段完全處於用戶控制之下,並且在上傳PHP腳本的同時,將上傳視爲gif並非易事。然後,您可以使用用戶提供的文件名,可以包含路徑信息,並將其直接轉儲到您的服務器。這給惡意用戶提供了一個機會,可以在服務器上的任何位置上傳他們想要的任何文件。

小點#3:

你不檢查數據庫查詢成功。永遠不要假設查詢成功。即使SQL語句是完全有效的,也有太多的其他原因可能會導致它無法正常運行。始終使用... = mysql_query(...) or die(mysql_error())作爲最低限度的錯誤處理程序來檢查查詢調用。

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元素命名。

0

變量$ class總是因爲$ class = $ _POST ['class']而被設置。所以isset($ class)永遠是真的,無論類的發佈價值如何。請注意以下聲明中的差異:

$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'; } 
}