防止重复的行数据条目

时间:2019-07-17 03:35:52

标签: php

我创建了一个数据库,该数据库在PHP应用程序中用ID,名称,mat_number,专业,年龄和性别命名了学生。

我不希望名称或mat_number多次被使用。

我已经在另一个页面中完成了到数据库的连接,并在添加学生页面中将其命名。

以下代码用于教师数据库集合


    <?php 
                if(isset($_POST['submit']))  {
                    $name = $_POST['name'];
                    $matNo = $_POST['mat_number'];
                    $age = $_POST['age'];
                    $specialty = $_POST['specialty'];
                    $gender = $_POST['gender'];

                    if(!empty($name) && !empty($matNo) && !empty($age) && 
                            !empty($specialty) && !empty($gender))
                {

                    $sql = "INSERT INTO `student`(`name`, `UB_number`, `age`, 
                                          `sex`, `specialty`)
                    VALUES ('$name', '$matNo', '$age', '$gender', '$specialty')";
                    $conn->query($sql);
                    header("Location: index.php");
                }
                else{
                    echo "Error: Complete all records";
                }          
                }

            ?>

如果数据库中已经存在2个字段,我想收到一条错误消息,要求进行更改。

3 个答案:

答案 0 :(得分:0)

要检查数据库中是否存在该记录的名字。

如果没有记录,请运行sql insert命令。

 if(isset($_POST['submit']))  {
     $name = $_POST['name'];
     $matNo = $_POST['mat_number'];
     $age = $_POST['age'];
     $specialty = $_POST['specialty'];
     $gender = $_POST['gender'];
        $sql = "SELECT * FROM `student` WHERE name = "'.$name.'" and UB_number = '".$matNo."'";
            $conn->query($sql);
            $cnt = $conn->rowCount();
        if($cnt == 0){
             $sql = "INSERT INTO `student`
                  (`name`, `UB_number`, `age`,`sex`, `specialty`)
                  VALUES
                  ('$name', '$matNo', '$age', '$gender', '$specialty')";
            $conn->query($sql);
            header("Location: index.php");
       }else{
            echo "Error: Complete all records";
       }          
}

答案 1 :(得分:0)

如果仅当不存在具有相同名称或mat_number的新记录时才想向DB插入新记录,那么您首先需要执行SELECT语句以查看它是否存在。

使用MySQLi:

<?php

include 'mysqli.php';
$conn = $mysqli;

if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $matNo = $_POST['mat_number'];
    $age = $_POST['age'];
    $specialty = $_POST['specialty'];
    $gender = $_POST['gender'];

    if ($name && $matNo && $age && $specialty && !$gender) {
        $stmt = $conn->prepare('SELECT 1 FROM student WHERE name=? OR UB_number=?');
        $stmt->bind_param('ss', $name, $matNo);
        $stmt->execute();
        $stmt->bind_result($exists);
        $stmt->fetch();
        if (!$exists) {
            $stmt = $conn->prepare('INSERT INTO `student`(`name`, `UB_number`, `age`, `sex`, `specialty`) VALUES(?,?,?,?,?)');
            $stmt->bind_param('sssss', $name, $matNo, $age, $gender, $specialty);
            $stmt->execute();
            exit(header("Location: index.php"));
        } else {
            echo 'A record with this name or material number already exists!';
        }
    } else {
        echo "Error: Complete all records";
    }
}

使用PDO:

<?php

include 'lib.php';
$conn = $pdo;

if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $matNo = $_POST['mat_number'];
    $age = $_POST['age'];
    $specialty = $_POST['specialty'];
    $gender = $_POST['gender'];

    if ($name && $matNo && $age && $specialty && !$gender) {
        $stmt = $conn->prepare('SELECT 1 FROM student WHERE name=? OR UB_number=?');
        $stmt->execute([$name, $matNo]);
        $exists = $stmt->fetchColumn();
        if (!$exists) {
            $stmt = $conn->prepare('INSERT INTO `student`(`name`, `UB_number`, `age`, `sex`, `specialty`) VALUES(?,?,?,?,?)')
                ->execute([$name, $matNo, $age, $gender, $specialty]);
            exit(header("Location: index.php"));
        } else {
            echo 'A record with this name or material number already exists!';
        }
    } else {
        echo "Error: Complete all records";
    }
}

答案 2 :(得分:-1)

希望这对您有帮助。在这里,我假设您没有使用任何框架。但是,如果您使用框架,则有很多简单的方法可以做到这一点。在这里,我仅检查了名称字段。您应该根据需要更新代码。另外,如果您可以在检查之前验证输入,那就更好了。像nValue++; double i = nValue; barChart.add(i); 。谢谢

trim()