2009-08-17 90 views
0

我就吃与此代码的麻烦:PHP + MySQL的问题:(

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; 

在数据库中,该字段的值,其中所述属性=外网是1 回波的结果:

$_GET['offline'] = 0 
$extranet  = 1 
$online   = 1 

现在,很明显,什么是错在这里

的URL给这个得到的是:。?app=admincp&offline=0,所以$_GET['offline']不是问题

问题必须出现在if语句中,但我无法弄清楚,

任何想法?

+0

我加入了PHP标签;) – 2009-08-17 21:40:00

+0

是否有实际设定值码外联网? 我会重写这个更清楚。确保你正确地初始化你的变量,在任何条件和类似的字符串完成并更新后发布之前,用一个漂亮的字符串将它们打印出来。那么我们将能够更好地帮助你。 雅各布 – TheJacobTaylor 2009-08-17 21:44:50

+0

如果我正在阅读这个权利,离线设置为0,外联网设置为$ online的值,从1开始 – TheJacobTaylor 2009-08-17 21:46:49

回答

2

$ _GET ['offline']为0,并且0评估为false,因此声明正确。如果要检查离线是否作为参数传递,你必须使用isset()

if (!isset($_GET['offline'])) {$extranet = $_GET['offline'];} else {$extranet = $online;} 
2
if ($_GET['offline']) 

这将返回false,因为字符串“0”在PHP中计算结果为false,所以if语句的条件永远不会计算为true。改为使用issetarray_key_exists。例如: -

if (isset($_GET['offline'])) { ... } 

或:

if (array_key_exists('offline',$_GET)) { ... } 

在你的情况,你会想知道的价值是否是完全相同的字符串零“0”。我会建议使用strcmp

if (strcmp($_GET['offline'],"0") === 0) { 
    $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; 
1

$_GET['offline']为您提供的网址为零,所以if($_GET['offline'])并在该块一切都将永远不会被击中。改为使用isset()

2

哎呀!除了karim的评论 - 消毒您的输入!您正在使用URL参数并将其直接放入SQL查询中。网址为

?app=admincp&offline=';DROP table tbl_system;-- 

会毁了你!

+0

是的,我补充说,一旦我可以保证原始代码工作:) – bear 2009-08-17 21:54:01

1
if (strcmp($_GET['offline'],"0") === 0) { 
    $extranet = $_GET['offline']; 
} else { 
    $extranet = $online; 
} 

,这将使你在$ _GET [“离线”]没有设置的情况下,错误最好使用!isset($_GET['offline'])