如何查看我的MySQL表以确保我不会两次输入相同的内容?

时间:2014-04-12 17:27:42

标签: php mysql duplicates

现在我正在尝试创建一个为数据库添加名称的PHP / MySQL设置。如果它已经存在,我不希望它将名称添加到数据库中。现在它无论如何都要将名称添加到数据库中。

我有三个文件用于此。

首先是Names.php文件:

<html>
<head>
    <link rel="stylesheet" href="Site.css">
    <?php include("Header.php"); ?>
    </div>
</head>

<body>
    <div id="main">
        <h1>About</h1>

        <form action="Insert.php" method="post">
            <p>What is your full name?</p><input type="text" name="names"><br>

            <input type="submit">
        </form>

        <?php include("Footer.php");?>
    </div> 
</body>
</html>

接下来是Insert.php文件:

<?php 
$con = mysql_connect("localhost","a7068104_user2","wiseguy1345");
if(!$con) {
    die("could not connect to localhost:" .mysql_error());
} 

mysql_select_db("a7068104_world") or die("Cannot connect to database");

$result = mysql_query("SELECT * FROM names_1 ORDER BY names");
if(!$result) {
    die('Invalid SELECT query:' .mysql_error());
}

$sql="INSERT INTO names_1 (names) VALUES ('$_POST[names]')";

if (!mysql_query($sql,$con)) {
    die('Error: ' . mysql_error());
}

header("refresh:1.5; url=NamesAction.php");

mysql_close($con)
?>

<html>
<head>
    <link rel="stylesheet" href="Site.css">
    <?php include("Header.php"); ?>
    </div>
</head>

<body>
    <div id="main">
        <h1>Names</h1>
        <p>You will be redirected back to the <b>Names</b> page in a moment.</p>
        <?php include("Footer.php");?>
    </div>
</body>
</html>

最后是NamesAction.php文件:

<html>
<head>
    <link rel="stylesheet" href="Site.css">
    <?php include("Header.php"); ?>
    </div>
</head>

<body>
    <div id="main">
    <h1>Names</h1>

    <?php 
        $con = mysql_connect("localhost","a7068104_user2","wiseguy1345");
        if(!$con) {
            die("could not connect to localhost:" .mysql_error());
        } 

        mysql_select_db("a7068104_world") or die("Cannot connect to database");
    ?>

    <?php
        mysql_query("LOCK TABLES names_1 WRITE;");

        $result = mysql_query("SELECT * FROM names_1 ORDER BY names DESC LIMIT 100000");
        if(!$result) {
            die('Invalid SELECT query:' .mysql_error());
        }

        echo "<table border='2'>
        <tr>
        <th>Name</th>
        </tr>";

        while($row = mysql_fetch_array($result)) {
            echo "<tr>";
            echo "<td>" . $row['names'] . "</td>";
            echo "</tr>";
        }

        echo "</table>";

        mysql_query("UNLOCK TABLES;");

        mysql_close($con);
    ?>

    <?php include("Footer.php");?>
    </div>
</body>
</html>

请帮忙,因为我不知道如何确保我没有在数据库中输入两次东西!我想要做的是检查数据库以确保它已经添加,如果已添加已经向用户发送消息并添加它,如果没有添加已经发送消息说它正在添加到数据库并将其添加到数据库中。

谢谢, leonardude

4 个答案:

答案 0 :(得分:3)

首先不要使用mysql_*系列函数。但我会用它们编写下面的代码,因为你可能更习惯它们。但严重的是,不要使用它们。而是使用mysqliPDO

 $name = mysql_real_escape_string($_POST['names']);
 $query = "SELECT * FROM names_1 WHERE names='$name'";
 $result = mysql_query($query);
 if(mysql_num_rows($result) > 0 ){
       //Already in Db
 }
 else{
      $query = "INSERT INTO names_1 (names) VALUES('$name')";
      $result = mysql_query($query);
      if($result){
          //successful
      }
      else{
          //Unsuccessful
      }
 }

或者让数据库引擎为您处理任务,方法是将唯一约束添加到与其他答案建议唯一的列中。

答案 1 :(得分:1)

使用UNIQUE键。

CREATE TABLE someTable(
    ID INT PRIMARY KEY,
    some_unique_value INT UNIQUE
);

我希望这会有所帮助:)

答案 2 :(得分:0)

为输入重复数据时需要在数据库中唯一的字段和try / catch抛出异常创建唯一键。

答案 3 :(得分:0)

此检查可以在数据库端完成

ALTER TABLE `names_1`.`names` DROP PRIMARY KEY, ADD PRIMARY KEY (`names`);