【问题标题】:Check if username exists PDO检查用户名是否存在 PDO
【发布时间】:2014-04-26 00:57:01
【问题描述】:

我如何能够检查多个因素的组合而不是检查每个因素?所以基本上我使用的是 PDO,我必须确保用户名和电子邮件是唯一的。那我该怎么做呢?我见过

if ( $sthandler->rowCount() > 0 ) {
// do something here
}  

但是有没有更好的方法来做到这一点。另外,如果没有人可以解释我将如何使用它。

编辑 这是我输入数据库的查询代码

        <?php
try {
    $handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
    exit($e->getMessage());
}

$name = $_POST['name']; 
$username = $_POST['username']; 
$email = $_POST['email'];   
$password = $_POST['password']; 
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];

//Verifcation 
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1))
    {
    echo "Complete all fields";
    }

// Password match
if ($password != $password1)
    {
    echo $passmatch = "Passwords don't match";
    }

// Email validation

if (!filter_var($email, FILTER_VALIDATE_EMAIL))
    {
    echo $emailvalid = "Enter a  valid email";
    }

// Password length
if (strlen($password) <= 6){
    echo $passlength = "Choose a password longer then 6 character";
}





function userExists($db, $user)
{
    $userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':user' => $user));
    return !!$stmt->fetch(PDO::FETCH_ASSOC);
}

$user = 'userName';
$exists = userExists($db, $user);
if(exists)
{
     // user exists already.
}
else
{
     // user doesn't exist already, you can savely insert him.
}
if(empty($passmatch) && empty($emailvalid) && empty($passlength)) {

//Securly insert into database
$sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';    
$query = $handler->prepare($sql);

    $query->execute(array(

    ':name' => $name,
    ':username' => $username,
    ':email' => $email,
    ':password' => $password,
    ':ip' => $ip

    ));
    }
?>

【问题讨论】:

  • 显示更多代码。
  • 实际上并没有更多。一旦我确定输入是有效的,我就将它插入到数据库中。我仍然会添加更多@relentless

标签: php mysql pdo


【解决方案1】:
 <?php
//Connections
try {
    $handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
    exit($e->getMessage());
}

$name = $_POST['name']; 
$username = $_POST['username']; 
$email = $_POST['email'];   
$password = $_POST['password']; 
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];


//Verifcation 
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){
    $error = "Complete all fields";
}

// Password match
if ($password != $password1){
    $error = "Passwords don't match";
}

// Email validation

if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
    $error = "Enter a  valid email";
}

// Password length
if (strlen($password) <= 6){
    $error = "Choose a password longer then 6 character";
}

if(!isset($error)){
//no error
$sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name");
$sthandler->bindParam(':name', $username);
$sthandler->execute();

if($sthandler->rowCount() > 0){
    echo "exists! cannot insert";
} else {
    //Securly insert into database
    $sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';    
    $query = $handler->prepare($sql);

    $query->execute(array(

    ':name' => $name,
    ':username' => $username,
    ':email' => $email,
    ':password' => $password,
    ':ip' => $ip

    ));
    }
}else{
    echo "error occured: ".$error;
    exit();
}

【讨论】:

  • 这样我就全部使用了吗?我还用更多代码编辑了我的帖子
  • 哦,我明白你的意思了,我修改了你的代码以添加逻辑@user3574362
  • 嗯。好像没有输入,现在输入数据库,或者回显错误信息
  • 是的。我现在已经添加了我的完整代码。以防万一它可能是我没有显示导致问题的东西..
  • 现在完美运行。那电子邮件呢。我会为电子邮件做同样的事情吗?
【解决方案2】:

这样的事情应该可以工作:

function userExists($db, $user)
{
    $userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':user' => $user));
    return !!$stmt->fetch(PDO::FETCH_ASSOC);
}

$user = 'userName';
$exists = userExists($db, $user);
if(exists)
{
     // user exists already.
}
else
{
     // user doesn't exist already, you can savely insert him.
}

【讨论】:

  • 我不确定要在该代码中修改什么以使其适用于我的代码。我有一个编辑,如果你能帮助我,那就太好了
  • 我想知道你是否试图理解它。您应该已经将用户更改为用户名,您应该能够理解。
  • 当您只需要行数时,为什么要从行中获取所有数据?
【解决方案3】:

您显示的代码对于检查用户名和电子邮件是否唯一没有多大意义。您应该在数据库上设置UNIQUE KEY

【讨论】:

  • 为什么没有意义?
  • 您应该尝试创建INSERT,如果数据已经存在,请检查错误。如果您想通过以下步骤完成:1 检查是否有该用户名/电子邮件的条目2 如果没有则插入 - 有时您可以获得 2 个同时会话的 2 个条目(通常在用户快速提交表单两次时发生)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多