2012-06-26 124 views
-6

我正在製作一個簡單的學生管理系統,它有四種形式。我怎樣才能防止數據庫中的重複條目?我想防止重複,我應該在代碼中添加什麼?防止數據庫中的重複

<html> 
<head> 
     <title>Student list</title> 
      <link href="stylesheets/public.css" media="all" rel="stylesheet" type="text/css"/> 
</head> 
<body id="background"> 
    <table > 
    <tr> 
    <td> 
    <img src=" images/Picture3.png" width="1300" height="150"/> 
</td> 
    </tr> 
    </table> 
      <table> 
      <tr> 

<td id="structure"> 
<? 
    $name=$_POST['name']; 
    $email=$_POST['email']; 
    $shift=$_POST['shift']; 
    $class=$_POST['class']; 
    $id=$_POST['id']; 
    ?><?php 



$var= mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("database") or die(mysql_error()); 



$username = $_POST['name']; // you must escape any input. Remember. 

$query = "SELECT * FROM `data` WHERE `$name` = '{name}'"; 

$result = mysql_query($query); 

if (mysql_num_rows ($result) > 1) 
{ 
    /* Username already exists */ 
    echo 'Username already exists'; 
} 
else 
{ 



    mysql_query("INSERT INTO `data`(name,email,shift,class) VALUES ('$name', '$email', '$shift','$class')"); } 












    Print "Your information has been successfully added to the database."; 
    ?> 
    <?php 
    // Connects to your Database 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("database") or die(mysql_error()); 
    $data = mysql_query("SELECT * FROM data") 
    or die(mysql_error()); 
    Print "<table border cellpadding=5>"; 
    while($info = mysql_fetch_array($data)) 
    { 

    Print "<tr>"; 
    Print "<th>Id:</th><td>".$info['id']."</td>"; 
    Print "<th>Name:</th> <td>".$info['name'] . "</td> "; 
    Print "<th>Email:</th> <td>".$info['email'] . " </td>"; 
    Print "<th>shift:</th> <td>".$info['shift'] . " </td>"; 
    Print "<th>class:</th> <td>".$info['class'] . " </td>"; 
    Print "<tr><td><a href='update.php?id={$info['id']}'>EDIT</a></td></tr>"; 
    PRINT "<tr><td><a href='delete.php?id={$info['id']}'>DELETE</a></td></tr>"; 

    } 
    Print "</table>"; 
    ?> 
    </td></tr> 
    </table> 
</body></html> 
+3

爲什麼我們在等待 – McGarnagle

+0

代碼轉儲不是一個非常有用的問題。我建議首先使用谷歌搜索你的問題 - [第一個結果]之一(http://pb.zambale.com/2012/01/25/mysql-prevent-duplicates-using-the-unique-constraint/)非常適用。 – jmdeldin

+2

@dbaseman:因爲它是緊急的!! 1 – jmdeldin

回答

4

我更新您的代碼。

<?php 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("database") or die(mysql_error()); 
?> 
<html> 
<head> 
<title>Student list</title> 
<link href="stylesheets/public.css" media="all" rel="stylesheet" type="text/css"/> 
</head> 
<body id="background"> 
<table > 
    <tr> 
    <td><img src=" images/Picture3.png" width="1300" height="150"/></td> 
    </tr> 
</table> 
<table> 
    <tr> 
    <td id="structure"> 
    <? 
    // check for post data 
    if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['shift']) && isset($_POST['class']) && isset($_POST['id'])) 
    { 
     $name=$_POST['name']; 
     $email=$_POST['email']; 
     $shift=$_POST['shift']; 
     $class=$_POST['class']; 
     $id=$_POST['id']; 

     $username = $_POST['name']; // you must escape any input. Remember. 

     $query = "SELECT * FROM `data` WHERE `name` = '".$username."'"; 

     $result = mysql_query($query); 
     // check for duplicate 
     if (mysql_num_rows ($result) > 1) 
     { 
      echo 'Username already exists'; 
     } 
     else 
     { 
      // insert new record 
      mysql_query("INSERT INTO `data`(name,email,shift,class) VALUES ('".$name."', '".$email."', '".$shift."','".$class."')"); 
      print "Your information has been successfully added to the database."; 
     } 
    } 

    // list data 
    $data = mysql_query("SELECT * FROM data") or die(mysql_error()); 
    print "<table border cellpadding=5>"; 
    while($info = mysql_fetch_array($data)) 
    { 
     print "<tr>"; 
     print "<th>Id:</th><td>".$info['id']."</td>"; 
     print "<th>Name:</th> <td>".$info['name'] . "</td> "; 
     print "<th>Email:</th> <td>".$info['email'] . " </td>"; 
     print "<th>shift:</th> <td>".$info['shift'] . " </td>"; 
     print "<th>class:</th> <td>".$info['class'] . " </td>"; 
     print "<tr><td><a href='update.php?id={$info['id']}'>EDIT</a></td></tr>"; 
     print "<tr><td><a href='delete.php?id={$info['id']}'>DELETE</a></td></tr>"; 
    } 
    print "</table>"; 

    ?> 
    </td> 
    </tr> 
</table> 
</body> 
</html> 
+0

看來你只是重新格式化了代碼。你的貢獻是什麼? – jmdeldin

+2

更正錯誤 –

+0

您更正的具體錯誤是什麼?枚舉它們將有助於@FAWAZ和未來的訪問者。 – jmdeldin

1

創建數據庫時,可以爲任何列指定「唯一」約束。有關示例,請參閱http://www.w3schools.com/sql/sql_unique.asp

+0

我知道關於UNQUE CONTRAINT,但我想通過SQL的幫助來實現它 – FAWAZ

+0

@FAWAZ:爲什麼你不想使用唯一約束?是否因爲插入重複記錄會返回錯誤?您可以使用選擇查詢來檢查記錄是否已經存在。 –

+1

@FAWAZ,你能不能輸入所有大寫字母?看起來你正在向人們大喊大叫。 – tradyblix

0

首先,您必須確定記錄的哪一列不應重複。像firstName可以有重複,所以可以是出生日期。但SSN不能重複。或者可能根據你的業務邏輯設置的列不能重複,如firstname,lastname,dob和fathersName的組合不能重複。

決定這樣當您在數據庫中創建表後,必須申請unique constraint

+0

我希望電子郵件不應該被雙擊 – FAWAZ

+0

所以假設表名是用戶,它有列ID,名字,姓氏,電子郵件它會創建像這樣在MySQL中創建表用戶 ( Id int NOT NULL, LastName VARCHAR(255)NOT NULL, 名字爲varchar(255), 現爲varchar(100), UNIQUE(電子郵件) ) –

0

如果您想只顯示唯一的記錄則:

SELECT DISTINCT (Column1,Column2, ...) FROM Data 

如果你正在考慮修改表在它添加/插入/消耗唯一記錄的方式,那麼 unique constraint是好的。

關於。

--- X ----
在您的代碼:

$username = $_POST['name']; // you must escape any input. Remember. 

$query = "SELECT * FROM `data` WHERE `$name` = '{name}'"; 

您在$用戶名存儲的名稱,並使用$命名
它應該:

$query = "SELECT * FROM `data` WHERE `name` = '$username'"; 
+0

我已經存儲在$名稱的名稱不是$用戶名 – FAWAZ

+0

那麼什麼$用戶名是代表?還有爲什麼你在Query中使用{}括號? –