如何查看邮箱是不是已经注册?
Posted
技术标签:
【中文标题】如何查看邮箱是不是已经注册?【英文标题】:How to check if email is already registered?如何查看邮箱是否已经注册? 【发布时间】:2013-02-23 14:02:44 【问题描述】:我正在尝试检查是否已使用 PDO 注册了电子邮件,但到目前为止我还没有找到执行此操作的好方法。这是我到目前为止所拥有的。如果有帮助,连接变量是“$con”。另外,我需要在同一个文档中使用连接变量还是在包含的文档中工作?
<link rel="stylesheet" type="text/css" href="css\errors.css">
<?php
require 'header.php';
if (!$_POST['submit'])
?>
<html>
<a href="register.html">Regsiter here!</a>
<?php
else
require 'connect.php';
$firstname = ($_POST['firstname']);
$lastname = ($_POST['lastname']);
$email = ($_POST['email']);
$password = ($_POST['password']);
$passwordconf = ($_POST['passwordconf']);
$errorfields = "<p class='errormsg'>Please fill out all the fields!</p>";
if (empty($firstname) || empty($lastname) || empty($email) || empty($password) || empty($passwordconf))
echo "$errorfields";
$erroremail = "<p class='errormsg'>Email is not in name@domain format!</p>";
$regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]2,$/i";
if (!preg_match($regex, $email))
echo "$erroremail";
$errorpassword = "<p class='errormsg'>You passwords do not match!</p>";
if ($password != $passwordconf)
echo "$errorpassword";
//this is where email is checked
?>
【问题讨论】:
您尝试过的 PDO 代码在哪里? 我不好意思说实话,但这里是函数 emailCheck($email) $stmt = $con->prepare("SELECT email FROM basicuserinfo WHERE email = :email"); $stmt->bindParam(':name', $email); $stmt->执行(); if($stmt->rowCount() > 0) echo "存在!"; else 回声“不存在”; 有问题的代码似乎与问题无关。请仅发布相关代码。请概括您的问题,就数据库而言,电子邮件或其他值之间没有区别。 我评论了一个完整的工作代码,看看它。 【参考方案1】:接受的答案存在一些问题(这很容易理解,因为它是很久以前写的)。
第一个有点无关紧要,但仍然如此。连接代码并不像一行代码那么简单。请参考我在how to properly connect with PDO上的文章,避免以后可能出现的很多问题。
另一个问题是使用rowCount()
方法,正如手册中所述,could be unavailable。此外,bindParam()
的使用是多余的,可以避免使用,以使代码更简洁。因此,我们可以提出以下解决方案
require 'connect.php'; // contains the code mentioned above.
$stmt = $con->prepare( "SELECT 1 FROM `tbl_name` WHERE `email` = ?");
$stmt->execute([$email]);
$found = $stmt->fetchColumn();
if( $found )
echo "Email found!";
else
echo "Email not found!";
如果您不仅需要检查是否存在,还需要获取实际记录(例如,为了验证密码),只需将查询中的1
更改为实际字段并将fetchColumn()
更改为@ 987654328@:
$stmt = $con->prepare( "SELECT 1 FROM `tbl_name` WHERE `email` = ?");
$stmt->execute([$email]);
$user= $stmt->fetch();
if( $user )
echo "Email found!";
else
echo "Email not found!";
【讨论】:
【参考方案2】:试试这个,用您的连接凭据填写 DB_NAME、DB_USER_NAME 和 DB_USER_PASS,或者如果所有内容都正确设置为 PDO 对象,则使用 $con 变量:
$con = new PDO( 'mysql:host=localhost;dbname=DB_NAME;charset=UTF-8', 'DB_USER_NAME', 'DB_USER_PASS' );
$query = $con->prepare( "SELECT `email` FROM `tbl_name` WHERE `email` = ?" );
$query->bindValue( 1, $email );
$query->execute();
if( $query->rowCount() > 0 ) # If rows are found for query
echo "Email found!";
else
echo "Email not found!";
【讨论】:
以上是关于如何查看邮箱是不是已经注册?的主要内容,如果未能解决你的问题,请参考以下文章