首页 > 解决方案 > 在编辑时检查其他重复条目,但忽略当前表单中的重复项

问题描述

我是 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>";
}
}

我希望这不会让你们所有人感到困惑,我不知道我应该采取什么样的方法。

标签: phpif-statementpdoduplicates

解决方案


在重复检查中排除当前 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 号码不应该被任何其他用户使用,除了正在更新此记录的当前用户,我们很好。


推荐阅读