2010-12-20 62 views
1

如何是你的一切,如何避免重複的用戶在我的數據庫和PHP

希望每一個在這裏是OK,

現在我有一個表格,該管理員可以創建用戶,他可以刪除用戶如讓我顯示的代碼首先

這是我的代碼

> > <?php error_reporting(E_ALL); 
> 
> session_start(); 
> if(!isset($_SESSION['login']) || 
> $_SESSION['login']!='1')   { 
>  header("Location:loginpage.php"); 
>  } ?> 
> 
> <!DOCTYPE html PUBLIC "-//W3C//DTD 
> XHTML 1.0 Transitional//EN" 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
> <html 
> xmlns="http://www.w3.org/1999/xhtml"> 
> <head> <meta http-equiv="Content-Type" 
> content="text/html; charset=utf-8" /> 
> <title>My Control panel</title> <link 
> href="../css_style.css" 
> rel="stylesheet" type="text/css" /> 
> </head> 
> 
> 
> 
> <body> <div id="werpper"> <div 
> id="content"> 
> 
> <div id="header">My control - 
> Panel</div> <div id="body_cntent"> 
> <div id="left_side"> <p>Home and 
> instructions</p> <p><a 
> href="../control_panel.php">main 
> directory</a></p> <p><a 
> href="add_event.php">Add new 
> event</a></p> <p><a 
> href="../editoccasion.php">Control 
> Occasion's</a></p> <p><a 
> href="add_photos_and_occasion.php">Add 
> Photos_occasion</a></p> <p><a 
> href="../signout.php">Sign out</a></p> 
> </div> <div id="right_side"> 
> 
> <h2>Add new user</h2> 
> 
> <form action="" method="post"> 
> 
> <table width="600" border="0" 
> cellpadding="5" cellspacing="0"> 
> <tr> 
>  <td width="78">User name</td> 
>  <td width="2">&nbsp;</td> 
>  <td width="149"><input type="text" name="uname" value="" /></td> 
>  <td width="332" rowspan="5" align="left" valign="top"><p 
> class="red">For Administration use 
> only.</p> 
>  <p>You can add or delete users from <a 
> href="edit_users.php">here</a><br /> 
>   You can't edit any user if you like to change any user account you 
> can delete the user and create it 
> again with the new 
> information.</p></td> </tr> <tr> 
>  <td>Password</td> 
>  <td>&nbsp;</td> 
>  <td><input type="text" name="pass" value="" /></td> 
>  </tr> <tr> 
>  <td>&nbsp;</td> 
>  <td>&nbsp;</td> 
>  <td><input type="submit" name="submit" value="Add user" /></td> 
>  </tr> <tr> 
>  <td>&nbsp;</td> 
>  <td>&nbsp;</td> 
>  <td>&nbsp;</td> 
>  </tr> <tr> 
>  <td>&nbsp;</td> 
>  <td>&nbsp;</td> 
>  <td align="right">&nbsp;</td> 
>  </tr> </table> </form> 
> 
> </div> </div> 
> 
> <div id="footer"></div> </div> </div> 
> 
> <?php 
>  if (isset($_POST['submit'])) { 
>    include_once "../config/config.php"; 
>    $uname = $_POST['uname'];  $pass =$_POST['pass']; 
>    $check = "select * from users where id = {$uname}";   $result_check 
> = $db->query($check)or die($db->error); 
>  
>    while ($row = $result_check -> fetch_object()) { 
>      if(num_rows == 1){ 
>    
>    echo "error"; 
>    
>    }else{ 
>    $add_user = "insert into users (id, uname, pass) values ('', 
> '$uname', '$pass')"; 
>    $result = $db -> query($add_user) or die ("$db->error"); 
>    if ($result) { 
>      echo "user added successfuly"; 
>      }else{ 
>    
>    echo "There was an error please try again later"; 
>    
>    }   }  } } ?> 
> 
> </body> </html> 

所有我需要在這裏知道的是如何解決這個代碼的問題

$check = "select * from users where id = {$uname}"; 
     $result_check = $db->query($check)or die($db->error); 


     while ($row = $result_check -> fetch_object()) { 

      if(num_rows == 1){ 

       echo "error"; 

       } 

我怎樣才能避免重複的用戶在我的分貝

+0

我會檢討當我回家時,這又一次,但任何幫助將是值得稱道的 – 2010-12-20 14:23:10

回答

0

我不知道你正在使用的數據庫,圖書館以及它所有的方法都是,所以我做了這個用普通的MySQL,如果你去製作uname(用戶名)字段UNIQUE INDEX的路線 -

// instantiate database connection 
$db = mysql_connect(..); 

// assuming the id field is auto incrementing, it can be left out of the query 
$add_user = "INSERT INTO users (uname, pass) "; 
$add_user .= "VALUES ('" . mysql_real_escape_string($uname) . "', "; 
$add_user .= "'" . mysql_real_escape_string($pass) . "')"; 

if (mysql_query($add_user, $db)) 
{ 
    if (mysql_affected_rows($db) == 1) 
    { 
     // New user added, do something 
    } 
} 
else 
{ 
    if (mysql_errno($db) == 1062) 
    { 
     // Duplicate username, do something 
    } 
    else 
    { 
     // A different database error occurred 
     die('Error: ' . mysql_error()); 
    } 
} 
+0

謝謝先生stealthyninja爲你的幫助,但我使用的是php5和MYSQLI,有一些被稱爲「計數」的東西,這是我遇到的問題的解決方案,但我不記得如何使用它請在php http:// php上看到這個達網絡/手動/ EN/mysqli.field-count.php – 2010-12-20 21:32:42

0

爲了防止重複的用戶在你的數據庫,只是做一個選擇類似於你在INSERT檢查,以查看該用戶是否存在之前已經上市的一個。另一種方法是,更糟糕的方法是在數據庫中的字段上添加一個UNIQUE約束,然後在重複時INSERT將失敗。

+0

爲什麼獨特的約束會更糟?一開始就更可靠,因爲它也會阻止用戶通過phpmyadmin手動添加重複項。 – GordonM 2010-12-20 14:29:45

+0

我說過,如果你正在歸檔舊用戶,那麼同樣的用戶名永遠不會被重用,除非你對一組字段有UNIQUE約束,否則這將會更糟糕。 – judda 2010-12-20 14:33:44

+0

只是同樣的先生我想要這樣的東西http://php.net/manual/en/mysqli.field-count.php檢查這在PHP上,有一個解決方案,但我不記得它是如何做到的謝謝judda – 2010-12-20 21:37:00

1

大多數數據庫都有一些製作列或獨特組合的方法。簡單地設置一個唯一的約束,無論你想要獨特的列。

如果已經有用戶不是唯一的,那麼您必須首先從數據庫中清除它們。

+0

是的,我知道這個先生,但我想用的東西與PHP不與MYSQL我不想錯誤來自數據庫我想要PHP來檢查這個,並呼應錯誤,如果有的話是一個錯誤。再次感謝主席先生幫助我 – 2010-12-20 21:35:03

+0

PHP能夠捕獲SQL錯誤並處理它,但是您認爲合適。你怎麼做取決於PHP如何與數據庫連接(MySQL,MySQLi,PDO等),但所有的接口機制都提供了處理SQL錯誤的方法。使用約束條件真的是這樣做的正確方法,其他任何東西都是最好的解決方案。 – GordonM 2010-12-21 10:56:01

2

OK剛發現我的堆棧溢出的答案我喜歡這個網站,所有的人有

這就是答案

$check = $db->query("SELECT 1 FROM users WHERE uname='$uname'"); 
      if (mysqli_num_rows($check) > 0) { 
       die('username already taken'); 

它是非常簡單並且還使用count(同一概念),如果有人知道計數的東西,請把它寫入我們

感謝所有和問候, 優素福阿爾塔夫