0

レコードを編集/更新するときに、一意のエントリを検証しようとしています。データベースを検索して検証しています。エントリが見つからない場合は続行し、そうでない場合はエラー メッセージを出力します。エントリの場合 (新しいレコードを追加するときにこれと同じプロセスを使用しています)

私の検証コードは次のとおりです。

if (!empty($_POST['ip_add'])) {
    if (filter_var($_POST['ip_add'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
        $errors[] = $_POST['ip_add'] . ' is not a valid IPv4';
    } else {
        $ip = $_POST['ip_add'];
        //check if ip is unique
        $qip = 'select INET_NTOA(ip_add) AS ip_add from equipment where ip_add = INET_ATON(:ip)';
        $database->query($qip);

        $database->bind(':ip', $ip);
        $rs = $database->resultset();
        //execute our query
        $database->execute();
        if ($rs != null) {
            $errors[] = $_POST['ip_add'] . ' is not unique';
        } else {
            $ip_add = $_POST['ip_add'];
        }
    }
} else {
    $errors[] = "Please enter a valid IP address";
}

エラーがない場合は、データベースを更新します。

$query = "
  UPDATE equipment
  SET site_code = :site_code,
    site_id = :site_id,
    system_name = :system_name,
    ip_add = INET_ATON(:ip_add),
    mcast =  INET_ATON(:mcast),
    sys_loc = :sys_loc,
    systype = :systype,
    itamname = :itamname,
    dimetis = :dimetis,
    DNS = :DNS
  WHERE id = :id
";

//prepare query for excecution
$database->query($query);
//bind the parameters
$database->bind(':site_code', $site_code);
$database->bind(':site_id', $site_id);
$database->bind(':system_name', $system_name);
$database->bind(':ip_add', $ip_add);
$database->bind(':mcast', $multicast);
$database->bind(':sys_loc', $sys_loc);
$database->bind(':systype', $systype);
$database->bind(':itamname', $itamname);
$database->bind(':dimetis', $_POST['dimetis']);
$database->bind(':DNS', $_POST['DNS']);
$database->bind(':id', $_POST['id']);

// Execute the query
$database->execute();
echo "Record was updated.";
}
}

現在編集中の現在のレコードを除くすべてのレコードを検索できると考えていました。どうすればいいですか?レコードを編集するときに IP アドレスが一意かどうかを確認するためのより良い方法はありますか?

4

1 に答える 1

0

現在のレコードを検索から除外することで、これが機能するようになりました。

$qip = '
  SELECT
    INET_NTOA(ip_add) AS ip_add
  FROM equipment
  WHERE
    ip_add = INET_ATON(:ip)
    AND id != :id
';
$database->query($qip);

$database->bind(':ip', $ip);
$database->bind(':id', $id);
于 2013-09-05T07:06:56.883 に答える