我正在尝试更新状态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());
}
}
但我没有得到任何结果而不是错误...请帮助我,我错了
答案 0 :(得分:0)
在MySQL中,您没有true
和false
,只有0
和1
(INT
)。因此,将您的查询更改为以下内容:
$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。您现在正在插入用户输入而无需事先验证,这很危险。用户可以很容易地在一个命令中激活或取消激活所有类别。