为什么我在PHP中的条件不起作用?
大家好,这是我的PHP代码,当人们使用信用卡购买设备时,我为MySQL上的信用表编写了这段代码。但我想当他们的信用是0,他们得到的错误,你的信用是不够的,请购买一个信用。但我看到echo没有给出这个错误!我的代码中有什么问题为什么我在PHP中的条件不起作用?,php,mysql,Php,Mysql,大家好,这是我的PHP代码,当人们使用信用卡购买设备时,我为MySQL上的信用表编写了这段代码。但我想当他们的信用是0,他们得到的错误,你的信用是不够的,请购买一个信用。但我看到echo没有给出这个错误!我的代码中有什么问题 <?php if (session_id() == "") { session_start(); } if (!isset($_SESSION['username'])) { $accessdenied_page = ''; header('Loca
<?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;
?>
首先,我将解决您最初的问题
您遇到的问题是,更新查询是以某种方式构建的,它总是更新表。如果我们仔细观察各个部分,你会发现它们的区别
SET `Credit` = IF(Credit > 0, Credit - 20, 0)
在“设置部分”中,根据if条件覆盖“信用”列中的值。if条件始终返回一个值。如果信用值为0或更小,它将被覆盖为0,而在所有其他情况下,它将减少20。这意味着在任何情况下都会有更新
WHERE `username` = $username
where子句限制被覆盖的行,但只是将用户名列与给定用户名进行比较
因此,要将更新限制为仅包含给定用户名和合适信用额度的行,您需要将这两个条件打包到更新查询的WHERE块中:
在这种情况下,只有包含给定用户名且具有足够信用的行才会被更新
进一步的问题
您正在使用不推荐使用的数据库函数。这意味着,这些功能不符合当今的标准。您应该了解或使用现代工具。更新不是选择,换句话说,它不会返回数据。使用SELECT可获得剩余的积分。另外,你会希望有足够的信用来获得20,就像这样:credit=IFCredit>20,credit-20,credit.aw这意味着我应该为SELECT单独写另一个,对吗@KIKOSoftwareYes,更好的方法是,首先使用select来获得信用,使用PHP来查看用户是否有足够的信用,并且只有在这种情况下才进行更新。这样,您的更新更简单,并且在信用不足时不使用。您不应该使用mysql_query-研究并使用mysqli_query。不,不,当然不。你应该仔细检查手册,准确地理解你在做什么。阅读、学习、测试和尝试。永远不要做懒惰的事情。除了正确的选择,这段代码至少有两个问题。首先,当有足够的信用时没有更新,其次,在你看来,$Result<1有什么作用?试想一个用户想要20个学分的情况。@KIKOSoftware-虽然更新在OP代码中,但这似乎不是问题-OP错过了基本的,并且在问题中询问了关于不获取0个学分的错误-而不是关于修复整个代码逻辑,这需要更多关于如何发生的信息,等等。不可否认,我已经很久没有使用mysql语句了,我忽略了一个事实,那就是这里只有一个令人尴尬的表情符号…-我会修复它…@CFPSupport这段代码我尝试过它不是真的,它给出错误:$sql=Select Credits from.$mysql\u table.`WHERE username=.$username$结果=mysql\u查询$sql,$db;虽然$row=mysql\u fetch\u assoc$Result{如果$Result<1{回显您的信用不足,请购买信用;}mysql_free_result$result;`@CFPSupport我将上述代码编辑为true style,刚才我如何设置条件,如果信用不足,则会出现错误,并且我希望我们的客户在再次购买足够的信用之前不能购买任何项目。@CFPSupport代码的错误是,您的代码的一部分需要以true style编辑,可能是某些时候如果你忘了添加as`or或其他任何东西,那么你的指导真的可以帮助我这么多。我如何在PHP中设置条件,如果信用不够,就会出现错误,并且他们不能用信用购买任何贷款@PhilippMaurer@Jeyson您可以保留代码。只需更新sql函数和更新查询
WHERE `username` = $username
UPDATE table
SET `Credit` = `Credit` - 20
WHERE `username` = $username AND `Credit` >= 20;