为什么PHP中的条件不起作用?

时间:2018-01-20 11:32:26

标签: php mysql

大家好,这是我编写的PHP代码,用于减少MySQL上的“Credit”表,当人们使用Credit来购买设施时。但我想当他们的“信用”为0时他们会得到错误“你的信用不够,请购买信用”。但我看到“回声”并没有给出这个错误!我的代码有什么问题?

<?php
if (session_id() == "")
{
   session_start();
}
if (!isset($_SESSION['username']))
{
   $accessdenied_page = '';
   header('Location: '.$accessdenied_page);
   exit;
}
$mysql_server = 'localhost';
$mysql_username = '*******';
$mysql_password = '******';
$mysql_database = '******';
$mysql_table = 'details2';
$success_page = 'League.php';
$username = 'username';
$db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
      if (!$db)
      {
         die('Failed to connect to database server!<br>'.mysql_error());
      }
      mysql_select_db($mysql_database, $db) or die('Failed to select database<br>'.mysql_error());

$sql = "UPDATE `".$mysql_table."` SET `Credit` = `Credit` - 20  WHERE `username` = `".$username."` AND `Credit` >= 20";

mysql_query($sql, $db);


header('Location: '.$success_page);
exit;
?> 

2 个答案:

答案 0 :(得分:1)

首先,我将解决您的初始问题

您遇到的问题是,UPDATE查询是以某种方式构建的,它始终会更新表。如果我们仔细查看各个部分,您可以看到差异。

SET `Credit` = IF(Credit > 0, Credit - 20, 0) 

SET部分,您将根据if条件覆盖Credit列中的值。 if条件总是返回一个值。如果Credit的值为0或更小,它将被覆盖为0,而在所有其他情况下它将减少20。这意味着无论如何都会有更新。

WHERE `username` = $username

where子句限制被覆盖的行,但只是将username列与给定的用户名进行比较。

因此,要将UPDATE限制为只有具有给定用户名和适当信用额度的行,您需要将这两个条件打包到WHERE UPDATE块中} query:

UPDATE table 
SET `Credit` = `Credit` - 20 
WHERE `username` = $username AND `Credit` >= 20;

在这种情况下,只会更新那些包含给定用户名并且还有足够信用的行。

其他问题

您正在使用已弃用的数据库函数。这意味着,这些功能不符合当今的标准。您应该了解mysqli prepared statementsPDO prepared statements以使用现代工具。

答案 1 :(得分:0)

<?php
if (session_id() == "")
{
   session_start();
} 
if (!isset($_SESSION['username']))
{
   $accessdenied_page = '';
   header('Location: '.$accessdenied_page);
   exit;
}

// NOTE: your $username should be reflected in the actual username from the User...
$username = 'username';    
$success_page = './League.php';
$dbservername = 'localhost';
$dbusername = 'bceus_user';
$dbpassword = 'password';
$dbname = 'bceus_data';
$dbtable = 'details2';
$conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "Select Credit from `".$dbtable."` WHERE `username` = `".$username."`";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        if ($row['Credit'] < 20) {
            echo "Your Credit is not Enough , Please Buy a Credit";
        }    
        else {
           $sql2 = "update `".$dbtable."` set Credit = Credit - 20 WHERE `username` = `".$username."`";
           $conn->query($sql2);
        }
    }
} else {
    echo "0 results";
}
$conn->close();
header('Location: '.$success_page);
exit;
?>