Php mysql数据库的更新逻辑存在问题

Php mysql数据库的更新逻辑存在问题,php,sql,mysql,Php,Sql,Mysql,我有下面的PHP表单,它发回mysql数据库。我的问题是更新查询似乎有效,但总是被“checked”覆盖。我要做的是检查从数据库中获取当前值,然后如果post中有值,则获取该值。现在…为什么这不起作用?当我检查它是否在POST中时,是否需要一个else子句?如果是这种情况,我是否需要使用$checkDeleted=“”;)初始化变量 编辑:好的,我已经设法让这项工作,但只有在更改为之后 $checkDeleted=在数组中('deleted',$checkbox)?'勾选“:” 根据下面的答案,

我有下面的PHP表单,它发回mysql数据库。我的问题是更新查询似乎有效,但总是被“checked”覆盖。我要做的是检查从数据库中获取当前值,然后如果post中有值,则获取该值。现在…为什么这不起作用?当我检查它是否在POST中时,是否需要一个else子句?如果是这种情况,我是否需要使用$checkDeleted=“”;)初始化变量

编辑:好的,我已经设法让这项工作,但只有在更改为之后

$checkDeleted=在数组中('deleted',$checkbox)?'勾选“:”

根据下面的答案,但这仍然不起作用。为了让它工作,我必须删除数据库查询,并将其替换为submitinfo分支中的一个查询,以及EditStatusData分支中的一个查询……为什么?为什么不可能只有一个查询

if($cmd=="submitinfo") {

$getformdata = $con->query("select ARTICLE_NO from STATUS where ARTICLE_NO = '$pk'");

while ($row = mysqli_fetch_assoc($getformdata)) {
    $ARTICLE_NO = $row['ARTICLE_NO'];
}    
    if ($ARTICLE_NO == null) { etc


这仅在您获取数据时有效:

$getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");

在您的代码中,如果您的请求是POST,则不会设置$pk。您还应该转义此行中的$pk变量,因为用户可以将他们喜欢的任何数据放入$\u GET['pk']中,这可能会破坏您的SQL查询

这与你的另一个问题几乎相同

代码没有问题,它完全按照您的要求工作

我要做的是从数据库中获取当前值,然后如果post中有值,则获取该值

案例1:不带勾号的html表单

  • 从数据库读取$checkDeleted='checked'
  • 如果未设置$u POST['checkbox']['deleted'],请保持$checkDeleted不变
  • 将“已检查”写入数据库
  • 案例2。带勾号的html表单

  • 从数据库读取$checkDeleted='checked'
  • 如果设置了$_POST['checkbox']['deleted'],则更改$checkDeleted='checked'
  • 将“已检查”写入数据库
  • 因此,无论是否有勾号,一旦将数据库值更改为checked then,就没有办法更改它

    在这种情况下,我将假设您要做的是始终使用勾选框设置的任何内容覆盖数据库值

    更换这条线

     if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';
    
    用这个

     $checkDeleted = in_array('deleted', $checkboxes) ? 'checked' : '';
    

    “($_GET[“pk”])”行只有在它是GET请求时才为真。此外,pk将始终通过GET设置,因为页面始终使用pk参数调用。需要注意清理..因此,要使其工作,数据库查询必须在检查它是否在数组中之后进行?在上面的示例中,如果它不在数组中,我实际上正在尝试将字段设置为“”,那么为什么它不工作呢?
    $getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");
    
     if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';
    
     $checkDeleted = in_array('deleted', $checkboxes) ? 'checked' : '';