我正在修改库存系统中的包装屏幕。用户打开一个包并插入/删除其中的项目,然后按Save,将包中所有部分的json数组发送到PHP端点,该端点负责将包保存在数据库中。 / p>
到目前为止,一切都很好,我已经创建了在PHP和javascript之间发送数据的函数。但是,即使javascript发送到PHP的json数组包含了产品的所有信息(因为无论如何要检索它以填充gui网格中的javascript都需要javascript),我仍然必须验证PHP中的所有内容,因为我无法在尝试保存之前,请确保用户没有篡改控制台中的数据。
这样说,在PHP中,我收到json数组,我使用ID将ID正确的对象列表加载到数组中。我正在这样做:
$in = str_repeat('?,', count($itemIDs) - 1) . '?';
$sql = "SELECT * FROM tbProduct WHERE nID IN ($in)";
$sttmt = $db->prepare($sql);
$sttmt->execute($itemIDs);
$res = $sttmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $key => $productInfo) {
$prod = new tbProduct($db);
$prod->loadFromArray($productInfo);
}
到目前为止,我现在有一个tbProduct数组,这是我的产品类。
我现在要做的是在此对象数组上运行验证,以确保所有这些objets处于正确的包装状态。这些验证包括确保所有产品具有相同的状态,所有产品都不是装配零件,所有产品都具有相同的所有者等。这样,即使阵列在浏览器控制台中被篡改,我也可以务必确保仍然使用数据库中的信息。
所以我需要一种方法来验证这一点。我可以做一个foreach,将第一个项目中需要检查的所有内容存储在变量中,然后将每个后续项目与这些变量进行比较,但是我敢肯定有更好的方法可以做到这一点。我需要一些效率更高的东西。我的包装可以(并且将包含)数百种产品,因此解决方案需要快速。
做这件事的最好方法是什么?
谢谢!
答案 0 :(得分:0)
您可以在处理查询返回的所有数据的循环中执行此操作。将变量设置为第一个对象,然后可以将其他元素与其进行比较。
$res = $sttmt->fetchAll(PDO::FETCH_ASSOC);
$firstprod = new tbProduct($db);
$firstprod->loadFromArray(array_shift($res));
foreach ($res as $key => $productInfo) {
$prod = new tbProduct($db);
$prod->loadFromArray($productInfo);
if ($prod->status != $firstprod->status) {
// report inconsistent status
} elseif ($prod->owner != $firstprod->owner) {
// report inconsistent owner
} elseif ($prod->type != "assembly") {
// report that it must ba an assembly part
} ...
}