【问题标题】:Check if user is admin PHP检查用户是否是管理员 PHP
【发布时间】:2015-02-08 14:53:11
【问题描述】:

我有一个具有这种结构的用户表:

身份证
用户名
密码
经销商(管理员)

现在我想在登录时检查用户是否是经销商,经销商可以持有 0(普通用户)或 1(管理员)的值,但我不知道该怎么做(我是新手PHP)。

这是登录表单:

    <form action="index.php?action=login" method="post" style="width: 50%;">
        <input type="hidden" name="login" value="true" />

<?php if ( isset( $results['errorMessage'] ) ) { ?>
        <div class="errorMessage"><?php echo $results['errorMessage'] ?></div>
<?php } ?>

        <ul>

          <li>
            <label for="username">Username</label>
            <input type="text" name="username" id="username" placeholder="Uw gebruikersnaam" required autofocus maxlength="20" />
          </li>

          <li>
            <label for="password">Password</label>
            <input type="password" name="password" id="password" placeholder="Uw wachtwoord" required maxlength="20" />
          </li>

        </ul>

        <div class="buttons">
          <input type="submit" name="login" value="Login" />
        </div>

      </form>

这是登录功能:

    function login() {

  $results = array();
  $results['pageTitle'] = "Admin Login | Gemeente Urk";

  $host = "localhost";
  $mysqluser = "root";
  $mysqlpass = "usbw";
  $db = "wagenpark";

  mysql_connect($host, $mysqluser, $mysqlpass);
  mysql_select_db($db);

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

      $gebruiker = $_POST['username'];
      $wachtwoord = $_POST['password'];
      $sql = "SELECT * FROM users WHERE username='".$gebruiker."' AND password='".$wachtwoord."' LIMIT 1";
      $res = mysql_query($sql) or die (mysql_error());
      if (mysql_num_rows($res) == 1) {
          $_SESSION['username'] = $gebruiker;
          header( "Location: index.php" );

    } else {

      // Login failed: display an error message to the user
      $results['errorMessage'] = "Incorrect username or password. Please try again.";
      require( TEMPLATE_PATH . "/admin/loginForm.php" );
    }

  } else {

    // User has not posted the login form yet: display the form
    require( TEMPLATE_PATH . "/admin/loginForm.php" );
  }

}

已经谢谢了。

【问题讨论】:

标签: php


【解决方案1】:

如果我理解正确,您有一个 MySQL 数据库,您可以在其中保存用户名、ID、密码以及他/她是否是管理员。在这部分:

$res = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($res) == 1) {
      $_SESSION['username'] = $gebruiker;
      header( "Location: index.php" );

您可以只获取结果的 Admin 值。它可能看起来像这样:

$res = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($res) == 1) {
      $_SESSION['username'] = $gebruiker;
      while($row = mysql_fetch_object($res))
      {
          $admin = $row->Admin;
      }
      if ($admin == 1) {Do something...}
      else {Do something if he is not Admin}
      header( "Location: index.php" );

然后您可以将其保存到 $_SESSION 中。

这对我有帮助,如果它不起作用,请告诉我。

【讨论】:

  • 我可以通过查询结果获取管理值吗?我没有在查询中包含该字段,但我仍然可以使用它吗?
  • 我试过了,我得到了这个错误:注意:尝试在第 55 行获取 C:\Users\Rudie\Documents\Wagenpark\root\index.php 中非对象的属性
  • 好吧,查询获取用户行的所有字段。
  • 只是一个安全提示:如果你想保护你的用户的密码,你可以使用 md5() 方法。它会生成一个您无法重现的哈希。因此,如果用户注册,您可以将他们的密码直接保存为 md5() 哈希,如果登录,则将他们提交的密码转换为 md5() 哈希并检查他们提交的密码的哈希是否与数据库中的那个。对于同一个 Word,这些 md5() 哈希值始终保持不变。更多关于 md5 哈希的信息:w3schools.com/php/func_string_md5.asp
  • 谢谢,但这只是我的一个私立学校项目,它不会在网站上发布。如果我这样做,我会确保密码受到保护:)
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-02
  • 2011-04-05
相关资源
最近更新 更多