2015-05-30 150 views
2

我不能想出一种方法来拒绝我的PHP网站中的相同用户帐户,并且使用其他代码很难。我试图在phpmyadmin中使用独特的,但在拒绝它之后它给了我一个错误。下面的代码:在MySql中避免重复。

<?php 
include '../layout/header.php'; 
if(isset($_POST['submit'])) { 


$email = $_POST['email']; 
$pass1 = $_POST['pass1']; 
$pass2 = $_POST['pass2']; 


if($pass1 == $pass2){ 


    $uname = $_POST['uname']; 
    $email = $email; 
    $pass1 = $pass1; 
    $pass2 = $pass2;  

    include '../DB/DB.php'; 

    $db = new DB; 


    $db->__set('username','root'); 
    $db->__set('password',''); 
    $db->__set('dsn','mysql:host=localhost;dbname=login;'); 
    $db->conn(); 

    $aData = array(); 
    $aData[0]['users'] = $uname; 
    $aData[0]['email'] = $email; 
    $aData[0]['pass'] = $pass1; 

    $db->dbInsert('vartotojai', $aData); 

    Echo "<a href='../index.php'>Atgal</a><br>"; 

}else{ 
    die("sorry, your passwords dont match. <br />"); 
} 


}else{ 

$form = ' 
<form action="register.php" method="POST"> 
Username: <input type="text" name="uname" /><br /> 
Email: <input type="text" name="email" /><br /> 
Password: <input type="password" name="pass1" /><br /> 
Confirm password: <input type="password" name="pass2" /><br /> 
<input type="submit" value="Registruotis" name="submit" /> 
</form>'; 


echo $form; 


} 

Echo "<a href='../index.php'>Atgal</a><br>"; 


?> 
+0

您想避免使用相同的电子邮件创建同一用户? –

+0

你想用数据库中哪一列作为参考来检查重复记录,比如电子邮件或其他东西? –

+0

我想避免创建相同的用户名。他们可以有相同的电子邮件,但不能使用用户名。 – zalias

回答

0

你只需要看看表中是否已经有使用相同用户名的记录。

使用的查询,如:

SELECT [row] FROM [table] WHERE users=[username]; 

...与有各自的值替换[行],[表],[用户名]。 你做SELECT查询的方式将取决于你使用的是什么库$ db

然后你需要检查结果集中是否返回了任何记录。

if (!isset($resultSet)) { //therefore username is unique 
    //insert user to database 
} else { 
    //prompt 'user already exists' 
} 

编辑:PDO例

$db = new Db(); 
$db->bind("uname",$uname); 
$query = $db->query("SELECT uname FROM [table] WHERE users = :uname"); 
if (!isset($query[0]['users'])) { //therefore username is unique 
    //insert user to database 
} else { 
    //prompt 'user already exists' 
} 
+0

我这样做很难。因为我使用的是PDO,并且不太了解如何使用我的查询。 – zalias

+0

你在使用什么PDO库? – seanbrodie

+0

我正在使用这个:http://pastebin.com/RK2A6Bgk。真的不能说这是哪一个。 当我尝试你的代码它给了我一个错误说:调用未定义的方法DB :: bind() – zalias

0

要做到这一点是由你的数据库模式UNIQUE中定义的约束,因为你已经提到尝试的最佳和最快的方式。

另一种方式是简单地选择数据库中的任何记录与任何你想成为'唯一'的字段,如果它返回任何记录,它显然不是唯一的,你的脚本应该失败,否则,继续无论你在做什么。

的SQL查询可以是这个样子:

SELECT COUNT(id) FROM sakila.actor WHERE [parameter] LIKE '[WHAT YOU'RE TESTING]'; 

如果该查询返回0,那么你是好去,如果返回1,那么就只有一个人与参数已经在,如果它返回的值大于1,那么您已经有重复的值。

+0

当我使用唯一并尝试使用相同的用户名注册时,会显示这些错误:http://imgur.com/QHJUREo – zalias

+0

这是您希望在尝试插入重复值时发生的情况。所有你需要做的就是捕捉异常,如果异常被抛出,那么你就会知道具有该名称或电子邮件的东西已经存在,并处理异常,可能会显示错误信息。 – Pavlin

0

首先创建一个字段名等具有独特AUTO_INCREMENT ID和检查以下内容代码

SELECT * FROM tbname其中UNAME = '名称' 和口令= “password”

如果这个查询返回null数组,这不是一个有效的用户,否则它可能有数组值它是你网站的用户,这个过程也是插入db的新用户