2012-06-26 4 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

Я ЗНАЮ О БЕСПЛАТНОМ КОНТРАКТЕ, НО Я ХОЧУ ДЕЛАТЬ ЭТО ПОМОЩЬ SQL – FAWAZ

+0

@FAWAZ: почему вы не хотите использовать уникальное ограничение? Это потому, что он возвращает ошибку, если вы вставляете дубликат записи? Вы можете просто использовать запрос select, чтобы проверить, существует ли запись. –

+1

@FAWAZ, не можете ли вы набрать все колпачки? похоже, вы кричите на людей. – tradyblix

0

Сначала вы должны определить, какой столбец записи не должен дублироваться. Как firstName может иметь дубликаты, поэтому может быть дата рождения. Но SSN не может дублироваться. Или может быть основано на вашей бизнес-логике. Множество столбцов не может быть дублировано, как комбинация firstname, lastname, dob и fathersName не может дублироваться.

После принятия решения об этом, когда вы создаете таблицу в базе данных, вы должны применять unique constraint

+0

Я ХОЧУ ЧТО ПОЧТА НЕ ДОЛЖНА БЫТЬ DUPLCATED – FAWAZ

+0

так полагаю имя таблицы пользователя, и это столбцы идентификатор, Firstname, фамилия, электронная почта было бы создать нечто подобное в MySQL CREATE TABLE USER ( Id Int NOT NULL, LastName VARCHAR (255) NOT NULL, FirstName VARCHAR (255), Email VARCHAR (100), UNIQUE (E-mail) ) –

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

то за что $ имени пользователя является подставками для? также почему вы используете {} фигурные скобки в запросе? –