2016-07-16 38 views
1

我想要做以下但失敗。

$user_id = $_REQUEST['user_id']; 

if (/* nothing to be requested*/) { 
    echo "<button>Log In</button><button>Sign Up</button>"; 
} else { 
    /* logged in, check if the user is an admin or not */ 
    if (/* he is admin */) { 
    echo "<button>Admin</button><button>Logout</button>"; 
    } else { 
    /* then he is just a normal user */ 
    echo "<button>Logout</button>"; 
    } 
} 

原始代碼:

$user_id = $_REQUEST['user_id']; 
if (!$user_id) { 
    echo "<button>Log In</button><button>Sign Up</button>" 
} else { 
    $check_sql = "SELECT admin from users where user_id = {'$user_id'}"; 
    $result = mysqli_query($con, $check_sql); 
    $rows = mysqli_fetch_array($con, $result); 
     if ($rows['admin'] == 1) { 
     echo "<button>Admin</button><button>Log Out</button>"; 
     } else { 
     echo "<button>Log Out</button>"; 
    } 
} 

當有是$ _REQUEST爲user_id,代碼工作正常。但是當沒有什麼是$ _REQUEST時就會失敗。你能幫忙嗎?

非常感謝!

+0

把這個:如果(空($ user_ID的)) – bfahmi

+0

的使用,如果(空($ user_ID的)){} – JYoThI

+0

利用這一點,如果(isset($ user_ID的)!) – rajeev

回答

1

首先,請注意,您的代碼容易受到SQL注入攻擊。這非常嚴重。您應該使用參數化查詢或轉義$user_id變量。

http://php.net/manual/en/security.database.sql-injection.php

另外請注意,您的代碼可能會受到別人設置$user_id自己,當他們不應該因此可能獲得管理員權限。這是因爲您使用的是$_REQUEST,這些值可以通過請求以您可能無法預料的方式設置。或者,您可以將user_id存儲在$_SESSION中。

http://php.net/manual/en/ini.core.php#ini.request-order

http://php.net/manual/en/reserved.variables.session.php

至於支票$user_id,它應該是:

if(empty($user_id)) 

您可能還需要修剪$user_id

如果使用PHP < 5.5:

$user_id= trim($user_id); 
if(empty($user_id) 

如果使用PHP> = 5.5

if(empty(trim($user_id)) 

檢查一個變量是否被認爲是空的。一個變量是 ,如果它不存在或者其值等於FALSE,則認爲它是空的。 如果變量不存在,則empty()不會生成警告。

http://php.net/manual/en/function.empty.php

+0

非常感謝Josh K,注射攻擊事件將是我的下一步。再次感謝! – Kenny