大家好我有一个简单的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不介意安全性,我还在学习:)
答案 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') {
作为一种了解某人是否已注册的方式也不是一个好主意,请使用框架或更改您的方法,因为这表明我可以访问该网址而无需实际填写您的表单。