2009-08-17 37 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'])