$id]; $encryptedFields = [ "phone", "sosPhone", "birthdate", "site", "gender", "first_name", "last_name", "education", "employmentType", "maritalStatus" ]; // أي تعديل على حقل مفهرس يجب أن يُحدّث فهرسه في نفس العبارة، وإلا بقي // الفهرس يشير إلى القيمة القديمة وأصبح البحث يعطي نتيجة خاطئة. global $blindIndex; $plain = []; foreach ($encryptedFields as $field) { if (isset($_POST[$field]) && !empty($_POST[$field])) { $value = filterRequest($field); $plain[$field] = $value; $encryptedValue = $encryptionHelper->encryptData($value); $fields[] = "`$field` = :$field"; $params[":$field"] = $encryptedValue; } } if ($blindIndex) { if (isset($plain['phone'])) { $fields[] = "`phone_bidx` = :phone_bidx"; $params[':phone_bidx'] = $blindIndex->index('passengers.phone', $plain['phone']); } if (isset($plain['first_name']) || isset($plain['last_name'])) { // الاسم مركّب من عمودين: نقرأ الجزء غير المُعدَّل من السجل الحالي $current = $con->prepare("SELECT first_name, last_name FROM passengers WHERE id = :id"); $current->execute([':id' => $id]); $row = $current->fetch(PDO::FETCH_ASSOC) ?: []; $first = $plain['first_name'] ?? $encryptionHelper->decryptData($row['first_name'] ?? null) ?: ''; $last = $plain['last_name'] ?? $encryptionHelper->decryptData($row['last_name'] ?? null) ?: ''; $fields[] = "`name_bidx` = :name_bidx"; $params[':name_bidx'] = $blindIndex->index('passengers.name', trim("$first $last")); } } if (!empty($fields)) { $setClause = implode(", ", $fields); $sql = "UPDATE `passengers` SET $setClause WHERE `id` = :id"; $stmt = $con->prepare($sql); $stmt->execute($params); if ($stmt->rowCount() > 0) { jsonSuccess(null, "Passenger data updated successfully"); } else { jsonError("Failed to update passenger data"); } } else { jsonError("No fields to update"); } ?>