Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL中查找精简的电子邮件_Php_Mysql_Sql_Email - Fatal编程技术网

Php 在SQL中查找精简的电子邮件

Php 在SQL中查找精简的电子邮件,php,mysql,sql,email,Php,Mysql,Sql,Email,我想防止用户多次使用同一封电子邮件。然而,许多服务器的配置方式都是通过电子邮件发送给john。doe@example.com将与j.oh.ndoe..@exmaple.com或johndoe放在同一个收件箱中+abc123@example.com. 因此,我应用了一个简单的PHP函数来去除电子邮件中的点,并忽略+符号后面的任何内容。 下面是我正在使用的PHP函数: 功能条\u电子邮件$email{ $id=explode@,$email[0];//在“@”之前是什么 $noplus=explod

我想防止用户多次使用同一封电子邮件。然而,许多服务器的配置方式都是通过电子邮件发送给john。doe@example.com将与j.oh.ndoe..@exmaple.com或johndoe放在同一个收件箱中+abc123@example.com. 因此,我应用了一个简单的PHP函数来去除电子邮件中的点,并忽略+符号后面的任何内容。 下面是我正在使用的PHP函数:

功能条\u电子邮件$email{ $id=explode@,$email[0];//在“@”之前是什么 $noplus=explode+,$id[0];//在“+”之前是什么 $nodots=str_replace.,$noplus;//并删除点 返回$nodots@.$provider; } 但是,我想用用户提供的确切电子邮件注册用户,但没有删除。例如,如果用户输入了john.doe+demo@example.com我将此电子邮件用于MySQL记录,因为这是用户希望联系到的地方。例如,一些服务器使用+后的字符串标记电子邮件或将其放在不同的文件夹中

新注册后,我将按以下方式检查电子邮件是否存在:

$email=$_POST['email']; $query=从电子邮件=“$email”限制为1的用户中选择电子邮件; $result=mysqli\u query$db,$user\u check\u query; $row=mysqli\u fetch\u assoc$result; 如果$row。。。电子邮件已在使用中 问题是用户是否输入了john..doe+mylabel@example.com这与数据库中的任何条目都不匹配,如果删除搜索值,也不会匹配johndoe@example.com.


我是否应该在表中创建第二行,并存储剥离的电子邮件?

您应该将原始电子邮件和剥离的电子邮件存储在表中的一行中

然后在剥离版本上声明一个唯一的约束,这样就不会在该列中得到重复的约束


因为您是用PHP进行清理的,所以在插入或更新新记录时,可以同时传入两个版本的电子邮件。

您需要使用占位符实现准备好的语句,以确保安全性和稳定性。您如何知道此清理过程不会产生负面影响?如果新的合法用户的电子邮件与您系统中的现有电子邮件相似,该怎么办。这似乎是一条不可取的道路。我预见到这会激怒访问者,对你来说是一种不可靠的技术。你应该只分解电子邮件字符串一次,然后访问它的两个部分,而不是$provider=explode@,$email[1];然后$id=explode@,$email[0]@米克:约翰有可能会死。d@gmail.com是同一个人吗johnd@gmail.com这是非常高的。特别是Gmail,它是100%,因为Gmail会考虑在注册时都相同。我想向那些通过别名电子邮件注册以获得免费试用的人提出一个额外的挑战。不要为此而抗争。人们总能找到办法。我在outlook上的一个邮箱有5个别名,没有一个看起来像另一个邮箱。