php - 在编辑时检查其他重复条目,但忽略当前表单中的重复项
问题描述
我是 PDO 的新手,在编辑表单时我正在努力检查数据库中的重复项。
目前的情况是:
- 输入字段是电话号码
- 插入时正在检查它是否已存在于数据库中
- 编辑后,将再次检查编辑是否在数据库中匹配
- 一旦
添加了电话号码,我不能仅仅禁止编辑,因为如果将来需要更改怎么办 - 用户点击编辑按钮后,所有数据都被获取并回显到其各自的字段,因此用户将知道该字段已经具有此类信息或该字段仍为空
当用户只是在编辑其他字段(例如“PIN 更改更新”)时,就会出现问题,电话号码字段再次被检查,显然它会返回一个错误,说“它已经存在”。
如果没有更改,我如何忽略该字段条目?
这是edit.php的部分代码
if(isset($_POST['Edith_SIM'])) {
$id = $_POST['id'];
$s_num = $_POST['sim_num'];
$s_net = $_POST['sim_net'];
$s_pn1 = $_POST['simpn1'];
$s_pn2 = $_POST['simpn2'];
$s_pk1 = $_POST['simpk1'];
$s_pk2 = $_POST['simpk2'];
$s_fea = $_POST['sim_feat'];
$s_typ = $_POST['sim_type'];
$s_acq = $_POST['d_acq'];
$s_afo = $_POST['acq_for'];
$s_ufr = $_POST['d_uf'];
$s_uto = $_POST['d_ut'];
$s_dev = $_POST['use_dev'];
$s_sta = $_POST['sim_stat'];
$s_not = $_POST['sim_notes'];
$chekDuplicate = $dbConn->prepare('SELECT * FROM tst_sims WHERE SIM_num= :sim_num');
$chekDuplicate->execute(array(':sim_num' => $s_num));
// checking empty fields
if(empty($s_num)) {
echo "<font color='red'>Must have SIM number my dudes</font><br/>";
echo "<br/><a href='javascript:self.history.back();'>Go Back</a>";
} elseif($chekDuplicate->rowCount() > 0) {
echo "<font color='red'>Its existing my dudes</font><br/>";
echo "<br/><a href='javascript:self.history.back();'>Go Back</a>";
} else {
$sim_passed_e = "UPDATE tst_sims SET
SIM_num = :sim_num,
SIM_network =:sim_net,
SIM_PIN1 =:simpn1,
SIM_PIN2 =:simpn2,
SIM_PUK1 =:simpk1,
SIM_PUK2 =:simpk2,
SIM_features =:sim_feat,
SIM_type =:sim_type,
Acquired =:d_acq,
Acquired_for =:acq_for,
Used_from =:d_uf,
Used_to =:d_ut,
Used_devices =:use_dev,
Status =:sim_stat,
Notes =:sim_notes
WHERE Ent_id =:id";
$que_edit = $dbConn->prepare($sim_passed_e);
$que_edit->bindparam(':id', $id);
$que_edit->bindparam(':sim_num', $s_num);
$que_edit->bindparam(':sim_net', $s_net);
$que_edit->bindparam(':simpn1', $s_pn1);
$que_edit->bindparam(':simpn2', $s_pn2);
$que_edit->bindparam(':simpk1', $s_pk1);
$que_edit->bindparam(':simpk2', $s_pk2);
$que_edit->bindparam(':sim_feat', $s_fea);
$que_edit->bindparam(':sim_type', $s_typ);
$que_edit->bindparam(':d_acq', $s_acq);
$que_edit->bindparam(':acq_for', $s_afo);
$que_edit->bindparam(':d_uf', $s_ufr);
$que_edit->bindparam(':d_ut', $s_uto);
$que_edit->bindparam(':use_dev', $s_dev);
$que_edit->bindparam(':sim_stat', $s_sta);
$que_edit->bindparam(':sim_notes', $s_not);
$que_edit->execute();
header("location: index.php");
echo "<font color='green'>Data added successfully my dudes.";
echo "<br/><a href='index.php'>View Result</a>";
}
}
我希望这不会让你们所有人感到困惑,我不知道我应该采取什么样的方法。
解决方案
在重复检查中排除当前 ID。
$chekDuplicate = $dbConn->prepare("SELECT * FROM tst_sims WHERE SIM_num= :sim_num, id != :id");
$chekDuplicate->execute([':sim_num' => $s_num, ':id' => $id]);
sim 号码是否更改无关紧要,只是这个 sim 号码不应该被任何其他用户使用,除了正在更新此记录的当前用户,我们很好。
推荐阅读
- excel - Power Query/Excel:使用 API 和密钥从 API 导入数据
- angular - 将特定文件排除到较旧的 Typescript 版本
- wordpress - ACF 复选框 - 翻译
- c# - Authorization check in different microservices
- javascript - 如何使用正则表达式排除选定的目录?
- javascript - 使用数组创建数字金字塔
- c - make: *** 没有规则来制作目标 '-std=c99'
- python - AttributeError:“NoneType”对象没有属性“count”-discord.py
- r - 如何在R中将重叠时间段分成重叠和非重叠时间段
- laravel - 如何解决 您无权访问此资源。Ubuntu Laravel?