2個弄好了蝙蝠,像瓦利德說你打開SQL注入,不是很好的事情已經發生:如果繼續使用舊的API mysql_*()
你必須逃脫其對SQL注入值給你。我會考慮閱讀關於MySQLi和PDO的教程,從那裏嘗試並潛入更好的方式或運行查詢。
另外您還選擇使用Cookie而不是會話來存儲用戶名?客戶端可以修改Cookies,以表示任何有螢火蟲的聰明用戶希望他們成爲的人。會話存儲在服務器端,而客戶端(最終用戶)只有會話的ID。如果您將它作爲會話發送,它們不能修改用戶名。 (他們可以嘗試更改會話ID到另一個隨機一串數字,但多數民衆贊成像撒尿進風,原諒我的法語。
下面有一些pseduo代碼,將讓你的方式,我覺得
<?php
include("dbconnect.php");
$database = "maxgee_close2"; //Set the database you want to connect to
mysql_select_db($database); //Select database
$username = $_SESSION['maxgee_me_user']; //Grab the username from a server-side stored session, not a cookie!
$query = "SELECT user_id FROM `users` WHERE `username` = '" . mysql_real_escape_string($username) . "' LIMIT 1"; //Note the user of mysql_real_escape_string on the $username, we want to clean the variable of anything that could harm the database.
$result = mysql_query($query);
if ($row = mysql_fetch_array($result)) {
//Query was ran and returned a result, grab the ID
$userId = $row["user_id"];
mysql_free_result($result); //We can free the result now after we have grabbed everything we need
$query_check = "SELECT * FROM `events_main` WHERE `user_id` = '" . mysql_real_escape_string($userId) . "'";
$check = mysql_query($query_check);
if (mysql_num_rows($check)>0) {
include("example.php");
}
else {
echo "example";
}
}
?>
該代碼可以/不可以工作,但真正的關鍵變化是事實,你正在運行 了mysql_free_result($結果); 腳本有機會從數據庫中獲取用戶ID之前
總而言之,我真的會回去閱讀一些教程。
您已經開放SQL注入。 –
請不要使用'mysql_ *'函數,它已被棄用(請參閱[*紅盒子*](http://php.net/manual/en/function.mysql-query.php)),並且容易受到sql注入。使用[* PDO *](http://php.net/manual/en/book.pdo.php)或[* MySQLi *](http://php.net/manual/en/book.mysqli.php) 。 – alfasin
在雙引號SQL字符串中,您應該_not_引用數組鍵'user_id',或者更好地將'{}'中的所有內容包裝在'user_id ='{$ row ['user_id']}' ,您的變量解析將在數組鍵的第一個引號中斷,從而破壞您的SQL語句。 –