php - 我需要防止输入重复的数据。我基于以下几点;名字、姓氏和电话

标签 php mysql

我需要一个函数来根据以下字段检查重复条目:first_name、last_name 和 tel 我尝试过浏览论坛,但似乎找不到帮助。

<?
function do_data_entry($data){
global $conn;
$sql = "INSERT INTO entry_details (reg_type,mem_id,title,first_name,middle_name,last_name,address,tel,email,position,place_work,mem_cat,mem_fee,sub_date,next_date_sub,district,mem_status,mem_status_reason) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssssssssssssssss',$reg_type,$mem_id,$title,$first_name,$middle_name,$last_name,$address,$tel,$email,$position,$place_work,$mem_cat,$mem_fee,$sub_date,$next_date_sub,$district,$mem_status,$mem_status_reason);

//这会选择从代码中发布的数据(以下面的不同形式)

if(is_loggedIN() == 'user'){
redirect('../index.php');
}else if(is_loggedIN() == 'admin'){
if(isset($_POST['add_entry'])){
$data['reg_type'] = $_POST['reg_type'];
$data['mem_id'] = $_POST['mem_id'];
$data['title'] = $_POST['title'];
$data['first_name'] = $_POST['first_name'];
$data['middle_name'] = !isset($_POST['middle_name']) ? "" : $_POST['middle_name'];
$data['last_name'] = !isset($_POST['last_name']) ? "" : $_POST['last_name'];
$data['address'] = !isset($_POST['address']) ? "" : $_POST['address'];
$data['district'] = $_POST['district'];
$data['tel'] = !isset($_POST['tel']) ? "" : $_POST['tel'];
$data['email'] = !isset($_POST['email']) ? "" : $_POST['email'];
$data['position'] = !isset($_POST['position']) ? "" : $_POST['position'];
$data['place_work'] = !isset($_POST['place_work']) ? "" : $_POST['place_work'];
$data['mem_cat'] = $_POST['mem_cat'];
$data['mem_fee'] = $_POST['mem_fee'];
$data['sub_date'] = $_POST['sub_date'];
$data['next_date_sub'] = $_POST['next_date_sub'];
$data['mem_status'] = $_POST['mem_status'];
$data['mem_status_reason'] = $_POST['mem_status_reason'];
if(do_data_entry($data)){
        $_SESSION['message'] = "Entry created successfully";
        redirect('data_entry.php');
    }else{
        $_SESSION["message"] = "User already exists. Try different name";
    }
}
}else{
redirect('../login.php');
}

最佳答案

最简单直接的解决方案是创建一个由first_name + last_name + tel 列组成的主键。 之后,当您尝试插入完全相同的组合时,数据库(无论是什么)约束将引发错误并且插入将失败。

希望有帮助。

编辑:另一个(较差的)解决方案可能是:

在执行插入操作之前,访问存储的 sql 函数,该函数将检查您想要的内容。

sql 函数应该是这样的:

...
declare @someVariable int
select @someVariable = count(*) from table t 
where (t.FirstName = send_parameterFirstName) AND 
      (t.LasttName = send_parameterLastName) AND 
      (t.tel = send_parameterTel) 

if @someVariable > 0
  return -1 
else 
  return 1
....

如果你得到-1,你就不会插入......:) 当然你应该编写自己的代码,但我仍然认为主键是最好的解决方案,第二个只是一个糟糕的解决方案。 您可以在这里看到如何从 php 访问存储的 sql 函数: access sql functions from php

关于php - 我需要防止输入重复的数据。我基于以下几点;名字、姓氏和电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52909042/

相关文章:

php - 需要选择并显示特定用户编写的所有条目并对其进行计数

php - 查找满足范围条件的组合

javascript - Jquery 验证插件,如何检查 PHP 文件是否返回错误或可以将用户重定向到主页/仪表板

php - 用逗号分隔关联数组的值

mysql - 在 percona xtradb 集群中重置 master

mysql - 如何从一个表中查找另一个表中不存在的数据?

SQL用于解析多行数据?

mysql - 通过Mysql React原生json解析

php - Cakephp查看错误-使用UploadPack存储图片

javascript - 隐藏div中的表单并仅在重定向后显示它