二进制值没有通过PHP在数据库中更新

时间:2012-05-18 08:20:21

标签: php mysql

我正在尝试更新状态onclick。在显示功能中,我已经给出了这样的

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());
}        
}

但我没有得到任何结果而不是错误...请帮助我,我错了

2 个答案:

答案 0 :(得分:0)

在MySQL中,您没有truefalse,只有01INT)。因此,将您的查询更改为以下内容:

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

此外,我在第一段代码中看到 正确 执行此操作:如果行处于活动状态,则打印一个取消激活的链接({ {1}}),反之亦然。

但是在第二段代码中,您获得了必须在if 1 then print 0变量中设置的值,然后再次说出$status。这是个错误。实际上,这种方式总是运行一个UPDATE查询,将活动状态设置为当前值,因为双重交换

也就是说,尝试在第二段代码中交换查询,如下所示:

if 1 then store 0

答案 1 :(得分: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。您现在正在插入用户输入而无需事先验证,这很危险。用户可以很容易地在一个命令中激活或取消激活所有类别。