[英]Check if email already exists in database
我有一个连接到我的数据库的测验表单,但我需要防止插入重复的电子邮件条目。 我尝试过以下方法:
//Check for duplicate email addresses
function checkEmail($email){
$sql = DB::select('email')->from('myquiz')->where('email','=','$email')->execute();
$result = mysql_result(mysql_query($sql),0) ;
if( $result > 0 ){
die( "There is already a user with that email!" ) ;
}//end if
}
但是我仍然会收到重复的条目,这里是我的所有代码(可能是我没有在正确的位置运行它?)
public function action_myquiz() {
$this->template->styles['assets/css/myquiz.css'] = 'screen';
$this->template->jscripts[] = 'assets/scripts/myquiz.js';
$this->template->content = View::factory('quiz/myquiz');
$this->template->content->thanks = false;
if ($this->request->post('entry')) {
$post = $this->request->post('entry');
//Check for duplicate email addresses
function checkEmail($email){
$sql = DB::select('email')->from('myquiz')->where('email','=','$email')->execute();
$result = mysql_result(mysql_query($sql),0) ;
if( $result > 0 ){
die( "There is already a user with that email!" ) ;
}//end if
}
// save participant's info
$stmt = DB::query(Database::INSERT, 'INSERT INTO `myquiz` (`first_name`, `last_name`, `email`, `confirm_email`)
VALUES (:first_name, :last_name, :email, :confirm_email)');
$stmt->param(':first_name', $post['first_name']);
$stmt->param(':last_name', $post['last_name']);
$stmt->param(':email', $post['email']);
$stmt->param(':confirm_email', $post['confirm_email']);
try {
$stmt->execute();
// var_dump($post);
} catch (Exception $e) {
FB::error($e);
}
$this->template->content->thanks = true;
}
}
两个问题:
checkEmail()
函数,所以它永远不会运行。 您应该从函数中删除该代码,或者只调用需要运行的函数。 where('email','=',"$email")
。 将mysql_result更改为mysql_num_rows,如下面的第一个函数,然后尝试。
$result = mysql_num_rows(mysql_query($sql),0) ;
您的功能永远不会执行。 您需要在action_myquiz函数之外定义函数,然后调用它。 同样在'where'子句中你没有正确传递电子邮件地址,你可以使用'mysql_num_rows'来返回行数。
尝试这个:
//Check for duplicate email addresses
private function checkEmail($email)
{
$sql = DB::select('email')->from('myquiz')->where('email', '=', $email)->execute();
$result = mysql_num_rows(mysql_query($sql),0) ;
if( $result > 0 )
{
die( "There is already a user with that email!" ) ;
}
}
public function action_myquiz()
{
$this->template->styles['assets/css/myquiz.css'] = 'screen';
$this->template->jscripts[] = 'assets/scripts/myquiz.js';
$this->template->content = View::factory('quiz/myquiz');
$this->template->content->thanks = false;
if ($this->request->post('entry')) {
$post = $this->request->post('entry');
// Check if email exists
$this->checkEmail($_POST['email']);
// save participant's info
$stmt = DB::query(Database::INSERT, 'INSERT INTO `myquiz` (`first_name`, `last_name`, `email`, `confirm_email`)
VALUES (:first_name, :last_name, :email, :confirm_email)');
$stmt->param(':first_name', $post['first_name']);
$stmt->param(':last_name', $post['last_name']);
$stmt->param(':email', $post['email']);
$stmt->param(':confirm_email', $post['confirm_email']);
try {
$stmt->execute();
// var_dump($post);
} catch (Exception $e) {
FB::error($e);
}
$this->template->content->thanks = true;
}
}
还有几点要点:
在PHP中,您不能将函数放在另一个函数中。 所以你需要将它放在action_myquiz
函数之外。 您还需要将mysql_result
更改为mysql_num_rows
。 像这样的东西
//Check for duplicate email addresses
function checkEmail($email){
$sql = DB::select('email')->from('myquiz')->where('email','=',"$email")->execute();
$result = mysql_num_rows(mysql_query($sql),0) ;
if( $result > 0 ){
return true;
}
return false;
}
//Now start your other function
function checkEmail($email){
然后在action_myquiz
函数中,你需要调用你的checkEmail
函数。 喜欢
if(checkEmail($email) === false) {
//Proceed with insert
} else {
//Don't do insert
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.