在我的PHP应用程序中。我从用户那里获取值,所有这些用户值都存储在Array中。只是为了验证。我正在将用户输入值与我的数组进行比较。:-
<?php
// Current Code
$masterArray = array(......); // ..... represents some 60-100 different values.
foreach($_POST as $key => $value) {
if(in_array($value, $masterArray)) {
$insertQuery = $mysqli->query("INSERTION stuff or Updating Stuff");
} else {
echo "Are you tampering html-form-data ?";
}
}
?>
但这是非常没有价值的代码,因为在更新或插入时需要相当长的时间。
如果从数组中的值存在于主数组中,是否有更好的函数可以更快地检查?
从从阵列i均值=>用户输入值的列表/阵列。
从主数组,我的意思是=>存储在页面中的我的数组值的列表。
感谢
我想我用array_diff得到了更好的选择。
在我将此代码放入生产页面之前,如果我在下面做了什么错事,请告诉我:-非常感谢你的努力@J.David Smith&grossvogel
<?php
$masterArray = array(.......); // My Master Array List
$result = array_diff($_POST['checkBox'], $masterArray);
if(count($result) > 0) {
// If they are trying to do some tampering , let them submit all again.
echo 'Something is not Right';
} else {
// If Person is genuine, no waiting just insert them all
$total = count($_POST['checkBox']);
$insertQuery = "INSERT into notes(user,quote) values ";
for($i=0;$i<=$total; $i++) {
array_push($values, "('someuser','".$mysqli->real_escape_string($_POST['checkBox'][$i])."')");
}
$finalQuery = $mysqli->query($insertQuery.implode(',', $values));
}
?>
我的代码更好吗?我正在localhost中测试它,我看不出有多大区别,我只是想知道专家的看法如果我在搞什么?在我将此代码放入生产页面之前。
更新:这看起来比有问题的代码更好、更快。
感谢
实现这一点的唯一其他方法是使用一个将值作为键的关联数组(好吧,您可以专门为此定制另一个存储容器,但这会过度使用imo)。然后,您可以使用isset
进行检查。例如:
$masterArray = array(....); // same thing, but with values as keys instead of values
foreach($_POST as $key => $value) {
if(isset($masterArray[$value])) {
// do stuff
} else {
// do stuff
}
}
我有点好奇这样做到底有什么意义,尤其是考虑到您的echo
调用打印的声明。也许还有比这更好的方法来实现你的目标。
编辑:grossvogel提出的另一种方法:在$masterArray
上循环,而不是在$_POST
上循环。如果您希望$_POST
始终是一个大数据集(即大多数时候人们会选择50多个项目),则此可能会更快。哈希已经很快了,所以你必须在代码中对其进行基准测试才能做出决定。
$masterArray = array(...); // either style of definition will work; i'll use yours for simplicity
foreach($masterArray as $value) {
if(isset($_POST[$value])) {
// do stuff
}
}