验证mysql列数据并在该行中查找匹配的电子邮件?

时间:2013-03-14 12:07:08

标签: php mysql

嗨我想知道是否有人可以帮助我,我基本上都有一个注册表单,用户可以在其中注册,每次注册时都会向数据库生成一个唯一的验证码,并在用户注册时通过电子邮件发送给用户。

我现在正处于第二阶段,用户点击其电子邮件中的链接并转到verify.php

在此页面上,用户必须输入他们在电子邮件中发送的验证/注册码。我在这里的脚本应该查找验证码并确保它与数据库中的匹配。

我想要做的是以某种方式告诉我的查询,如果验证码/注册码与我们在数据库中保存的那样正确,那么就向我们为该用户匹配该验证码的用户发送的电子邮件地址发送一封确认电子邮件。 (所以属于该行的电子邮件具有相同的验证码。)

我的桌子像这样懒散了

id           email               registration_code (verification code)
1      example@email.com                    5093dkfd

目前我的查询搜索数据库中保存的注册码,但我不知道如何找到该注册码的匹配电子邮件并发送电子邮件。这一点我需要帮助。任何人都可以指出我正确的方向,

我也希望查询告诉用户他们是否正确输入了代码,因为它正在告诉他们即使他们已经正确输入了它们。

/**
 * ShuttleCMS - A basic CMS coded in PHP.
 * Verification Code Check - Used to confirm a user's verification code
 * 
 */
define('IN_SCRIPT', true);
// Start a session
session_start();

//Connect to the MySQL Database
include 'includes/_config/connection.php';


/*
 * Checks form field for verification code, then where verification code has email, send email to recipient     
 */

if ($_POST['verificationcode']=='') {
        header('Location: verification.php?err=1');
}
if(get_magic_quotes_gpc()) {
        $verificationcode = htmlspecialchars(stripslashes($_POST['verificationcode']));
} 
else {
        $verificationcode = htmlspecialchars($_POST['verificationcode']);

}


/*
 * Checks if the verification code exists and look for email in that row which belongs to that verification code to send email out.
 */

$sql = "SELECT COUNT(*) FROM ptb_registrations WHERE registration_code = '$verificationcode' AND '$verificationcode' MATCHES email";
$result = mysql_query($sql)or die('Could not find member: ' . mysql_error());

if (!mysql_result($result,0,0)>0) {
    header('Location: verification.php?err=2');
}

然后我们发送确认电子邮件:

/*
         * Email out the infromation
         */


    (EMAIL BODY)
    YOUR code was matched and you are now registered etc.

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

$sql = "SELECT email FROM ptb_registrations WHERE registration_code = '$verificationcode'";
$result = mysql_query($sql)or die('Could not find member: ' . mysql_error());
if (mysql_num_rows($result) == 0) {
   header('Location: verification.php?err=2');
} else {
  $row = mysql_fetch_array($result);
  $email = $row['email'];
}

答案 1 :(得分:0)

首先,您应该知道mysql_ *函数已被弃用,您应该使用其他一个mysql库,例如mysqli或PDO(支持多种SQL风格)。

其次,您应该为您选择的mysql库使用适当的转义函数。

要选择匹配的电子邮件,请使用SELECT email FROM ...

要检查结果,您可以从num_rows函数(例如mysql库中的mysql_num_rows或mysqli中的num_rows属性)开始,看它是否找到了匹配的电子邮件地址,如果是找到一个匹配获取实际行内容以获取电子邮件。然后使用PHP向该地址发送电子邮件。