Webアプリケーションを開発するとき、フォーム検証は、ユーザー入力データの有効性を確保するための重要なステップです。データ形式の確認に加えて、特に機密データの更新に関しては、ユーザーが元のデータを変更したかどうかを判断する必要があります。 PHPは有用な関数Array_diff_assoc()を提供します。これは、2つの配列の違いを判断し、ユーザーが元のデータを改ざんしているかどうかを確認するのに役立ちます。
array_diff_assoc()関数は、2つの配列間の違いを計算するために使用されます。 2つの配列のキー名とキー値を比較します。配列のキー名またはキー値が変更された場合、関数はこれらの違いを返します。この機能により、array_diff_assoc()は、ユーザーがフォーム検証でデータを変更しているかどうかを判断するための理想的な選択肢となります。
array_diff_assoc(array $array1, array $array2)
array1 :最初の配列。
Array2 :2番目の配列は、最初の配列と比較するために使用されます。
この関数は、異なるキー名と値を持つ要素が返される違いを含む配列を返します。
ユーザー編集フォームがあり、元のデータがデータベースに保存されているとします。ユーザーがフォームを送信すると、ユーザーが元のデータを変更したことを確認します。これを行うには、ユーザーが提出したフォームデータを元のデータと比較できます。違いが見つかった場合、それはユーザーがデータを変更したことを意味します。
<?php
// 生データ(データベースから取得されていると仮定します)
$original_data = [
'username' => 'john_doe',
'email' => 'john@example.com',
'age' => 30
];
// ユーザーがサビされたフォームデータ
$form_data = [
'username' => 'john_doe', // 変更されていないと仮定します
'email' => 'john_new@example.com', // ユーザーはメールアドレスを変更しました
'age' => 30
];
// 使用 array_diff_assoc() データを比較します
$diff = array_diff_assoc($original_data, $form_data);
if (empty($diff)) {
echo "用户未修改生データ。";
} else {
echo "ユーザーはデータを変更しました: ";
print_r($diff);
}
?>
ユーザーはデータを変更しました:
Array
(
[email] => john_new@example.com
)
この例では、元のデータが$ original_dataアレイに保存されていると想定し、 $ form_dataアレイにはユーザーが送信したフォームデータが含まれています。 array_diff_assoc()関数を呼び出すことにより、電子メールフィールドの違いを検出し、ユーザーがメールボックスを変更したことを示します。
精度: array_diff_assoc()キー名を比較するだけでなく、キー値も比較します。したがって、キー名またはキー値が変更された場合にのみ、差を返します。
シンプルさ:この関数は、アレイを手動で通過することなく、配列間の違いを直感的に見つけることができます。
セキュリティ:このようにして、ユーザーがフォームの隠されたフィールドを改ざんしたり、元のデータを直接変更したりするのを防ぐことができます。
パスワードの変更フォーム:ユーザーがパスワードを変更すると、元のパスワードを提出されたパスワードと比較して、ユーザーがパスワード以外のコンテンツを変更していないことを確認できます。
アカウント情報の変更:たとえば、電子メールアドレス、ユーザー名などを変更すると、ユーザーが変更したい部品のみを変更したかどうかを判断し、不必要な変更を避けることができます。
データ監査:ユーザー操作の記録を必要とする一部のシステムでは、ユーザーが変更したデータをarray_diff_assoc()を介して記録して、後続の監査を容易にすることができます。
array_diff_assoc()関数を介して、開発者はユーザーがフォームでデータを変更したかどうかを簡単に判断できます。フォーム検証での適用は、システムのセキュリティを効果的に増加させ、データの改ざんやその他の潜在的なセキュリティリスクを回避できます。機密データを使用している場合は、この方法を使用してデータの整合性を確保することをお勧めします。