2012-03-30 51 views
0

我有我的网站登录。以下显示注册页面。电子邮件地址是他们的用户名。如何创建一个错误消息警报,如果@符号和。尚未被插入到用户名(电子邮件地址)字段中?创建一个电子邮件地址的用户名

<?php 

// Check if he wants to register: 
if (!empty($_POST[emailaddress])) 
{ 
    // Check if passwords match. 
    if ($_POST[password] != $_POST[password2]) 
     exit("Error - Passwords don't match. Please go back and try again."); 

    // Assign some variables. 
    $date = mktime("d - m - Y"); 
    $ip = $_SERVER[REMOTE_ADDR]; 

    require_once("config.php"); 

    // Register him. 
    $query = mysql_query("INSERT INTO neworders 
    (emailaddress, firstname, surname, password, datereg, ip) 
    VALUES ('$_POST[emailaddress]','$_POST[firstname]','$_POST[surname]','$_POST[password]','$datereg','$ip')") 
    or die ("Error - Couldn't register user."); 

    echo "Welcome $_POST[username]! You've been successfully reigstered!<br /><br /> 
     Please login <a href='login.php'><b>here</b></a>."; 
    exit(); 
} 

?> 
+7

圣漏洞,蝙蝠侠!消毒你的数据! – qitch 2012-03-30 03:16:34

+2

..并增加您的接受评级! – tttony 2012-03-30 03:25:22

+0

我不知道'$ date = mktime(“d - m - Y”);'的内容是:-) ...我的猜测3600(或1970-01-01 01:00:00) – Rufinus 2012-03-30 03:26:26

回答

2

你或许应该使用更强大的解决方案来验证电子邮件。使用PHP的filter_var()函数和FILTER_VALIDATE_EMAIL标志。

$validEmail = filter_var($email, FILTER_VALIDATE_EMAIL); 

当然,这只是用于验证电子邮件。如果将它插入到数据库中,请使用该数据库的字符串转义机制或使用绑定查询。

+2

我并不积极,但我认为可以在有效的电子邮件地址中写入注入攻击。在@符号哈哈之前,电子邮件地址非常灵活。也许应该在所有输入上使用mysql_real_escape_string。 – Paulpro 2012-03-30 03:21:09

+0

我不会那么强大,但这对于快速解决方案很有用。虽然这不是100%安全。 – Nilpo 2012-03-30 03:23:49

+2

@ PaulP.R.O。要验证电子邮件,我会使用这个。要将它插入到数据库中,我会使用数据库的转义机制。 – alex 2012-03-30 03:28:21

0

你可以使用stristr()php函数检查一个字符串是否包含字符(这不是理想的解决方案,而是非常简单地检查字符串中的字符是否存在,就像你描述的一样。更好的解决方案)。 所以做你问你可以不喜欢什么:

if(!(stristr($_POST['emailaddress'], '@') && stristr($_POST['emailaddress'], '.')) { 
    echo 'Email not valid'; 
    exit(1); 
} 

别的东西,你可以做的是使用预构建PHP filter_var函数来做到这一点:http://php.net/manual/en/function.filter-var.php

if(!filter_var($_POST['emailaddress'],FILTER_VALIDATE_EMAIL)) { 
    echo 'Email not valid'; 
    exit(1); 
} 

您还可以使用正则表达式模式匹配,如果你想。如果要将其插入数据库,我还建议在$ _POST ['emailaddress']字段上进行某种清理(mysql_real_string_escape)。

相关问题