2012-06-26 92 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中使用{}括号? –