2016-08-15 45 views
0

我试图显示一条消息,如果警报字段被隐藏,然后更新该字段,以便消息不能再次显示。值正在更新分贝,但消息仍然显示任何人都可以帮助我找出问题。提取查询问题

<?php 
$alrt="hidden"; 
$checkalert=mysql_query("SELECT * FROM user_shift_test WHERE userid='$_SESSION[userid]' AND alert='$alrt' "); 
if(!empty($checkalert)){ 
$updatealert=mysql_query("UPDATE user_shift_test SET alert='showed' WHERE userid='$_SESSION[userid]' "); 
?> 
<div class="alert" style="margin:10px;"> 
    Your shift is swapped. 
</div><?php } ?> 
+0

你启动* - 编辑“你知道吗?”我猜你没有这可能是你删除你的问题的原因。 –

+0

哦,所以现在你没有删除,为什么?你开始会议了吗? –

+0

不,我没有,我正在尝试的东西多数民众赞成,为什么我删除了我的问题,但它没有奏效多数民众赞成为什么我重新发布。 –

回答

1

有你的代码的几个问题:

  • 您使用过时mysql_功能:在过去3年,这些没有得到维护和PHP 7.xx.不存在您应该移动到mysqli_PDO;
  • 在SQL语句中注入字符串。这可能会使您容易受到SQL注入的影响。改用准备好的语句;
  • 测试!empty($checkalert)将始终为真,即使结果集为空。它是一个查询对象。这就是消息不断显示的原因(顺便说一句:不是显示为);
  • get-and-set操作可以在一个SQL操作中更好地完成,这将使您获得更好的性能。在条件更新之后,您可以检查记录是否已更新,如果是,则显示消息;

下面是代码,您首先需要移动到mysqli_功能(也可用于连接):

<?php 
// Perform update only if value is hidden 
$stmt = mysqli_prepare($con, 
    "UPDATE user_shift_test 
    SET alert = 'shown' 
    WHERE userid = ? 
    AND coalesce(alert, 'hidden') = 'hidden' "); 
if ($stmt) { 
    // pass session variable as argument 
    mysqli_stmt_bind_param($stmt, "s", $_SESSION['userid']); 
    mysqli_stmt_execute($stmt); 
    // check if any update was performed 
    if (mysqli_stmt_affected_rows($stmt)) { 
?> 
     <div class="alert" style="margin:10px;"> 
      Your shift is swapped. 
     </div> 
<?php 
    } 
} 
?> 
+0

是否有任何方式使用mysql,因为它目前正在使用一个旧数据库,并且它的所有代码都在mysql上。不在mysqli –

+0

即使我的连接文件在mysql上,我也可以应用mysqli吗? –

+0

@ S.MTalha,我建议你看看'PDO',它使用起来非常简单,而且更安全。 (如果使用正确ofcource)。 – Sj03rs