2012-05-18 54 views
0

我試圖更新狀態onclick。在顯示功能,我給這樣的二進制值未通過php更新數據庫中

if($row['IsActive']=="1") 
{ 
    echo "<td> <a href='managecategories.php?IsActive=0&CategoryID=" .$row['CategoryID']. "'>Active</a></td>"; 
} 
else 
{ 
    echo "<td> <a href='managecategories.php?IsActive=1&CategoryID=" .$row['CategoryID']. "'>Deactive</a></td>"; 
} 

並加載它應該得到的數據庫狀態的頁面,爲我寫了這樣的代碼

 if (isset($_GET['IsActive'])) 
{ 
$status = $_GET['IsActive']; 
$id = $_GET['CategoryID']; 
if($status =="0") 

{ 

$sql = "update Categories set IsActive= 0 where CategoryID='$id'"; 
     $result = mysql_query($sql) or die("Could not insert data into DB: " . mysql_error()); 
}   
else 
if($status =="1") 
{ 
$sql = "update Categories set IsActive= 1 where CategoryID='$id'"; 
     $result = mysql_query($sql) or die("Could not insert data into DB: " . mysql_error()); 
}   
} 

,但我沒有得到任何結果不錯誤...請HEL我在哪裏,我錯了

+0

是。第一次它將是數組(0){}但點擊第一個鏈接後,我得到了類似這個數組的結果(2){[「IsActive」] => string(1)「1」[「CategoryID」] =>字符串(2)「14」},但我沒有得到這是什麼。 – user1321271

+0

還沒有發生:( – user1321271

+1

'echo'你的'$ sql'查詢並查看它們輸出的內容,你也可以在你的else if($ status)'之後加一個'else',之後加上'else'檢查'if(isset($ _ GET ['isActive']))' - (把一些調試信息放在那裏或某些東西),這樣所有可能的事情都會被覆蓋,你可以看到發生了什麼 – billyonecan

回答

0

我會假設你正在使用的數據庫整數類型。我知道我會使用TINYINT作爲布爾值,因爲MySQL沒有布爾類型。 您的顯示功能if($row['IsActive']=="1")支持。但是,您的更新查詢$sql = "update Categories set IsActive= 'false' where CategoryID='$id'";沒有。在這裏你嘗試保存一個字符串值。

因此,您應該首先確保布爾值在數據庫中存儲爲TINYINT。 (字符串在PHP方面很難工作。)然後你需要確保你插入數據庫的值實際上是正確的類型。您應該使用0代表false,使用1代表true。這也將工作在PHP:

$isActive = 1; 
$if($isActive) { 
    // This code is run 
} 

另請注意,你應該驗證類別ID。您現在無需事先驗證即插入用戶輸入,這很危險。用戶通過單個命令激活或停用所有類別非常容易。

+0

我已經更改數據庫中的數據類型爲TYNYINT,它早一點。並從false將值更改爲0。仍然不工作:( – user1321271

+0

你也改變'true'到'1'嗎? – Arjan

+0

是的,我改變了它,我嘗試改變數據庫中的整型數據類型,它早先是tynyint,但它仍然是一樣的 – user1321271

0

在MySQL中你沒有truefalse,但只有01INT)。因此,改變你的查詢是這樣的:

$sql = "update Categories set IsActive= 0 where CategoryID='$id'"; // FALSE 
$sql = "update Categories set IsActive= 1 where CategoryID='$id'"; // TRUE 

此外,我看到,在第一段代碼你正確做到這一點:如果排活躍打印一個鏈接,停用(if 1 then print 0)反之亦然。

但是在第二段代碼中,您需要在$status變量中設置的值,然後再次說明if 1 then store 0。這是個錯誤。實際上,通過這種方式,您總是會運行一個UPDATE查詢,該查詢將活動的狀態設置爲當前值,這是因爲雙交換

也就是說,試圖交換查詢第二一段代碼,像這樣:

if ($status == "0") 
{ 
    $sql = "update Categories set IsActive=0 where CategoryID='$id'"; 
    $result = mysql_query($sql) or die("Could not insert data into DB: " . mysql_error()); 
}   
else if($status == "1") 
{ 
    $sql = "update Categories set IsActive=1 where CategoryID='$id'"; 
    $result = mysql_query($sql) or die("Could not insert data into DB: " . mysql_error()); 
}   
+0

是的,我已經改變它爲0仍然沒有采取任何更新到數據庫。我不知道我在哪裏錯了 – user1321271

+0

@ user1321271看我的編輯。 –

+0

@ lirenzo-s:我編輯了我的代碼。請檢查我是否正確? – user1321271