2012-03-07 168 views
3

嗨,我是从所有的PHP神大声呼救#2 :)PHP如何检查已经在MySQL数据库中的电子邮件?

我创建了一个电子邮件注册表格(仅1电子邮件字段),即能使用Ajax验证和发布新通过我发现的基本PHP脚本向数据库发送电子邮件。

但是,我必须做的下一步是在添加电子邮件之前检查电子邮件是否已存在于数据库中。有几个问题完全是这样的堆栈,我已经尝试了所有的答案,但无济于事:(我不是一个PHP的家伙,还没有能够正确的破解它。 insert.php文件,它可以工作,但是会在数据库中添加一个新的电子邮件字段,但是下面的代码是我试图用来检查已经存在的电子邮件的最新代码,但是我得到了一个发送数据错误。

工作PHP文件中使用添加电子邮件

<?php 
$con = mysql_connect("localhost","root","root"); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("mydatabase", $con); 

$sql="INSERT INTO newsletter (email) 
    VALUES 
    ('$_POST[mail]')"; 

    if (!mysql_query($sql,$con)) { 
     die('Error: ' . mysql_error()); 
    } 

    echo "Thanks for subscribing!"; //Text on page 
    //header("Location: /thankyoupage.php"); //Redirect page 

mysql_close($con) 
?> 

更新的代码下面PDO 代码工作添加电子邮件,但仍允许重复...

<?php 
/*** mysql hostname ***/ 
$hostname = 'localhost'; 
/*** mysql username ***/ 
$username = 'root'; 
/*** mysql password ***/ 
$password = 'root'; 
/*** email ***/ 
$email = '$_POST[mail]'; 

try { 
$dbh = new PDO("mysql:host=$hostname;dbname=mydatabase", $username, $password); 

//$query = SELECT count(*) AS `total` FROM `data` WHERE `email` = '{$request}' 

$query = SELECT COUNT(*) as 'count' FROM `data` WHERE email = '$_POST[mail]'; 
$row = mysql_fetch_assoc(mysql_query($query)); 

if($row['total']) { 
    echo 'Sorry email already exists'; 
} 
else { 
    /*** echo a message saying we have connected & added email ***/ 
    echo 'Thanks for subscribing!'; 

    /*** INSERT data ***/ 
    $count = $dbh->exec("INSERT INTO newsletter(email) VALUES ('$_POST[mail]')"); 
} 

/*** echo a message saying we have connected & added email ***/ 
//echo 'Thanks for subscribing!'; 

/*** INSERT data ***/ 
//$count = $dbh->exec("INSERT INTO newsletter(email) VALUES ('$_POST[mail]')"); 

/*** echo the number of affected rows ***/ 
/*echo $count;*/ 

/*** close the database connection ***/ 
$dbh = null; 
} 
catch(PDOException $e) 
{ 
echo $e->getMessage(); 
} 
?> 

预先感谢任何人的时间来看看这个:)

附加说明: 我的数据库表被称为通讯,并有2场(ID - 数字只)&(电子邮件)

+0

在数据库的电子邮件列中是否有唯一的索引? – prodigitalson 2012-03-07 17:30:32

+0

@Jim我试过这里的答案:http://stackoverflow.com/questions/4378814/how-to-check-for-duplicate-entry-in-db但我想我只是没有经文足够的PHP – 2012-03-07 17:35:14

+1

嘿,你是**开放**到SQL注入,如果你还没有,你**将被黑客入侵。学习使用PDO准备好的查询并完全避免此问题。 – Brad 2012-03-07 17:36:56

回答

1

如果邮件是一个独特的密钥,这将是简单

<?php 
mysql_connect("localhost","root","root"); 
mysql_select_db("howdini"); 
$email = mysql_real_escape_string($_POST['mail']); 
$sql="INSERT IGNORE INTO newsletter (email) VALUES ('$email')"; 
mysql_query($sql) or trigger_error(mysql_error()." ".$sql); 
if (mysql_affected_rows()) { 
    header("Location: /thankyoupage.php"); //Redirect page 
} else { 
    //already exists 
} 
+0

刚刚试过这段确切的代码,我在IF中放入了“谢谢”的回声,并在其他地方回复“对不起”。能够添加电子邮件,但是当我将[email protected]添加两次时,我没有收到我的错误。 – 2012-03-07 18:04:03

+2

如果电子邮件是一个唯一的密钥 – 2012-03-07 18:13:14

+0

刚刚更新与工作PDO代码,但仍然能够添加重复,我检查了我的表,我看到这个ID是我的主键,去谷歌如何创建一个独特的键 – 2012-03-07 18:32:08