0

在我的 PHP 应用程序中。我从用户那里获取价值,所有这些用户值都存储在数组中。只是为了验证。我正在将用户输入值与我的数组进行比较。:-

<?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 ?";
    }
}

?>

但这是毫无价值的代码,因为更新或插入需要相当长的时间

没有更好的功能可以更快地检查从属数组中的值是否存在于主数组中?

从属数组我的意思是=>用户输入值的列表/数组。

主数组我的意思是 =>存储在页面中的数组值列表。

谢谢

4

2 回答 2

1

我想我用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 中对其进行测试,我看不出有什么不同,我只想知道专家的意见,如果我弄乱了一些东西?在我将此代码放入生产页面之前。

更新:这看起来比有问题的代码更好更快。

谢谢

于 2013-07-31T00:35:34.247 回答
0

唯一的另一种方法是使用关联数组,并将您的值作为键(好吧,您可以专门为此自定义实现另一个存储容器,但这在 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
    }
}
于 2013-07-30T23:22:09.353 回答