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

时间:2018-04-22 11:18:40

标签: php mysql pdo

大家好我有一个简单的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.S不介意安全性,我还在学习:)

1 个答案:

答案 0 :(得分:1)

您使用PDO而不是弃用的mysql或mysqli,已经略微增强了您的安全性。

检查重复只是一个SQL&#34; LIKE&#34;语句查询 - 像这样 -

SELECT * FROM websiteUsers WHERE userEmail或userLogin LIKE?

实际上可以在此链接上找到此示例 - 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') {

作为一种了解某人是否已注册的方式也不是一个好主意,请使用框架或更改您的方法,因为这表明我可以访问该网址而无需实际填写您的表单。