如何在php中检查重复的用户名和/或电子邮件

xa9qqrwz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(428)

大家好,我有一个简单的pdo登录和注册页面,当我在localhost中测试它时,我可以注册相同的用户名和电子邮件。如何在注册页面中检查重复,并在同一用户/电子邮件已存在时显示错误?这是我的register.php

<?php
require 'config.php';

if(isset($_SESSION['username'])){
    header('location:dashboard.php');
}

if(isset($_POST['register'])) {
    $errMsg = '';

    // Get data from FROM
    $fullname = $_POST['fullname'];
    $username = $_POST['username'];
    $address = $_POST['address'];
    $password = $_POST['password'];
    $secretpin = $_POST['secretpin'];

    if($fullname == '')
        $errMsg = 'Enter your fullname!';
    if($username == '')
        $errMsg = 'Enter username!';
    if($address == '')
        $errMsg = 'Enter a valid email!';
    if($password == '')
        $errMsg = 'Enter password!';
    if($secretpin == '')
        $errMsg = 'Enter a sercret pin number!';

    if($errMsg == ''){
        try {
            $stmt = $connect->prepare('INSERT INTO pdo (fullname, username, address, password, secretpin) VALUES (:fullname, :username, :address, :password, :secretpin)');
            $stmt->execute(array(
                ':fullname' => $fullname,
                ':username' => $username,
                ':address' => $address,
                ':password' => $password,
                ':secretpin' => $secretpin,

                ));
            header('Location: register.php?action=joined');
            exit;
        }
        catch(PDOException $e) {
            echo $e->getMessage();
        }
    }
}

if(isset($_GET['action']) && $_GET['action'] == 'joined') {
    $errMsg = 'Registration successfull. Now you can <a href="login.php">login</a>';
}
?>

我的另一个问题是,如何获得每个注册人的注册日期,并将其保存在数据库中,并在配置文件页面中回显日期。我只是一个php新手,我从其他开源php代码中得到了一些想法。谢谢你们。
p、 别介意安全问题,我还在学习:)

9jyewag0

9jyewag01#

您使用的是pdo,而不是不推荐的mysql或mysqli,因此您的安全性已经稍微提高了。
检查重复只不过是sql“like”语句查询的一种情况,类似于so-
从网站用户中选择*其中useremail或userlogin类似?
这方面的一个例子实际上可以在这个链接上找到-https://www.w3schools.com/sql/sql_like.asp
我不想破坏您的方法,但是请记住目前您的代码:

if($fullname == '')
    $errMsg = 'Enter your fullname!';
if($username == '')
    $errMsg = 'Enter username!';
if($address == '')
    $errMsg = 'Enter a valid email!';
if($password == '')
    $errMsg = 'Enter password!';
if($secretpin == '')
    $errMsg = 'Enter a sercret pin number!';

每次都将覆盖$errmsg,因此您也不会得到完整的错误集,这可能很重要,也可能不重要。
我知道你不需要安全指针,但是使用

if(isset($_GET['action']) && $_GET['action'] == 'joined') {

作为一种知道是否有人注册的方法也不是一个好主意,请要么使用一个框架,要么改变你的方法,因为这个建议我可以访问该网址,而不必实际填写你的表格。

相关问题