Update: 2026-07-09 04:13:14
This commit is contained in:
@@ -19,6 +19,37 @@ try {
|
||||
throw new Exception("Required fields are missing");
|
||||
}
|
||||
|
||||
// 🔥 التحقق من ملكية الرحلة: يجب أن تخص هذا الراكب وهذا السائق فعلاً،
|
||||
// وأن تكون منتهية، قبل قبول التقييم — يمنع تقييم رحلات عشوائية (IDOR).
|
||||
$stmtRide = $con->prepare("SELECT driver_id, passenger_id, status FROM ride WHERE id = ?");
|
||||
$stmtRide->execute([$ride_id]);
|
||||
$ride = $stmtRide->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!$ride) {
|
||||
jsonError("Ride not found");
|
||||
exit;
|
||||
}
|
||||
if ((string)$ride['passenger_id'] !== (string)$passenger_id) {
|
||||
jsonError("This ride does not belong to you");
|
||||
exit;
|
||||
}
|
||||
if ((string)$ride['driver_id'] !== (string)$driver_id) {
|
||||
jsonError("Driver does not match this ride");
|
||||
exit;
|
||||
}
|
||||
if ($ride['status'] !== 'Finished') {
|
||||
jsonError("Ride must be finished before rating");
|
||||
exit;
|
||||
}
|
||||
|
||||
// 🔥 منع تكرار التقييم لنفس الرحلة من نفس الراكب
|
||||
$stmtDup = $con->prepare("SELECT COUNT(*) FROM `ratingDriver` WHERE ride_id = ? AND passenger_id = ?");
|
||||
$stmtDup->execute([$ride_id, $passenger_id]);
|
||||
if ($stmtDup->fetchColumn() > 0) {
|
||||
jsonError("This ride has already been rated");
|
||||
exit;
|
||||
}
|
||||
|
||||
$sql = "INSERT INTO `ratingDriver`(
|
||||
`passenger_id`, `driver_id`, `ride_id`, `rating`, `comment`
|
||||
) VALUES (
|
||||
|
||||
Reference in New Issue
Block a user