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

?>

しかし、更新や挿入にかなりの時間がかかるため、これは価値のないコードです。

スレーブ配列の値がマスター配列に存在するかどうかを確認するためのより高速な関数はありますか?

From Slave Array i Mean => List / Array of User Input value .

マスター配列から=>ページに保存されている配列値のリスト。

ありがとう

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));
    
    }

?>

私のコードはより良いですか、ローカルホストでテストしていますが、違いはあまり見られません。何かをいじっている場合は、専門家の見解を知りたいだけですか? このコードを本番ページに配置する前に。

更新:これは、問題のコードよりもかなり良く、高速に見えます。

ありがとう

于 2013-07-31T00:35:34.247 に答える
0

これを行う唯一の他の方法は、値をキーとして連想配列を使用することです (まあ、これ専用の別のストレージ コンテナーをカスタム実装することもできますが、それはやり過ぎです)。その後、 で確認できます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 に答える