4

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

  1. 索引.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>
    

index.php 文件只是我用来收集用户注册信息的页面。

  1. 动作1.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);
    ?>
    

action1.php 文件只是将用户注册到数据库中的页面。

  1. 登录.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>
    

login.php 文件只是我用于用户输入登录信息的页面。

现在这是我的问题,我不知道如何检查用户登录信息,以便他们可以进入仅限会员的区域。我是新手,非常感谢任何帮助。

谢谢,

——德文

4

3 回答 3

3

首先,您想使用mysqli而不是 mysql,因为 mysql 已经过时并且不再积极开发。其次,您想开始转义数据库查询以停止 sql 注入。在下面的代码中,我使用会话来跟踪用户。您可以在此处了解有关会话的更多信息。

<?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();

?>
于 2013-01-28T01:40:32.217 回答
1

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

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

如果查询返回一个值,那么他们可以继续。如果查询不返回任何内容,则它们不能通过。至于逻辑,看看你创建的代码,看看如何创建ifelse语句来处理逻辑。

于 2013-01-28T01:34:12.697 回答
1

您需要执行 SELECT 查询 - 类似于

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

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

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

于 2013-01-28T01:39:11.653 回答