2013-07-23 57 views
0

我试了很多,使这个代码适用于我的registration.php页面,我只想检查电子邮件和用户名是否已经注册在我的数据库中。我试着只检查用户名,它工作正常,但现在我也想检查电子邮件是否已注册。任何有关这方面的帮助将不胜感激。以下是我的registration.php代码,希望有人会帮助!谢谢!PHP - 检查电子邮件和用户名是否已经存在于MySQL数据库

<?php 

/* 
Our "config.inc.php" file connects to database every time we include or require 
it within a php script. Since we want this script to add a new user to our db, 
we will be talking with our database, and therefore, 
let's require the connection to happen: 
*/ 
require("config.inc.php"); 

//if posted data is not empty 
if (!empty($_POST)) { 
//If the username or password is empty when the user submits 
//the form, the page will die. 
//Using die isn't a very good practice, you may want to look into 
//displaying an error message within the form instead. 
//We could also do front-end form validation from within our Android App, 
//but it is good to have a have the back-end code do a double check. 
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['FullName']) || empty($_POST['emailadd'])) { 


    // Create some data that will be the JSON response 
    $response["success"] = 0; 
    $response["message"] = "Please fill in all the fields!"; 

    //die will kill the page and not execute any code below, it will also 
    //display the parameter... in this case the JSON data our Android 
    //app will parse 
    die(json_encode($response)); 
} 

//if the page hasn't died, we will check with our database to see if there is 
//already a user with the username specificed in the form. ":user" is just 
//a blank variable that we will change before we execute the query. We 
//do it this way to increase security, and defend against sql injections 
$query  = " SELECT 1 FROM users WHERE username = :user , eadd = :email"; 
//now lets update what :user should be 
$query_params = array(
    ':user' => $_POST['username'], 
    ':email' => $_POST['eadd'] 
); 

//Now let's make run the query: 
try { 
    // These two statements run the query against your database table. 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute($query_params); 
} 
catch (PDOException $ex) { 
    // For testing, you could use a die and message. 
    //die("Failed to run query: " . $ex->getMessage()); 

    //or just use this use this one to product JSON data: 
    $response["success"] = 0; 
    $response["message"] = "Database Error1. Please Try Again!"; 
    die(json_encode($response)); 
} 

//fetch is an array of returned data. If any data is returned, 
//we know that the username is already in use, so we murder our 
//page 
$row = $stmt->fetch(); 
if ($row) { 
    // For testing, you could use a die and message. 
    //die("The username is already in use! Try a different username!"); 

    //You could comment out the above die and use this one: 
    $response["success"] = 0; 
    $response["message"] = "The username is already in use! Try a different username!"; 
    die(json_encode($response)); 
} 

//If we have made it here without dying, then we are in the clear to 
//create a new user. Let's setup our new query to create a user. 
//Again, to protect against sql injects, user tokens such as :user and :pass 
$query = "INSERT INTO users (username, password, FullName, eadd) VALUES (:user, :pass, :fulnme, :email)"; 

//Again, we need to update our tokens with the actual data: 
$query_params = array(
    ':user' => $_POST['username'], 
    ':pass' => $_POST['password'], 
    ':fulnme' => $_POST['FullName'], 
    ':email' => $_POST['eadd'] 
    ); 

//time to run our query, and create the user 
try { 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute($query_params); 
} 

catch (PDOException $ex) { 
    // For testing, you could use a die and message. 
    //die("Failed to run query: " . $ex->getMessage()); 

    //or just use this use this one: 
    $response["success"] = 0; 
    $response["message"] = "Database Error2. Please Try Again!"; 
    die(json_encode($response)); 
} 

//If we have made it this far without dying, we have successfully added 
//a new user to our database. We could do a few things here, such as 
//redirect to the login page. Instead we are going to echo out some 
//json data that will be read by the Android application, which will login 
//the user (or redirect to a different activity, I'm not sure yet..) 
$response["success"] = 1; 
$response["message"] = "Registration was successful!"; 
echo json_encode($response); 

//for a php webservice you could do a simple redirect and die. 
//header("Location: login.php"); 
//die("Redirecting to login.php"); 


} else { 
?> 
<h1>Register</h1> 
<form action="register.php" method="post"> 
    Full Name<br /> 
    <input type="text" name="Name" value="" /> 
    <br /><br /> 
    Email Address<br /> 
    <input type="text" name="eadd" value="" /> 
    <br /><br /> 
    Username:<br /> 
    <input type="text" name="username" value="" /> 
    <br /><br /> 
    Password:<br /> 
    <input type="password" name="password" value="" /> 
    <br /><br /> 
      <input type="submit" value="Register" /> 
</form> 
<?php 
} 

?> 
+3

哇!这是很多评论! –

+0

那你想要什么?如果用户名和密码已注册,或者用户名或电子邮件地址是否已经注册?这个AND/OR对你的回答至关重要 – Anigel

+0

那么问题是什么?发生了什么或没有发生什么?我们看到太多的代码,并没有描述它做了什么或应该做什么。 – deceze

回答

-2

创建一个像这样的函数..这用于检查电子邮件是否已经存在于服务器中。

 

function user_exists($username){ 
$username = sanitize($username); 
$query = mysql_query("SELECT * FROM `users` WHERE `user_name` = '$username' "); 
return (mysql_result($query,0) >= 1) ? true : false; 


然后,创建一个If嵌套循环来查看用户名是true还是false。 对电子邮件重复相同的操作。欢呼声......

代码
+0

如何为现有代码提供修复,而不是提供完全不同的基于'mysql'的代码? – deceze

+0

更改您的代码队友的变量字段。 – user2610122

+0

第一次我看到有人建议从PDO回到弃用的mysql扩展 – MLeFevre

1

你告诉你检查是否存在具有相同的用户名和相同的电子邮件数据库的人,

例子:

你在数据库中有

toto, [email protected] 
toto2, [email protected] 

toto,[email protected] 

测试有人注册你R测试不会找到任何人,因为没有人谁拥有电子邮件地址TOTO和[email protected]

您需要2个独立的语句,一个用户名和一个电子邮件地址

1

我觉得你的问题是与您的查询:

$query  = " SELECT 1 FROM users WHERE username = :user , eadd = :email"; 

是什么SELECT 1!?!?!也许SELECT *,你需要使用AND

$query  = " SELECT * FROM users WHERE username = :user AND eadd = :email"; 
+0

不行,没有为我工作。 – user2610342

相关问题