php如果使用mySQL结果表示



下面的代码应该检查数据库中是否有数据库中的一个人,并带有用户名,它从cookie login.包含一个页面,如果数据库中没有此user_id的人,应该回声。到目前为止,请告诉我我将如何做。我的代码是我的代码:

<?php
include("dbconnect.php");
mysql_select_db("maxgee_close2");
$username = $_COOKIE['maxgee_me_user']; 
$result = mysql_query("select user_id from users where username = '$username'");
$row = mysql_fetch_array($result);    
mysql_free_result($result);
$check = mysql_query("SELECT * FROM events_main WHERE user_id ='$row['user_id']'") or die(mysql_error());
if(1==1){
  if (mysql_num_rows($check)>0) 
 {
include("example.php");
 }
  else
  {
  echo "example";
  }
}
?>

在双引号的字符串中,由于您已经引用了数组键而没有在 {}中围绕整个内容而引用数组键,因此您的数组变量$row['user_id']被错误解析。如果您不引用数组键,则允许在双引号的字符串中省略{},但{}添加了可读性。

check = mysql_query("SELECT * FROM events_main WHERE user_id ='{$row['user_id']}'") or die(mysql_error());
//-------------------------------------------------------------^^^^^^^^^^^^^^^^^^
// Also acceptable, but not as tidy, and troublesome with multidimensional 
// or variable keys - unquoted array key
check = mysql_query("SELECT * FROM events_main WHERE user_id ='$row[user_id]'") or die(mysql_error());
//-------------------------------------------------------------^^^^^^^^^^^^^^^^^^

如上所述,$_COOKIE从未被认为是安全价值。如果您继续使用旧的mysql_*() API,则必须逃脱其对SQL注入的值:

$username = mysql_real_escape_string($_COOKIE['maxgee_me_user']);

2立即从蝙蝠身上进行的事情,就像韦莱德(Waleed)所说,您对SQL注入持开放态度,并不是很不错的事情。我将研究阅读有关Mysqli和Pdos的教程,从那里尝试潜入更好的方式或运行查询。

您也选择使用cookie而不是会话来存储用户名?可以修改客户端的cookie,以说出使用火焰的智能用户希望它们能做到的任何东西。会话是存储的服务器端,并且客户端(最终用户)仅给出会话的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($ result);在您的脚本有机会从数据库中获取用户ID之前。

总的来说,我真的会回去阅读更多教程。

最新更新