我一直在使用公式来唯一地保护从数据库收集的id,然后再将它们呈现给客户端。
然而,随着我的代码变得越来越复杂,我陷入了这个陷阱:我有两个单独的案例返回需要使用相同id的json。由于我的安全功能在每次执行时都会产生唯一的哈希和密钥,因此从一个案例中收集的哈希ID无法在需要使用它的另一个案例中加密。因此,作为一个解决方案,我认为发送散列id从第一个案例再次回到第一个案例,在那里解密然后以某种方式将其传递给另一个案例,而客户端从未有机会捕获真实的id。
所有代码都运行良好,我的问题是匹配从第一种情况中提取的id,该情况将在第二种情况下使用,该情况也会在情况中断之前发回数据,这只是客户端触发的循环。我提供代码以防你提出要求。问题是在两个单独的php情况下简单地将相同的id与不同的唯一哈希匹配。对不起,如果我把它变得比它应该更复杂。
这是我用来填充下拉列表选择的第一个案例。
case "tutorRefresh":
$tutorSelectSql = "SELECT id, tname, tsurname FROM tutors";
$tutorSelectQry = pg_query($tutorSelectSql);
while($row = pg_fetch_array($tutorSelectQry)){
$id = lockPandoraBox($row['id']);//encrypt the id
$response[] = array("id" => $id,
"tname" => $row['tname'],
"tsurname" => $row['tsurname']);
};
if(isset($response)){
echo json_encode($response);
} else {
$response = array("val" => 0);
echo json_encode($response);
}
break;
这是更新表数据的第二种情况所使用的函数,因为它对于单个问题来说太长而复杂,无法在此处发布,我只共享相关的代码部分。我必须将上面代码中加密的id与此处加密的id匹配,因为此代码填入表中,而上面的代码只填写下拉选项。
$crypted = lockPandoraBox($row["appid"]);
$tutorID = lockPandoraBox($row["tutorid"]);//encrypting id
$clientID = lockPandoraBox($row["clientid"]);//same method for another id, ignore this.
$fApp["hours"][] = array("recId" => $crypted,
"hour" => $row["hour"],
"tutor" => $tutorArr["tname"]." ".$tutorArr["tsurname"],
"tutorId" => $tutorID,// id that I need to use
"client" => $clientArr["cname"]." ".$clientArr["csurname"],
"clientId" => $clientID,
"department" => $dept,
"degree" => $deg,
"purpose" => $purposeArr["pname"],
"purposeId" => $row["purpose"],
"contact" => $clientArr["cgsm"],
"email" => $clientArr["cemail"],
"tutorAbsCheck" => $tutorAbsArray["id"],
"tutorAbsReason" => $tutorAbsArray["reason"],
"clientAbsCheck" => $clientAbsArray["id"],
"clientAbsReason" => $clientAbsArray["reason"]
);
/* */
}
return json_encode($fApp);
}
最后,这是我的主页面中的代码,它在触发我需要的事件的点击事件功能中起作用。它只是更改匹配的点击记录的选择框选择。它从表中选择id并尝试将其与选择框中的id匹配。提前谢谢。
$( “#tutorEdit”)VAL(dayData [ “小时”] [$(el.currentTarget).attr( “钥匙”)] tutorId。).trigger( “变化”);
< / LI>答案 0 :(得分:0)
我认为最好稍微改变结构以结合两种情况以实现我的目标。我想知道我是否可以绕过它。