2012-03-30 93 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)。

相關問題