【问题标题】:Executing Update script only if all checks are done仅在完成所有检查后才执行更新脚本
【发布时间】:2011-01-31 05:27:07
【问题描述】:

我有一个更新脚本,可以更新用户名、密码、电话、用户生成的 ID 等。假设用户决定更改他/她的电话,但不更改用户名。但是当他们去编辑他们的信息时,上面提到的所有字段都出现在表单上。因此,还与用户想要更改的内容一起提交。所以我使用下面的代码来检测它。因此,如果字段中的用户名与从会话中提取的用户名匹配,则表示可以继续,如果不是,则打印用户名已被使用。但问题是我必须运行此查询两次,一次用于用户名,一次用于用户的唯一 ID。此外,当更新脚本位于页面底部时,它会变得复杂。下面的代码将检测到它,但它们会在 echo 处停止。那么我该怎么做才能让代码检查这些条件,然后在成功完成后指向更新查询。

检查 1:

if ($username == $_POST['username') {
  echo "Good to go";
} else {
  echo "already in use";
}

检查2:

if ($usergenid == $_POST['usergenid') {
  echo "Good to go";
} else {
  echo "already in use";
}

【问题讨论】:

  • 你能改写一下吗,读了两遍,不知道你到底在问什么。
  • 我可以这样做吗: if ($postedusername == $dbusername) { else { ($postedid == $dbid) } else { } else { echo "已经在使用"; }

标签: php database forms comparison-operators


【解决方案1】:

也许我误解了这个问题,但你可以嵌套你的条件吗?

原创

$result = null;

if($username == $_POST['username']) 
{
   if($usergenid == $_POST['usergenid'])
   {

      /* perform update to user */
      $sql = 'UPDATE users SET username = ' . $_POST['username'] . ' WHERE id = ' . $_POST['usergenid'];
      if(mysql_query($sql))
      {
         $result = 'User updated';
      }
      else
      { 
         $result = 'Update failed';
      }

   }
   else
   {
      $result = 'User id already in use';
   }
} 
else 
{
  $result = 'Username already in use';
}

return $result;

如果 user_id 匹配则更新用户名

$result = null;

if($usergenid == $_POST['usergenid'])
{
   if($username != $_POST['username']) 
   {

      /* perform update to user */
      $sql = 'UPDATE users SET username = ' . $_POST['username'] . ' WHERE id = ' . $_POST['usergenid'];
      if(mysql_query($sql))
      {
         $result = 'username updated';
      }
      else
      { 
         $result = 'update failed';
      }

   }
   else
   {
      $result = 'username is the same, no update performed';
   }
} 
else 
{
  $result = 'user id does not match';
}

return $result;

【讨论】:

  • 太棒了。这部分是我正在寻找的。现在。如果两个条件都满足,我该如何执行 mysql update 命令?因为如果响应很好,我希望它直接更新脚本。如果响应已经在使用中,我希望修复它,然后再次点击提交,如果正确,它应该通过。
  • 有什么办法可以做到吗?如果答案很好,我可以执行 sql 查询而不是回显吗?而且我猜查询会不断重复,直到他们准备好...?
  • 我已经更新了代码示例,因为您已经“深入”到满足这两个条件的位置,您可以将更新放在该条件内......这不是最好的示例,因为我' 不完全确定这种情况,但我希望这至少有助于缩小条件范围和进行更新并返回您的代码走了多远的一些结果。您当然希望清理更新数据,而不是直接使用 $_POST
  • 请注意,此代码不会改变用户的任何内容,因为它使用两个未更改的值更新用户。如果您试图让用户更新他们的用户名,那么您将检查用户 ID 是否匹配,然后如果用户名不匹配,那么您将编写您的用户名更新查询,所以这个例子在这方面有点时髦,但是过程相同。我会另外添加那个场景......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2023-01-13
相关资源
最近更新 更多