-6

私は、4 つのフォームを持つ単純な学生管理システムを作成しています。データベース内のエントリの重複を防ぐにはどうすればよいですか? 重複を防ぎたいのですが、コードに何を追加すればよいですか?

<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>
4

4 に答える 4

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>
于 2012-06-26T07:25:42.843 に答える
1

データベースを作成するときに、任意の列に「一意の」制約を指定できます。例については、http://www.w3schools.com/sql/sql_unique.aspを参照してください。

于 2012-06-26T05:01:29.743 に答える
0

最初に、レコードのどの列を複製してはならないかを決定する必要があります。firstName と同様に重複する可能性があるため、生年月日も重複する可能性があります。ただし、SSN は重複できません。または、firstname、lastname、dob、fathersName の組み合わせを複製できないように、列のセットを複製できないビジネス ロジックに基づいている可能性があります。

データベースにテーブルを作成するときにこれを決定した後、一意の制約を適用する必要があります

于 2012-06-26T05:18:36.540 に答える
0

一意のレコードのみを表示することを考えている場合:

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

一意のレコードのみを追加/挿入/消費する方法でテーブルを変更することを考えている場合は、 一意の制約は問題ありません。

よろしく。

---X----
あなたのコードで:

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

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

名前を $username に保存し、 $name を使用すると、次の
ようになります。

$query = "SELECT * FROM `data` WHERE `name` = '$username'";
于 2012-06-26T05:24:55.610 に答える