PHP+;MySQL问题:(
我的代码有问题:PHP+;MySQL问题:(,php,mysql,if-statement,Php,Mysql,If Statement,我的代码有问题: if ($_GET['offline']) {$extranet = $_GET['offline'];} else {$extranet = $online;} $sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'"); echo $_GET['offline']; echo $extranet; echo $online; 在数据库中,p
if ($_GET['offline']) {$extranet = $_GET['offline'];} else {$extranet = $online;}
$sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'");
echo $_GET['offline'];
echo $extranet;
echo $online;
在数据库中,property=extranet的字段的值为1。
回波结果:
$_GET['offline'] = 0
$extranet = 1
$online = 1
现在,很明显,这里出了点问题
提供此GET的URL是:?app=admincp&offline=0
,因此$\u GET['offline']
不是问题所在
问题一定出在if语句中,但我无法理解
有什么想法吗
if ($_GET['offline'])
这将返回false,因为字符串“0”在PHP中的计算结果为false,因此if语句的条件永远不能计算为true。请使用or。例如:
if (isset($_GET['offline'])) { ... }
或:
在您的情况下,您需要知道该值是否正是字符串零“0”。我建议使用:
$\u GET['offline']
在您提供的URL中为零,因此如果($\u GET['offline'])
和该块中的所有内容都不会被命中。请改用isset()
。$\u GET['offline']为0,0的计算结果为false,因此该语句正确。如果要检查脱机是否作为参数传递,则必须使用isset()
Yikes!除了karim的评论-清理您的输入!您正在获取一个URL参数,并将其直接放入SQL查询中
?app=admincp&offline=';DROP table tbl_system;--
会毁了你的
if (strcmp($_GET['offline'],"0") === 0) {
$extranet = $_GET['offline'];
} else {
$extranet = $online;
}
如果未设置$\u GET['offline'],则会引发错误,最好使用
!isset($\u GET['offline'])
是否有代码实际设置了extranet的值?我将重写此代码以使其更清晰。确保正确初始化变量,在任何条件之前以一个漂亮的字符串打印出来,在所有条件完成后以类似的字符串打印出来,并更新帖子。然后我们将能够更好地帮助您。如果我读对了,offline设置为0,extranet设置为$online的值,从1yep开始,我添加了(卫生)一旦我能保证原始代码正常工作:)ty Koning baard,@TJT,yep:)是的,我添加了一旦我能保证原始代码正常工作:)
if (!isset($_GET['offline'])) {$extranet = $_GET['offline'];} else {$extranet = $online;}
?app=admincp&offline=';DROP table tbl_system;--
if (strcmp($_GET['offline'],"0") === 0) {
$extranet = $_GET['offline'];
} else {
$extranet = $online;
}