如何将mysql_result替换为简单的登录系统

时间:2014-01-06 13:18:18

标签: php mysql mysqli

当我尝试在代码中用mysql_*替换mysqli_*时,我遇到了一些麻烦。除mysql_result外,一切正常。我已经找到了答案,但我是初学者,所以我在理解方面遇到了很多麻烦。似乎mysqli_result不存在或者至少不起作用。

我目前的登录代码,mysql_result看起来像这样:

if (isset($_POST['submit'])){

  $sql = "SELECT membersid FROM members
   WHERE user='{$_POST['user']}'
   AND pass='{$_POST['passwd']}'";
   $result = query($con, $sql);

   // If not username or password found, return to index.
   if (mysqli_num_rows($con, $result) == 0){
     header("Location: index.php?badlogin=");
     exit;
   }

   // Unique index for session.
   $_SESSION['sess_id'] = mysql_result($result, 0); //Here is my problem
   $_SESSION['sess_user'] = $_POST['user'];
   header("Location: hem.php");
   exit;
}

// Logout.
if (isset($_GET['logout'])){
   $_SESSION = array();
   session_destroy();
   header("Location: index.php");
   exit;
} 

它不能正常工作。我收到“用户名或密码不正确”。但是在我开始用mysqli替换mysql之前它已经运行了。我的问题是,如何替换mysql_result代码以使脚本的这部分工作?

2 个答案:

答案 0 :(得分:1)

假设您的查询方法使用mysqli,那么$result可能是mysqli_result个对象。您可以使用以下方法获取行和字段:

$row = $result->fetch_array();
$_SESSION['sess_id'] = $row[0];

说明:

$result是表示查询结果的mysqli_result对象 在此上调用fetch_array()将返回结果的下一行(如果没有更多行,则返回false)。因此,这将一行作为数组放入$row变量中 最后,我们使用$row[0]抓取该行中的第一列。

答案 1 :(得分:1)

我觉得你很亲密。但你仍然对SQL注入持开放态度。您不应该直接在查询中包含$_POST。阅读Bobby Tables上的SQL注入预防的更多信息。

中修复的问题
  1. 看起来$sql应为$result
  2. mysqli_num_rows只需要您的结果对象,而不是连接
  3. mysql_result是严肃的旧学校,mysqli没有相应的内容。我强烈建议你使用像mysqli_fetch_assoc
  4. 这样更现代的东西

    代码块

    if(isset($_POST['submit'])){
       $result = mysqli_query($con, "SELECT membersid FROM members
       WHERE user='{$_POST['user']}'
       AND pass='{$_POST['passwd']}'");
    
       // If not username or password found, return to index.
       if(mysqli_num_rows($result) == 0){
         header("Location: index.php?badlogin=");
         exit;
       }
    
       // Unique index for session.
       $row = mysqli_fetch_assoc($result);
       $_SESSION['sess_id'] = $row['membersid'];
       $_SESSION['sess_user'] = $_POST['user'];
       header("Location: hem.php");
       exit;
    }