我如何完成此登录脚本?

时间:2013-01-28 01:23:27

标签: php mysql login registration

我差不多完成了我的登录脚本,但我不知道如何检查用户名和&密码是正确的。 这是我的脚本文件。

  1. 的index.php:

    <html>
    <body>
    
    <form action="action1.php" method="post">
    Username: <input type="text" name="uname">
    Password: <input type="password" name="pword">
    <input type="submit">
    </form>
    
    </body>
    </html>
    
  2. index.php文件只是我用来收集用户注册信息的页面。

    1. action1.php:

      <?php
      $con = mysql_connect("localhost", "root", "");
      if (!$con)
      {
      die ('Could not connect: ' . mysql_error());
      }
      
      mysql_select_db("user1", $con);
      
      $sql="INSERT INTO useri1 (uname, pword)
      VALUES
      ('$_POST[uname]','$_POST[pword]')";
      
      if (!mysql_query($sql, $con))
      {
      die('Error: ' . mysql_error());
      }
      echo "1 record added";
      
      mysql_close($con);
      ?>
      
    2. action1.php文件只是将用户注册到数据库的页面。

      1. 的login.php:

        <html>
        <body>
        
        <form action="checklogin.php" method="post">
        Username: <input type="text" name="uname1">
        Password: <input type="password" name="pword1">
        <input type="submit">
        </form>
        
        </body>
        </html>
        
      2. login.php文件就是我用来让用户输入登录信息的页面。

        现在这是我的问题,我不知道如何检查用户登录信息,以便他们可以进入仅限会员区域。我是新手&amp;任何帮助是极大的赞赏。

        谢谢,

        - 德文

3 个答案:

答案 0 :(得分:3)

首先,您希望使用mysqli而不是mysql,因为mysql已过时且不再积极开发。其次,您希望开始转义数据库查询以停止sql注入。在下面的代码中,我使用会话来跟踪用户。您可以详细了解会话here

<?php

session_start();

$mysqli = new mysqli('localhost', 'root', DB_PASSWORD, 'user1');

/* check connection */
if ($mysqli->connect_error)
  die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);

/* escape string from sql injection */
$userName = $mysqli->real_escape_string($_POST['uname1']);

/* query database */
$result = $mysqli->query("SELECT `pword` FROM `user1` WHERE `uname` = '".$userName."'");
if ($result->num_rows == 1) {
  while ($col = $result->fetch_array(MYSQLI_ASSOC)) {
    // This presumes you're storing your passwords in plain text.
    // If you hashed your passwords or anything, you would have to do the same to $_POST['pword']
    if ($_POST['pword'] == $col['pword']) {
      // You could do anything here, but sessions are a way of keeping track of a user.
      $_SESSION['userName'] = $_POST['uname1'];
      $_SESSION['loggedIn'] = true;
    }
  }
}
$result->close();

/* don't forget to close the connection */
$mysqli->close();

?>

答案 1 :(得分:1)

您将按照以下方式运行查询:

$user_check_query = "SELECT * FROM useri1 WHERE uname=" . $_POST['uname'] . " AND pword=" . $_POST['pword'] .";";

如果查询返回值,则可以继续。如果查询什么都不返回,则无法通过。至于逻辑,请查看您创建的代码,并了解如何创建ifelse语句来处理逻辑。

答案 2 :(得分:1)

你需要做一个SELECT查询 - 就像

那样

SELECT STRCMP('{$_POST['pword']}', pword) FROM useri1 WHERE uname = '{$_POST['uname']}'

这应该返回[-1,1]范围内的值 - 如果它不是0,则密码错误。如果没有行,则该用户不存在。

你也需要考虑SQL注入 - 但这很可能是另一天的练习。