我的网页无法识别注册表中填写的数据

乔瓦尼·卡布雷拉

我目前正在做一个网页,现在我专注于登录和注册表。我还连接了一个 sql 数据库。当我使用注册表单注册新用户时,数据库更新成功。问题是当我尝试使用该用户登录时,页面无法识别它。此外,如果我尝试使用我使用 Netbeans 手动引入的用户登录,它会识别它。

$con = mysqli_connect("localhost", "root", "mypassword");
if(!$con) {
    exit('Connect Error (' . mysqli_connect_errno() .') ' . mysqli_connect_error());
}

mysqli_set_charset($con, 'utf-8');

mysqli_select_db($con, "my_database");

$user = mysqli_real_escape_string($con, htmlentities($_POST['new_mail']));
$password = mysqli_real_escape_string($con, htmlentities($_POST['new_passwd']));
$sql = "INSERT INTO usuarios (usuario, clave) VALUES ('". $user ."' , ' ".md5($password)."')";
mysqli_query($con, $sql);
if(mysqli_affected_rows($con) > 0) {
     ?>
    <script type='text/javascript'>
        alert('You have been registered succesfully. Now you can access our website');
    </script>
    <?php
    header("Location: login_page.html");

    echo "<br><br><a href='index.php'>Go back</a>";
} else {
    if(mysqli_errno($con) == 1062) {
        echo "The e-mail address introduced is already on the system.";
        echo "<br><a href='register.html'>Try again</a>";
    } else {
        echo "Error: " .$sql . "<br>" . mysqli_error($con);
    }
}

这是我填写注册表后使用的代码。下一个是我在登录表单后使用的。

    $con = mysqli_connect("localhost", "root", "mypassword");
if(!$con) {
    exit('Connect Error (' . mysqli_connect_errno() .') ' . mysqli_connect_error());
}


if(mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_errno());
    exit();
}

mysqli_set_charset($con, 'utf-8');

mysqli_select_db($con, "my_database");

$user = mysqli_real_escape_string($con, htmlentities($_POST['username']));
$password = mysqli_real_escape_string($con, htmlentities($_POST['password']));

$sql = "SELECT * FROM usuarios WHERE usuario='" . $user ."' AND clave='" . md5($password) . "'";
mysqli_query($con, $sql);
if(mysqli_affected_rows($con) > 0) {
    //echo "Welcome " . $_SESSION['username'] . "!";
    //echo "<br><br><a href='user_page.php'>Main Page</a>";
    //echo "<br><a href= 'close_session.php'>Close Session</a>";
    header("Location: main_page.html");
} else {
    exit ("The user or password introduced are not correct");
}
$row = mysqli_fetch_row($sql);
$_SESSION['user'] = $row;
$_SESSION['username'] = $row[0];
mysqli_free_result($sql);

?>

感谢您的帮助。

巨大的焦耳

您在注册页面上犯的错误很少。

  1. 您没有使用准备好的语句。
  2. 您正在使用md5()代替password_hash()password_verify()来保护您的密码。

  3. 您正在对密码使用清理机制,您不应该这样做,因为这可能会更改原始密码。

有了上述内容,您应该使用准备好的语句并利用密码散列和验证,

因此您的注册页面。应该看:

<?php
$con = mysqli_connect("localhost", "root", "mypassword");
if (!$con) {
    exit('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}

mysqli_set_charset($con, 'utf-8');

mysqli_select_db($con, "my_database");

$user     = $_POST['new_mail'];
$password = $_POST['new_passwd'];

$hash = password_hash($password, PASSWORD_DEFAULT);

//check if user is not registered already, I'm not sure if you have user_id, what I know you should have id which is auto increment, then select that id
$sql  = "SELECT user_id FROM usuarios WHERE usuario = ? ";
$stmt = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt, 's', $user);
mysqli_stmt_execute($stmt);
$result   = mysqli_stmt_get_result($stmt);
$num_rows = mysqli_num_rows($result);

if ($num_rows > 0) {
    //user exists

    echo "The e-mail address introduced is already on the system.";
    echo "<br><a href='register.html'>Try again</a>";
} else {
    //user does not exist register the user
    $query  = "INSERT INTO usuarios (usuario, clave) VALUES (?,?)";
    $insert = mysqli_prepare($con, $query);
    mysqli_stmt_bind_param($insert, "ss", $user, $hash);

    if (mysqli_stmt_execute($insert)):
?>

        <script type='text/javascript'>
        alert('You have been registered succesfully. Now you can access our website');
    </script>
    <?php
        header("Location: login_page.html");

        echo "<br><br><a href='index.php'>Go back</a>";
    else:
        printf("Error: %s.\n", mysqli_stmt_error($insert));
    endif;
}
?>

然后登录

<?php
session_start();
$con = mysqli_connect("localhost", "root", "mypassword");
if (!$con) {
    exit('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}


if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_errno());
    exit();
}

mysqli_set_charset($con, 'utf-8');

mysqli_select_db($con, "my_database");

$user     = $_POST['username'];
$password = $_POST['password'];


#ONLY SELECT THE SPECIFIC COLUMNS YOU NEED, DON'T USE#

$sql  = "SELECT clave,anotherColumn,anotherColumn  FROM usuarios WHERE usuario= ? ";
$stmt = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt, 's', $login);
mysqli_stmt_execute($stmt);
$result   = mysqli_stmt_get_result($stmt);
$num_rows = mysqli_num_rows($result);

if ($num_rows > 0) {

    $row = $row = mysqli_fetch_assoc($result);

    if (password_verify($password, $row['clave'])) {

        //passwords set sections, redirec
    } else {

        //user password does not match the stored hash return message
    }


} else {

    //username does not exist, do something
}


?>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法删除注册表中的值

来自分类Dev

我可以清除子注册表中默认值的值数据吗?

来自分类Dev

从注册表中的注册表项中读取数据并进行解析

来自分类Dev

从注册表中的注册表项读取数据并进行解析

来自分类Dev

无法查询注册表中已安装的msi文件

来自分类Dev

总注册表无法在Julia中更新

来自分类Dev

无法在注册表中查看certian子项

来自分类Dev

从其他项目更新dvc注册表中的数据

来自分类Dev

从其他项目更新dvc注册表中的数据

来自分类Dev

如何使用DataGridView显示注册表中的数据

来自分类Dev

如何发布到allauth注册表单以填写初始数据?

来自分类Dev

无法从注册表执行VBScript(.vbs)

来自分类Dev

无法打开注册表子项

来自分类Dev

Docker无法从OpenShift访问注册表

来自分类Dev

无法访问 docker 注册表

来自分类Dev

我如何清理lua的注册表?

来自分类Dev

我的 onClick 注册表有问题

来自分类Dev

从表中更新顶级注册表

来自分类Dev

为什么即使我没有复制注册表数据库,我的私有npm注册表也列出了所有公共npm模块?

来自分类Dev

如何识别注册表操作被重定向/反映?

来自分类Dev

验证模式中的注册表并提交数据库中的数据

来自分类Dev

在Zeppelin中使用%pyspark解释器注册表时,无法在%sql中访问该表

来自分类Dev

无法更改注册表数据库wso2?

来自分类Dev

Django 无法获取注册表以在 admin.py 中发布到数据库

来自分类Dev

我怎么知道我的.reg在注册表中的确切位置?

来自分类Dev

我怎么知道我的.reg在注册表中的确切位置?

来自分类Dev

从Perl中的Windows注册表读取

来自分类Dev

注册表中命令的重定向

来自分类Dev

在Prestashop中定制注册表

Related 相关文章

热门标签

归档