【问题标题】:Check email exist with php mysqli使用 php mysqli 检查电子邮件是否存在
【发布时间】:2013-04-26 07:11:05
【问题描述】:

我是 mysqli 的新手,我想使用 php 和 mysqli 检查电子邮件是否已存在于数据库中

这是我到目前为止所做的:

ini.php

<?php
session_start();
require 'connect.php';
include 'user.func.php'; 
?>

connect.php

<?php
$con = new mysqli('host', 'user', 'password', 'db');
if($con->connect_errno > 0){
die('Sorry, We\'re experiencing some connection problems.'); 
}

?>

注册.php

<?php
include 'ini.php';
?>

<form action="" method="post">
<p>Username:<br/><input type="text" name="reg_name" maxlength="50"  ></p>
<p>Email:<br/><input type="text" name="reg_email" size="35" maxlength="50"  ></p>
<p>Password:<br/><input type="password" name="reg_password" maxlength="50" ></p>
<p>Re-type Password:<br/><input type="password" name="reg_re_password" maxlength="20"></p>
<p><input type="submit" value="Register" ></p>
</form>

<?php
include 'validate.php';
?>

验证.php

<?php
if(isset ( $_POST['reg_name'],$_POST['reg_email'], $_POST['reg_password'] )) {

$errors = array();
$name = $_POST['reg_name'];
$email = $_POST['reg_email'];
$password = $_POST['reg_password'];
$re_password = $_POST['reg_re_password'];
if(empty($name) || empty($email) || empty($password) || empty($re_password)){
$errors[] = 'All fields are required';
 } else {

if(strlen($name) > 50 || strlen($email) > 50 || strlen($password) > 50) {
 $errors[] = 'One or more field has too long Characters';
}

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE && $password !== $re_password){
$errors[] = 'Enter valid email address and password do not match';
}else{

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
$errors[] = 'Please enter a valid email address';
}

if($password !== $re_password){
$errors[] = 'Both passwords do not match';
}
if(user_exists($email) > 0){
$errors[] = 'That email is already been registered';
}

}

}

if (!empty($errors)) {
foreach ($errors as $errors) {
    echo '<strong>',$errors,'</srtong><br />';
}
}else{
echo 'Registered';
}
}

?> user.func.php

<?php    
function user_exists($email) {

$con = new mysqli('host', 'user', 'password', 'db');
$query = "SELECT * FROM users WHERE email = ?";
$stmt = $con->prepare($query);
$stmt->bind_param("s", $email);

if ($stmt->execute()) {
return $stmt->num_rows;
}
return false;
}
?>

此代码显示所有其他错误,但不检查电子邮件是否存在。相反,即使我输入已经在数据库中的电子邮件,它也会显示已注册。

我有一个名为“test”的数据库。以及包含 user_id、用户名、电子邮件和密码列的“用户”表。

谁能告诉如何为此编写 mysqli 查询代码?

我在mysql中使用了这段代码

function user_exists($email) {
$email = mysql_real_escape_string($email);
$query = mysql_query("SELECT COUNT('user_id') FROM 'users' WHERE 'email'='$email'");
return (mysql_result($query, 0) == 1) ? true :false;
}

【问题讨论】:

  • return $stmt-&gt;num_rows 返回一个整数,而不是严格的 true/false。考虑一下 Yogesh 的回答。
  • 在 Yogesh 的回答中从 cmets 扩展:您的程序中是否有 MySQLi 连接?你在哪里声明的?
  • 是的,连接正常
  • 在哪里您声明了连接?全球空间?
  • 在ini.php中我已经包含了connect.php

标签: php mysqli


【解决方案1】:

使用此条件,因为您要从查询中返回行数。

if(user_exits($register_email) > 0){

编辑

function user_exists($email) {
    $mysqli = new mysqli("host", "my_user", "my_password", "your_db");
    $query = "SELECT COUNT(*) AS num_rows FROM users WHERE email = ?";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("s", $email);

    if ($stmt->execute()) {
        return $stmt->num_rows;
    }
    return false;
}

【讨论】:

  • @Kishore user_exits($register_email) 应该是 user_exists($email) 吗?
  • @Kishore user_exi S ts,而不是 user_exits。是不是打错字了?
  • @YogeshSuthar 我收到这两个错误注意:使用未定义的常量 USER_TABLE - 在第 19 行的 F:\XAMPP\htdocs\reg_test\user.func.php 中假设为 'USER_TABLE' 致命错误:使用 $这当不在 F:\XAMPP\htdocs\reg_test\user.func.php 的对象上下文中时在第 21 行
  • @Kishore 是使用define() 定义的USER_TABLE
  • @Kishore 如果不使用class,您将无法使用$this。在您的代码中,它应该是您的 mysqli 对象。
【解决方案2】:

我可以用PDO告诉我该怎么做

<?php
function user_exists($email) {
    $query = "SELECT 1 FROM " . USER_TABLE . " WHERE email = ?";
    $stmt = $this->_db->prepare($query);
    $stmt->execute(array($email));
    return (bool)$stmt->fetchColumn();
}

虽然我认为严格检查没有意义

if(user_exits($register_email))

足够了

另外,我不明白你从哪里得到 $register_email 变量。你有错误报告吗?

顺便说一句,您需要一个已建立的 PDO 连接。此代码不适用于 mysqli

【讨论】:

  • 这是 $email 不是 $register_email 我改了但没有结果
  • 这是因为您使用的是 mysqli,而不是 PDO。并且没有错误报告
  • 如果没有填写任何字段但不检查电子邮件是否存在,则会显示错误
  • 那是你做错了。它不应该是 0 而是 E_ALL 并且在 php.ini 中它必须是 error_reporting = E_ALL
  • 我不希望代码显示 NOTICE 或 FATAL ERROR 它需要检查数据库并说“该电子邮件已被注册”。
猜你喜欢
  • 2013-01-05
  • 2017-08-12
  • 2012-02-25
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2020-06-04
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多