Compare commits
13 Commits
a4b05540d2
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d2d660202 | |||
| 8cd1f3cfda | |||
| 2fd2f4806d | |||
| 108cf7586d | |||
| 17704a52a0 | |||
| 95b11f3496 | |||
| 3728701d77 | |||
| a6d2a0c17b | |||
| 1f94dcb709 | |||
| 5a71f98a9a | |||
| 996fee5ad2 | |||
| 0235886d60 | |||
| d54d7b37ea |
@@ -0,0 +1,53 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Add Fines</title>
|
||||||
|
<link rel="stylesheet" href="css/nav.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn active">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<form method="POST" id="addFineForm">
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="amount">Amount in £</label>
|
||||||
|
<input type="number" name="amount" id="amount" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="points">Points</label>
|
||||||
|
<input type="number" name="points" id="points" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl"><label for="incident">Incident</label>
|
||||||
|
<div class="selectDiv">
|
||||||
|
<select id="incident" name="incident" required>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Add Fines" class="btn btnPrimary" style="margin-top: 1em;">
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/addFine.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]) && isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$amount = $_POST["amount"];
|
||||||
|
$points = $_POST["points"];
|
||||||
|
$incident = $_POST["incident"];
|
||||||
|
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Fines (Fine_amount, Fine_points, Incident_ID) VALUES (:amount, :points, :incident)");
|
||||||
|
$stmt->bindParam(":amount", $amount);
|
||||||
|
$stmt->bindParam(":points", $points);
|
||||||
|
$stmt->bindParam(":incident", $incident);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Added a fine', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
$logStmt->execute();
|
||||||
|
|
||||||
|
echo json_encode(array("message" => "ok"));
|
||||||
|
}
|
||||||
|
else if (isset($_SESSION["username"]) && !isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "not logged in as admin"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Add New Vehicle</title>
|
||||||
|
<link rel="stylesheet" href="css/newVehicle.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn active">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<form action="" id="vehicleForm">
|
||||||
|
<div class="formGroup">
|
||||||
|
<div class="formSpace">
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="type">Type</label>
|
||||||
|
<input type="text" name="type" id="type" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="colour">Colour</label>
|
||||||
|
<input type="text" name="colour" id="colour" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="plateNum">Plate Number</label>
|
||||||
|
<input type="text" name="plateNum" id="plateNum" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="owner">Owner</label>
|
||||||
|
<div class="selectDiv">
|
||||||
|
<select name="owner" id="owner" required>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Add new vehicle" class="btn btnPrimary">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formSpace" id="addOwner">
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="name">Name</label>
|
||||||
|
<input type="text" name="name" id="name" >
|
||||||
|
</div>
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="address">Address</label>
|
||||||
|
<input type="text" name="address" id="address">
|
||||||
|
</div>
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="licence">Licence number</label>
|
||||||
|
<input type="text" name="licence" id="licence" maxlength="16" max="16">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/newVehicle.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Vehicle (Vehicle_type, Vehicle_colour, Vehicle_licence) VALUES (:type, :colour, :plateNum)");
|
||||||
|
$stmt->bindParam(":type", $_POST["type"]);
|
||||||
|
$stmt->bindParam(":colour", $_POST["colour"]);
|
||||||
|
$stmt->bindParam(":plateNum", $_POST["plateNum"]);
|
||||||
|
$stmt->execute();
|
||||||
|
$vehicleID = $conn->lastInsertId();
|
||||||
|
if (isset($_POST["name"]) && isset($_POST["address"]) && isset($_POST["licence"]))
|
||||||
|
{
|
||||||
|
$stmtPeople = $conn->prepare("INSERT INTO People (People_name, People_address, People_licence) VALUES (:name, :address, :licence)");
|
||||||
|
$stmtPeople->bindParam(":name", $_POST["name"]);
|
||||||
|
$stmtPeople->bindParam(":address", $_POST["address"]);
|
||||||
|
$stmtPeople->bindParam(":licence", $_POST["licence"]);
|
||||||
|
$stmtPeople->execute();
|
||||||
|
$peopleID = $conn->lastInsertId();
|
||||||
|
|
||||||
|
$stmtOwner = $conn->prepare("INSERT INTO Ownership (Vehicle_ID, People_ID) VALUES (:vehicleID, :peopleID)");
|
||||||
|
$stmtOwner->bindParam(":vehicleID", $vehicleID);
|
||||||
|
$stmtOwner->bindParam(":peopleID", $peopleID);
|
||||||
|
$stmtOwner->execute();
|
||||||
|
echo json_encode(array("message" => "Vehicle and new owner added successfully"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Ownership (Vehicle_ID, People_ID) VALUES (:vehicleID, :peopleID)");
|
||||||
|
$stmt->bindParam(":vehicleID", $vehicleID);
|
||||||
|
$stmt->bindParam(":peopleID", $_POST["peopleID"]);
|
||||||
|
$stmt->execute();
|
||||||
|
echo json_encode(array("message" => "Vehicle added successfully and assigned to existing owner"));
|
||||||
|
}
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Add vehicle', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
$logStmt->execute();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in"));
|
||||||
|
}
|
||||||
+35
@@ -3,8 +3,43 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Change Password</title>
|
<title>Change Password</title>
|
||||||
|
<link rel="stylesheet" href="css/nav.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn active">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<form method="POST" id="changePass">
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="pass">Password</label>
|
||||||
|
<input type="password" name="pass" id="pass">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="rePass">Retype Password</label>
|
||||||
|
<input type="password" name="rePass" id="rePass">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Change Password" class="btn btnPrimary">
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/changePassword.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$pass = $_POST["password"];
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("UPDATE Users SET Users_password = :pass WHERE Users_username = :username");
|
||||||
|
$stmt->bindParam(":pass", $pass);
|
||||||
|
$stmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
if ($stmt->execute())
|
||||||
|
{
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Change password', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
echo json_encode(array("message" => "ok"));
|
||||||
|
$logStmt->execute();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Error updating password"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in"));
|
||||||
|
}
|
||||||
-169
@@ -1,169 +0,0 @@
|
|||||||
/* Database for use with DIS-COMP4039 Coursework 2
|
|
||||||
*
|
|
||||||
* Please note you do not have to use this. If you find
|
|
||||||
* it easier to use a database of your own design then
|
|
||||||
* you are free to do so.
|
|
||||||
*
|
|
||||||
* If you do use this database, use it as a starting point only.
|
|
||||||
* You will not be able to complete the coursework without
|
|
||||||
* modifying it to some extent.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS Fines;
|
|
||||||
CREATE TABLE Fines (
|
|
||||||
Fine_ID int(11) NOT NULL,
|
|
||||||
Fine_Amount int(11) NOT NULL,
|
|
||||||
Fine_Points int(11) NOT NULL,
|
|
||||||
Incident_ID int(11) NOT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO Fines (Fine_ID, Fine_Amount, Fine_Points, Incident_ID) VALUES
|
|
||||||
(1, 2000, 6, 3),
|
|
||||||
(2, 50, 0, 2),
|
|
||||||
(3, 500, 3, 4);
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS Incident;
|
|
||||||
CREATE TABLE Incident (
|
|
||||||
Incident_ID int(11) NOT NULL,
|
|
||||||
Vehicle_ID int(11) DEFAULT NULL,
|
|
||||||
People_ID int(11) DEFAULT NULL,
|
|
||||||
Incident_Date date NOT NULL,
|
|
||||||
Incident_Report varchar(500) NOT NULL,
|
|
||||||
Offence_ID int(11) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO Incident (Incident_ID, Vehicle_ID, People_ID, Incident_Date, Incident_Report, Offence_ID) VALUES
|
|
||||||
(1, 15, 4, '2017-12-01', '40mph in a 30 limit', 1),
|
|
||||||
(2, 20, 8, '2017-11-01', 'Double parked', 4),
|
|
||||||
(3, 13, 4, '2017-09-17', '110mph on motorway', 1),
|
|
||||||
(4, 14, 2, '2017-08-22', 'Failure to stop at a red light - travelling 25mph', 8),
|
|
||||||
(5, 13, 4, '2017-10-17', 'Not wearing a seatbelt on the M1', 3);
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS Offence;
|
|
||||||
CREATE TABLE Offence (
|
|
||||||
Offence_ID int(11) NOT NULL,
|
|
||||||
Offence_description varchar(50) NOT NULL,
|
|
||||||
Offence_maxFine int(11) NOT NULL,
|
|
||||||
Offence_maxPoints int(11) NOT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO Offence (Offence_ID, Offence_description, Offence_maxFine, Offence_maxPoints) VALUES
|
|
||||||
(1, 'Speeding', 1000, 3),
|
|
||||||
(2, 'Speeding on a motorway', 2500, 6),
|
|
||||||
(3, 'Seat belt offence', 500, 0),
|
|
||||||
(4, 'Illegal parking', 500, 0),
|
|
||||||
(5, 'Drink driving', 10000, 11),
|
|
||||||
(6, 'Driving without a licence', 10000, 0),
|
|
||||||
(7, 'Driving without a licence', 10000, 0),
|
|
||||||
(8, 'Traffic light offences', 1000, 3),
|
|
||||||
(9, 'Cycling on pavement', 500, 0),
|
|
||||||
(10, 'Failure to have control of vehicle', 1000, 3),
|
|
||||||
(11, 'Dangerous driving', 1000, 11),
|
|
||||||
(12, 'Careless driving', 5000, 6),
|
|
||||||
(13, 'Dangerous cycling', 2500, 0);
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS Ownership;
|
|
||||||
CREATE TABLE Ownership (
|
|
||||||
People_ID int(11) NOT NULL,
|
|
||||||
Vehicle_ID int(11) NOT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO Ownership (People_ID, Vehicle_ID) VALUES
|
|
||||||
(3, 12),
|
|
||||||
(8, 20),
|
|
||||||
(4, 15),
|
|
||||||
(4, 13),
|
|
||||||
(1, 16),
|
|
||||||
(2, 14),
|
|
||||||
(5, 17),
|
|
||||||
(6, 18),
|
|
||||||
(7, 21);
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS People;
|
|
||||||
CREATE TABLE People (
|
|
||||||
People_ID int(11) NOT NULL,
|
|
||||||
People_name varchar(50) NOT NULL,
|
|
||||||
People_address varchar(50) DEFAULT NULL,
|
|
||||||
People_licence varchar(16) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO People (People_ID, People_name, People_address, People_licence) VALUES
|
|
||||||
(1, 'James Smith', '23 Barnsdale Road, Leicester', 'SMITH92LDOFJJ829'),
|
|
||||||
(2, 'Jennifer Allen', '46 Bramcote Drive, Nottingham', 'ALLEN88K23KLR9B3'),
|
|
||||||
(3, 'John Myers', '323 Derby Road, Nottingham', 'MYERS99JDW8REWL3'),
|
|
||||||
(4, 'James Smith', '26 Devonshire Avenue, Nottingham', 'SMITHR004JFS20TR'),
|
|
||||||
(5, 'Terry Brown', '7 Clarke Rd, Nottingham', 'BROWND3PJJ39DLFG'),
|
|
||||||
(6, 'Mary Adams', '38 Thurman St, Nottingham', 'ADAMSH9O3JRHH107'),
|
|
||||||
(7, 'Neil Becker', '6 Fairfax Close, Nottingham', 'BECKE88UPR840F9R'),
|
|
||||||
(8, 'Angela Smith', '30 Avenue Road, Grantham', 'SMITH222LE9FJ5DS'),
|
|
||||||
(9, 'Xene Medora', '22 House Drive, West Bridgford', 'MEDORH914ANBB223');
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS Vehicle;
|
|
||||||
CREATE TABLE Vehicle (
|
|
||||||
Vehicle_ID int(11) NOT NULL,
|
|
||||||
Vehicle_type varchar(20) NOT NULL,
|
|
||||||
Vehicle_colour varchar(20) NOT NULL,
|
|
||||||
Vehicle_licence varchar(7) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
||||||
|
|
||||||
INSERT INTO Vehicle (Vehicle_ID, Vehicle_type, Vehicle_colour, Vehicle_licence) VALUES
|
|
||||||
(12, 'Ford Fiesta', 'Blue', 'LB15AJL'),
|
|
||||||
(13, 'Ferrari 458', 'Red', 'MY64PRE'),
|
|
||||||
(14, 'Vauxhall Astra', 'Silver', 'FD65WPQ'),
|
|
||||||
(15, 'Honda Civic', 'Green', 'FJ17AUG'),
|
|
||||||
(16, 'Toyota Prius', 'Silver', 'FP16KKE'),
|
|
||||||
(17, 'Ford Mondeo', 'Black', 'FP66KLM'),
|
|
||||||
(18, 'Ford Focus', 'White', 'DJ14SLE'),
|
|
||||||
(20, 'Nissan Pulsar', 'Red', 'NY64KWD'),
|
|
||||||
(21, 'Renault Scenic', 'Silver', 'BC16OEA'),
|
|
||||||
(22, 'Hyundai i30', 'Grey', 'AD223NG');
|
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE Fines
|
|
||||||
ADD PRIMARY KEY (Fine_ID),
|
|
||||||
ADD KEY Incident_ID (Incident_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Incident
|
|
||||||
ADD PRIMARY KEY (Incident_ID),
|
|
||||||
ADD KEY fk_incident_vehicle (Vehicle_ID),
|
|
||||||
ADD KEY fk_incident_people (People_ID),
|
|
||||||
ADD KEY fk_incident_offence (Offence_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Offence
|
|
||||||
ADD PRIMARY KEY (Offence_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Ownership
|
|
||||||
ADD KEY fk_people (People_ID),
|
|
||||||
ADD KEY fk_vehicle (Vehicle_ID);
|
|
||||||
|
|
||||||
ALTER TABLE People
|
|
||||||
ADD PRIMARY KEY (People_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Vehicle
|
|
||||||
ADD PRIMARY KEY (Vehicle_ID);
|
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE Fines
|
|
||||||
MODIFY Fine_ID int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
|
|
||||||
ALTER TABLE Incident
|
|
||||||
MODIFY Incident_ID int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
|
|
||||||
ALTER TABLE Offence
|
|
||||||
MODIFY Offence_ID int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14;
|
|
||||||
ALTER TABLE People
|
|
||||||
MODIFY People_ID int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;
|
|
||||||
ALTER TABLE Vehicle
|
|
||||||
MODIFY Vehicle_ID int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=24;
|
|
||||||
|
|
||||||
ALTER TABLE Fines
|
|
||||||
ADD CONSTRAINT fk_fines FOREIGN KEY (Incident_ID) REFERENCES Incident (Incident_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Incident
|
|
||||||
ADD CONSTRAINT fk_incident_offence FOREIGN KEY (Offence_ID) REFERENCES Offence (Offence_ID),
|
|
||||||
ADD CONSTRAINT fk_incident_people FOREIGN KEY (People_ID) REFERENCES People (People_ID),
|
|
||||||
ADD CONSTRAINT fk_incident_vehicle FOREIGN KEY (Vehicle_ID) REFERENCES Vehicle (Vehicle_ID);
|
|
||||||
|
|
||||||
ALTER TABLE Ownership
|
|
||||||
ADD CONSTRAINT fk_person FOREIGN KEY (People_ID) REFERENCES People (People_ID),
|
|
||||||
ADD CONSTRAINT fk_vehicle FOREIGN KEY (Vehicle_ID) REFERENCES Vehicle (Vehicle_ID);
|
|
||||||
|
|
||||||
@@ -24,6 +24,7 @@ div.login {
|
|||||||
}
|
}
|
||||||
|
|
||||||
form.loginForm {
|
form.loginForm {
|
||||||
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ nav ul li a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
nav ul li a.active, nav ul li a:hover {
|
nav ul li a.active, nav ul li a:hover {
|
||||||
padding: 1.4em 1.75em;
|
padding: 1.5em 1.75em;
|
||||||
-webkit-border-radius: 0;
|
-webkit-border-radius: 0;
|
||||||
-moz-border-radius: 0;
|
-moz-border-radius: 0;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
@@ -37,3 +37,7 @@ nav ul li a:hover {
|
|||||||
nav ul li a.active {
|
nav ul li a.active {
|
||||||
background-color: var(--hover);
|
background-color: var(--hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nav ul li.admin {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
@import "nav.css";
|
||||||
|
|
||||||
|
main .formGroup {
|
||||||
|
width: 30%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
main form {
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
main form .formControl .selectDiv {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formSpace {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 1em;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#addOwner {
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-moz-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-ms-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-o-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
#addOwner.shown {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-moz-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-ms-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-o-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
@import "nav.css";
|
||||||
|
|
||||||
|
main .formGroup {
|
||||||
|
width: 40%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
main form {
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
main form .formControl .selectDiv {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formSpace {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 1em;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#addOwner, #addVehicle {
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-moz-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-ms-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
-o-transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
transition: visibility 0s linear 300ms, opacity 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
#addOwner.shown, #addVehicle.shown {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-moz-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-ms-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
-o-transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
transition: visibility 0s linear 0s, opacity 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
margin-top: 3em;
|
||||||
|
}
|
||||||
@@ -1,13 +1,5 @@
|
|||||||
@import "nav.css";
|
@import "nav.css";
|
||||||
|
|
||||||
main {
|
|
||||||
padding-top: 2.5em;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.searchContainer {
|
div.searchContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -18,11 +10,8 @@ div.searchContainer {
|
|||||||
|
|
||||||
main form {
|
main form {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main#search form input:not([type="submit"]) {
|
main#search form input:not([type="submit"]) {
|
||||||
@@ -58,73 +47,6 @@ main#search div.searchBtnContainer:hover button {
|
|||||||
background-color: var(--hover);
|
background-color: var(--hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
.selectDiv {
|
|
||||||
position: relative;
|
|
||||||
min-width: 300px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selectDiv:before {
|
|
||||||
content: '';
|
|
||||||
-webkit-transform: rotate(90deg);
|
|
||||||
-moz-transform: rotate(90deg);
|
|
||||||
-ms-transform: rotate(90deg);
|
|
||||||
transform: rotate(90deg);
|
|
||||||
right: -5px;
|
|
||||||
top: 13px;
|
|
||||||
padding: 0 0 2px;
|
|
||||||
position: absolute;
|
|
||||||
width: 46px;
|
|
||||||
background-color: var(--primary);
|
|
||||||
height: 30px;
|
|
||||||
border-top-right-radius: 0.5em;
|
|
||||||
border-top-left-radius: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selectDiv:after {
|
|
||||||
content: '<>';
|
|
||||||
font: 18px "Consolas", monospace;
|
|
||||||
color: #FFFFFF;
|
|
||||||
-webkit-transform: rotate(90deg);
|
|
||||||
-moz-transform: rotate(90deg);
|
|
||||||
-ms-transform: rotate(90deg);
|
|
||||||
transform: rotate(90deg);
|
|
||||||
right: 6px;
|
|
||||||
top: 18px;
|
|
||||||
padding: 0 0 2px;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selectDiv select {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
-moz-appearance: none;
|
|
||||||
appearance: none;
|
|
||||||
cursor: pointer;
|
|
||||||
display: block;
|
|
||||||
outline: none;
|
|
||||||
width: 100%;
|
|
||||||
max-width: 30em;
|
|
||||||
height: 3em;
|
|
||||||
float: right;
|
|
||||||
margin: 6px 0;
|
|
||||||
padding: 0 24px;
|
|
||||||
background-color: #ffffff;
|
|
||||||
background-image: none;
|
|
||||||
border: 4px solid var(--primary);
|
|
||||||
-webkit-border-radius: 0.5em;
|
|
||||||
-moz-border-radius: 0.5em;
|
|
||||||
border-radius: 0.5em;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selectDiv:hover select, .selectDiv select:hover {
|
|
||||||
border: 4px solid var(--hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
.selectDiv:hover:before {
|
|
||||||
background-color: var(--hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
margin-top: 3em;
|
margin-top: 3em;
|
||||||
}
|
}
|
||||||
+151
-2
@@ -7,7 +7,7 @@
|
|||||||
--secondary: hsl(210, 100%, 95%, 1);
|
--secondary: hsl(210, 100%, 95%, 1);
|
||||||
--accent: hsla(15, 99%, 57%, 1);
|
--accent: hsla(15, 99%, 57%, 1);
|
||||||
--light: hsla(90, 8%, 85%, 1);
|
--light: hsla(90, 8%, 85%, 1);
|
||||||
--mutedBlack: hsla(0, 0%, 0%, 0.25)
|
--mutedBlack: hsla(0, 0%, 0%, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
@@ -46,7 +46,7 @@ h1, h2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btnPrimary:hover {
|
.btnPrimary:hover {
|
||||||
background-color: var(--primary);
|
background-color: var(--hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.formControl {
|
div.formControl {
|
||||||
@@ -74,6 +74,133 @@ input:not([type="submit"]):hover, form .formControl textarea:hover {
|
|||||||
border: 4px solid var(--hover);
|
border: 4px solid var(--hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.checkContainer {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 0.75em;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer input[type="checkbox"] {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkmark {
|
||||||
|
position: absolute;
|
||||||
|
top: 1.25em;
|
||||||
|
left: 0;
|
||||||
|
height: 1.5em;
|
||||||
|
width: 1.5em;
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer:hover input ~ .checkmark {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer input:checked ~ .checkmark {
|
||||||
|
background-color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer:hover input:checked ~ .checkmark {
|
||||||
|
background-color: var(--hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkmark:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer input:checked ~ .checkmark:after {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkContainer .checkmark:after {
|
||||||
|
left: 9px;
|
||||||
|
top: 5px;
|
||||||
|
width: 0.35em;
|
||||||
|
height: 0.6em;
|
||||||
|
border: solid white;
|
||||||
|
border-width: 0 3px 3px 0;
|
||||||
|
-webkit-transform: rotate(45deg);
|
||||||
|
-ms-transform: rotate(45deg);
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv {
|
||||||
|
position: relative;
|
||||||
|
min-width: 300px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv:before {
|
||||||
|
content: '';
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
-moz-transform: rotate(90deg);
|
||||||
|
-ms-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg);
|
||||||
|
right: -5px;
|
||||||
|
top: 13px;
|
||||||
|
padding: 0 0 2px;
|
||||||
|
position: absolute;
|
||||||
|
width: 46px;
|
||||||
|
background-color: var(--primary);
|
||||||
|
height: 30px;
|
||||||
|
border-top-right-radius: 0.5em;
|
||||||
|
border-top-left-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv:after {
|
||||||
|
content: '<>';
|
||||||
|
font: 18px "Consolas", monospace;
|
||||||
|
color: #FFFFFF;
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
-moz-transform: rotate(90deg);
|
||||||
|
-ms-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg);
|
||||||
|
right: 6px;
|
||||||
|
top: 18px;
|
||||||
|
padding: 0 0 2px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv select {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
outline: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 3em;
|
||||||
|
margin: 6px 0;
|
||||||
|
padding: 0 24px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
border: 4px solid var(--primary);
|
||||||
|
-webkit-border-radius: 0.5em;
|
||||||
|
-moz-border-radius: 0.5em;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
word-break: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv:hover select, .selectDiv select:hover {
|
||||||
|
border: 4px solid var(--hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectDiv:hover:before {
|
||||||
|
background-color: var(--hover);
|
||||||
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
@@ -98,3 +225,25 @@ table th {
|
|||||||
background-color: var(--primary);
|
background-color: var(--primary);
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding-top: 2.5em;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
main form {
|
||||||
|
width: 15%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
main #title {
|
||||||
|
align-self: flex-start;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,304 @@
|
|||||||
|
-- MariaDB dump 10.19 Distrib 10.9.4-MariaDB, for Linux (x86_64)
|
||||||
|
--
|
||||||
|
-- Host: mysql.cs.nott.ac.uk Database: psxrp11_dbcw
|
||||||
|
-- ------------------------------------------------------
|
||||||
|
-- Server version 5.5.60-MariaDB
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Fines`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Fines`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Fines` (
|
||||||
|
`Fine_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Fine_Amount` int(11) NOT NULL,
|
||||||
|
`Fine_Points` int(11) NOT NULL,
|
||||||
|
`Incident_ID` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`Fine_ID`),
|
||||||
|
KEY `Incident_ID` (`Incident_ID`),
|
||||||
|
CONSTRAINT `fk_fines` FOREIGN KEY (`Incident_ID`) REFERENCES `Incident` (`Incident_ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Fines`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Fines` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Fines` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Fines` (`Fine_ID`, `Fine_Amount`, `Fine_Points`, `Incident_ID`) VALUES (1,2000,6,3),
|
||||||
|
(2,50,0,2),
|
||||||
|
(3,500,3,4),
|
||||||
|
(5,50,2,3);
|
||||||
|
/*!40000 ALTER TABLE `Fines` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Incident`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Incident`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Incident` (
|
||||||
|
`Incident_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Vehicle_ID` int(11) DEFAULT NULL,
|
||||||
|
`People_ID` int(11) DEFAULT NULL,
|
||||||
|
`Incident_Date` date NOT NULL,
|
||||||
|
`Incident_Report` varchar(500) NOT NULL,
|
||||||
|
`Offence_ID` int(11) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`Incident_ID`),
|
||||||
|
KEY `fk_incident_vehicle` (`Vehicle_ID`),
|
||||||
|
KEY `fk_incident_people` (`People_ID`),
|
||||||
|
KEY `fk_incident_offence` (`Offence_ID`),
|
||||||
|
CONSTRAINT `fk_incident_offence` FOREIGN KEY (`Offence_ID`) REFERENCES `Offence` (`Offence_ID`),
|
||||||
|
CONSTRAINT `fk_incident_people` FOREIGN KEY (`People_ID`) REFERENCES `People` (`People_ID`),
|
||||||
|
CONSTRAINT `fk_incident_vehicle` FOREIGN KEY (`Vehicle_ID`) REFERENCES `Vehicle` (`Vehicle_ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Incident`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Incident` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Incident` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Incident` (`Incident_ID`, `Vehicle_ID`, `People_ID`, `Incident_Date`, `Incident_Report`, `Offence_ID`) VALUES (1,12,4,'2017-12-01','40mph in a 30 limit',1),
|
||||||
|
(2,20,8,'2017-11-01','Double parked',4),
|
||||||
|
(3,13,4,'2017-09-17','110mph on motorway',1),
|
||||||
|
(4,14,2,'2017-08-22','Failure to stop at a red light - travelling 25mph',8),
|
||||||
|
(5,13,4,'2017-10-17','Not wearing a seatbelt on the M1',3);
|
||||||
|
/*!40000 ALTER TABLE `Incident` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Logs`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Logs`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Logs` (
|
||||||
|
`Logs_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Logs_type` varchar(100) DEFAULT NULL,
|
||||||
|
`Users_username` varchar(100) DEFAULT NULL,
|
||||||
|
`Logs_date` datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`Logs_ID`),
|
||||||
|
KEY `fk_logs_users` (`Users_username`),
|
||||||
|
CONSTRAINT `fk_logs_users` FOREIGN KEY (`Users_username`) REFERENCES `Users` (`Users_username`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Logs`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Logs` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Logs` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Logs` (`Logs_ID`, `Logs_type`, `Users_username`, `Logs_date`) VALUES (9,'Add Report','daniels','2022-12-16 13:14:34'),
|
||||||
|
(10,'Add Report','daniels','2022-12-16 13:15:33'),
|
||||||
|
(11,'Add Report','daniels','2022-12-16 13:19:58');
|
||||||
|
/*!40000 ALTER TABLE `Logs` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Offence`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Offence`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Offence` (
|
||||||
|
`Offence_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Offence_description` varchar(50) NOT NULL,
|
||||||
|
`Offence_maxFine` int(11) NOT NULL,
|
||||||
|
`Offence_maxPoints` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`Offence_ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Offence`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Offence` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Offence` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Offence` (`Offence_ID`, `Offence_description`, `Offence_maxFine`, `Offence_maxPoints`) VALUES (1,'Speeding',1000,3),
|
||||||
|
(2,'Speeding on a motorway',2500,6),
|
||||||
|
(3,'Seat belt offence',500,0),
|
||||||
|
(4,'Illegal parking',500,0),
|
||||||
|
(5,'Drink driving',10000,11),
|
||||||
|
(6,'Driving without a licence',10000,0),
|
||||||
|
(7,'Driving without a licence',10000,0),
|
||||||
|
(8,'Traffic light offences',1000,3),
|
||||||
|
(9,'Cycling on pavement',500,0),
|
||||||
|
(10,'Failure to have control of vehicle',1000,3),
|
||||||
|
(11,'Dangerous driving',1000,11),
|
||||||
|
(12,'Careless driving',5000,6),
|
||||||
|
(13,'Dangerous cycling',2500,0);
|
||||||
|
/*!40000 ALTER TABLE `Offence` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Ownership`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Ownership`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Ownership` (
|
||||||
|
`People_ID` int(11) NOT NULL,
|
||||||
|
`Vehicle_ID` int(11) NOT NULL,
|
||||||
|
KEY `fk_people` (`People_ID`),
|
||||||
|
KEY `fk_vehicle` (`Vehicle_ID`),
|
||||||
|
CONSTRAINT `fk_person` FOREIGN KEY (`People_ID`) REFERENCES `People` (`People_ID`),
|
||||||
|
CONSTRAINT `fk_vehicle` FOREIGN KEY (`Vehicle_ID`) REFERENCES `Vehicle` (`Vehicle_ID`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Ownership`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Ownership` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Ownership` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Ownership` (`People_ID`, `Vehicle_ID`) VALUES (3,12),
|
||||||
|
(8,20),
|
||||||
|
(4,15),
|
||||||
|
(4,13),
|
||||||
|
(1,16),
|
||||||
|
(2,14),
|
||||||
|
(5,17),
|
||||||
|
(6,18),
|
||||||
|
(7,21),
|
||||||
|
(1,27),
|
||||||
|
(1,32),
|
||||||
|
(1,12),
|
||||||
|
(1,12),
|
||||||
|
(1,12);
|
||||||
|
/*!40000 ALTER TABLE `Ownership` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `People`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `People`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `People` (
|
||||||
|
`People_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`People_name` varchar(50) NOT NULL,
|
||||||
|
`People_address` varchar(50) DEFAULT NULL,
|
||||||
|
`People_licence` varchar(16) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`People_ID`),
|
||||||
|
UNIQUE KEY `People_pk` (`People_licence`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `People`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `People` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `People` DISABLE KEYS */;
|
||||||
|
INSERT INTO `People` (`People_ID`, `People_name`, `People_address`, `People_licence`) VALUES (1,'James Smith','23 Barnsdale Road, Leicester','SMITH92LDOFJJ829'),
|
||||||
|
(2,'Jennifer Allen','46 Bramcote Drive, Nottingham','ALLEN88K23KLR9B3'),
|
||||||
|
(3,'John Myers','323 Derby Road, Nottingham','MYERS99JDW8REWL3'),
|
||||||
|
(4,'James Smith','26 Devonshire Avenue, Nottingham','SMITHR004JFS20TR'),
|
||||||
|
(5,'Terry Brown','7 Clarke Rd, Nottingham','BROWND3PJJ39DLFG'),
|
||||||
|
(6,'Mary Adams','38 Thurman St, Nottingham','ADAMSH9O3JRHH107'),
|
||||||
|
(7,'Neil Becker','6 Fairfax Close, Nottingham','BECKE88UPR840F9R'),
|
||||||
|
(8,'Angela Smith','30 Avenue Road, Grantham','SMITH222LE9FJ5DS'),
|
||||||
|
(9,'Xene Medora','22 House Drive, West Bridgford','MEDORH914ANBB223'),
|
||||||
|
(17,'Rohit Pai','123, midleton road, London','PAI99909048RA9YX');
|
||||||
|
/*!40000 ALTER TABLE `People` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Users`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Users`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Users` (
|
||||||
|
`Users_username` varchar(100) NOT NULL,
|
||||||
|
`Users_password` varchar(100) DEFAULT NULL,
|
||||||
|
`Users_admin` tinyint(4) DEFAULT '0',
|
||||||
|
PRIMARY KEY (`Users_username`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Users`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Users` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Users` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Users` (`Users_username`, `Users_password`, `Users_admin`) VALUES ('daniels','copper99',1),
|
||||||
|
('mcnulty','plod123',0),
|
||||||
|
('moreland','fuzz42',0);
|
||||||
|
/*!40000 ALTER TABLE `Users` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `Vehicle`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `Vehicle`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `Vehicle` (
|
||||||
|
`Vehicle_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Vehicle_type` varchar(20) NOT NULL,
|
||||||
|
`Vehicle_colour` varchar(20) NOT NULL,
|
||||||
|
`Vehicle_licence` varchar(7) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`Vehicle_ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `Vehicle`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `Vehicle` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `Vehicle` DISABLE KEYS */;
|
||||||
|
INSERT INTO `Vehicle` (`Vehicle_ID`, `Vehicle_type`, `Vehicle_colour`, `Vehicle_licence`) VALUES (12,'Ford Fiesta','Blue','LB15AJL'),
|
||||||
|
(13,'Ferrari 458','Red','MY64PRE'),
|
||||||
|
(14,'Vauxhall Astra','Silver','FD65WPQ'),
|
||||||
|
(15,'Honda Civic','Green','FJ17AUG'),
|
||||||
|
(16,'Toyota Prius','Silver','FP16KKE'),
|
||||||
|
(17,'Ford Mondeo','Black','FP66KLM'),
|
||||||
|
(18,'Ford Focus','White','DJ14SLE'),
|
||||||
|
(20,'Nissan Pulsar','Red','NY64KWD'),
|
||||||
|
(21,'Renault Scenic','Silver','BC16OEA'),
|
||||||
|
(22,'Hyundai i30','Grey','AD223NG'),
|
||||||
|
(27,'sdfsdf','sdff','3545fgg'),
|
||||||
|
(32,'Ford Focus','Red','EA22HNT');
|
||||||
|
/*!40000 ALTER TABLE `Vehicle` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
-- Dump completed on 2022-12-16 13:25:56
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]) && isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT * FROM Incident");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "incidents" => $result));
|
||||||
|
}
|
||||||
|
else if (isset($_SESSION["username"]) && !isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "not logged in as admin"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT Offence_ID, Offence_description, Offence_maxFine FROM Offence");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "offences" => $result));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT People_ID, People_name, People_licence FROM People");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "owners" => $result));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT Vehicle_type, People_name, Incident_Date, Incident_Report, Offence_description FROM Incident INNER JOIN People P on Incident.People_ID = P.People_ID INNER JOIN Vehicle V on Incident.Vehicle_ID = V.Vehicle_ID INNER JOIN Offence O on Incident.Offence_ID = O.Offence_ID;");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "data" => $result));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT Vehicle_ID, Vehicle_type, Vehicle_licence FROM Vehicle");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "vehicles" => $result));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -12,15 +12,18 @@
|
|||||||
<main>
|
<main>
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<h1>Login To Traffic Reporter</h1>
|
<h1>Login To Traffic Reporter</h1>
|
||||||
|
|
||||||
<form method="POST" class="loginForm" id="login">
|
<form method="POST" class="loginForm" id="login">
|
||||||
<div class="formControl">
|
<div class="formControl">
|
||||||
<label for="username">Username</label>
|
<label for="username">Username</label>
|
||||||
<input type="text" name="username" id="username">
|
<input type="text" name="username" id="username" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="formControl">
|
<div class="formControl">
|
||||||
<label for="password">Password</label>
|
<label for="password">Password</label>
|
||||||
<input type="password" name="password" id="password">
|
<input type="password" name="password" id="password" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" value="Login" class="btn btnPrimary">
|
<input type="submit" value="Login" class="btn btnPrimary">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
if ($_SESSION["admin"])
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "ok", "admin" => $_SESSION["admin"]));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "not logged in as admin"));
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
session_start();
|
||||||
|
header('Content-Type: application/json');
|
||||||
if (isset($_SESSION["username"]))
|
if (isset($_SESSION["username"]))
|
||||||
{
|
{
|
||||||
echo json_encode(array("message" => "ok"));
|
echo json_encode(array("message" => "ok", "username" => $_SESSION["username"], "admin" => $_SESSION["admin"]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("getIncidents.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if(json.message === "ok")
|
||||||
|
{
|
||||||
|
let body = "";
|
||||||
|
for (const incident of json.incidents)
|
||||||
|
{
|
||||||
|
body += `<option value="${incident.Incident_ID}">${incident.Incident_Report} — ${incident.Incident_Date}</option>`;
|
||||||
|
}
|
||||||
|
document.querySelector("#incident").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#addFineForm").addEventListener("submit", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append("amount", document.querySelector("#amount").value);
|
||||||
|
formData.append("points", document.querySelector("#points").value);
|
||||||
|
formData.append("incident", document.querySelector("#incident").value)
|
||||||
|
|
||||||
|
fetch("addFine.php", {
|
||||||
|
method: "POST",
|
||||||
|
body: formData
|
||||||
|
}).then(res => res.json().then(json => {
|
||||||
|
if(json.message === "ok")
|
||||||
|
{
|
||||||
|
alert("Fine added successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert("Error adding fine");
|
||||||
|
}
|
||||||
|
|
||||||
|
}));
|
||||||
|
});
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
// Change Password stuff
|
||||||
|
|
||||||
|
document.querySelector("#changePass").addEventListener("submit", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let formData = new FormData();
|
||||||
|
if (document.querySelector("#pass").value !== document.querySelector("#rePass").value)
|
||||||
|
{
|
||||||
|
alert("Passwords do not match");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
formData.append("password", document.querySelector("#rePass").value);
|
||||||
|
fetch("changePassword.php", {
|
||||||
|
method: "POST",
|
||||||
|
body: formData
|
||||||
|
}).then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
alert("Password changed successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert(json.message);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("isLoggedIn.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message !== "ok")
|
||||||
|
{
|
||||||
|
window.location.href = "./";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.querySelector("#title h1").innerText = "Logged in as: " + json.username;
|
||||||
|
let adminLinks = document.querySelectorAll(".admin");
|
||||||
|
for (let adminLink of adminLinks)
|
||||||
|
{
|
||||||
|
if (json.admin === true)
|
||||||
|
{
|
||||||
|
adminLink.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#logout").addEventListener("click", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
fetch("logout.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
window.location.href = "./";
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
@@ -1,5 +1,16 @@
|
|||||||
// Login stuff
|
// Login stuff
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("isLoggedIn.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
window.location.href = "./search.html";
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
document.querySelector("#login").addEventListener("submit", e =>
|
document.querySelector("#login").addEventListener("submit", e =>
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
// create new a user stuff
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("isAdmin.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message !== "ok")
|
||||||
|
{
|
||||||
|
window.location.href = "./search.html";
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#createUser").addEventListener("submit", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let username = document.querySelector("#username").value;
|
||||||
|
let password = document.querySelector("#pass").value;
|
||||||
|
let rePass = document.querySelector("#rePass").value;
|
||||||
|
let admin = document.querySelector("#isAdmin").checked;
|
||||||
|
if (password === "" || rePass === "" || username === "")
|
||||||
|
{
|
||||||
|
alert("Please fill in all fields");
|
||||||
|
}
|
||||||
|
else if (password !== rePass)
|
||||||
|
{
|
||||||
|
alert("Passwords do not match");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let data = new FormData();
|
||||||
|
data.append("username", username);
|
||||||
|
data.append("password", password);
|
||||||
|
data.append("admin", admin);
|
||||||
|
|
||||||
|
fetch("newUser.php", {
|
||||||
|
method: "POST",
|
||||||
|
body: data
|
||||||
|
}).then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
alert("User created");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert("Error creating user");
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("getOwners.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if(json.message === "ok")
|
||||||
|
{
|
||||||
|
let body = "";
|
||||||
|
for (const owner of json.owners)
|
||||||
|
{
|
||||||
|
body += `<option value="${owner.People_ID}">${owner.People_name} - ${owner.People_licence}</option>`;
|
||||||
|
}
|
||||||
|
body += `<option value="new">New Owner</option>`;
|
||||||
|
document.querySelector("#owner").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#owner").addEventListener("change", e =>
|
||||||
|
{
|
||||||
|
let inputs = document.querySelectorAll("#addOwner input");
|
||||||
|
if (e.target.value === "new")
|
||||||
|
{
|
||||||
|
document.querySelector("#addOwner").classList.add("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.setAttribute("required", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.querySelector("#addOwner").classList.remove("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.removeAttribute("required");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#vehicleForm").addEventListener("submit", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append("type", document.querySelector("#type").value);
|
||||||
|
formData.append("colour", document.querySelector("#colour").value);
|
||||||
|
formData.append("plateNum", document.querySelector("#plateNum").value);
|
||||||
|
if (document.querySelector("#owner").value === "new")
|
||||||
|
{
|
||||||
|
formData.append("name", document.querySelector("#name").value);
|
||||||
|
formData.append("address", document.querySelector("#address").value);
|
||||||
|
formData.append("licence", document.querySelector("#licence").value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
formData.append("peopleID", document.querySelector("#owner").value);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch("addVehicle.php", {
|
||||||
|
method: "POST",
|
||||||
|
body: formData
|
||||||
|
}).then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
alert(json.message);
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("getOwners.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if(json.message === "ok")
|
||||||
|
{
|
||||||
|
let body = "";
|
||||||
|
for (const owner of json.owners)
|
||||||
|
{
|
||||||
|
body += `<option value="${owner.People_ID}">${owner.People_name} - ${owner.People_licence}</option>`;
|
||||||
|
}
|
||||||
|
body += `<option value="new">New Owner</option>`;
|
||||||
|
document.querySelector("#owner").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
fetch("getVehicles.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
let body = "";
|
||||||
|
for (const owner of json.vehicles)
|
||||||
|
{
|
||||||
|
body += `<option value="${owner.Vehicle_ID}">${owner.Vehicle_type} - ${owner.Vehicle_licence}</option>`;
|
||||||
|
}
|
||||||
|
body += `<option value="new">New Vehicle</option>`;
|
||||||
|
document.querySelector("#vehicle").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
fetch("getOffences.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
let body = "";
|
||||||
|
for (const owner of json.offences)
|
||||||
|
{
|
||||||
|
body += `<option value="${owner.Offence_ID}">${owner.Offence_description} - ${owner.Offence_maxFine}</option>`;
|
||||||
|
}
|
||||||
|
body += `<option value="new">New Vehicle</option>`;
|
||||||
|
document.querySelector("#offence").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
fetch("getReports.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
document.querySelector("#reportsResults thead tr").innerHTML = "";
|
||||||
|
document.querySelector("#reportsResults tbody").innerHTML = "";
|
||||||
|
|
||||||
|
for (const key of Object.keys(json.data[0]))
|
||||||
|
{
|
||||||
|
let header = key.substring(key.indexOf("_") + 1)
|
||||||
|
header = header.charAt(0).toUpperCase() + header.slice(1);
|
||||||
|
document.querySelector("#reportsResults thead tr").innerHTML += `<th>${header}</th>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
let body = "";
|
||||||
|
for (const row of json.data)
|
||||||
|
{
|
||||||
|
body += "<tr>";
|
||||||
|
for (const key of Object.keys(row))
|
||||||
|
{
|
||||||
|
body += `<td>${(row[key] === "null" || row[key] === null) ? "N/A" : row[key]}</td>`;
|
||||||
|
}
|
||||||
|
body += "</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelector("#reportsResults tbody").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#owner").addEventListener("change", e =>
|
||||||
|
{
|
||||||
|
let inputs = document.querySelectorAll("#addOwner input");
|
||||||
|
if (e.target.value === "new")
|
||||||
|
{
|
||||||
|
document.querySelector("#addOwner").classList.add("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.setAttribute("required", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.querySelector("#addOwner").classList.remove("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.removeAttribute("required");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#vehicle").addEventListener("change", e =>
|
||||||
|
{
|
||||||
|
let inputs = document.querySelectorAll("#addVehicle input");
|
||||||
|
if (e.target.value === "new")
|
||||||
|
{
|
||||||
|
document.querySelector("#addVehicle").classList.add("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.setAttribute("required", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.querySelector("#addVehicle").classList.remove("shown");
|
||||||
|
for (const input of inputs)
|
||||||
|
{
|
||||||
|
input.removeAttribute("required");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector("#reports").addEventListener("click", e =>
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append("incidentReport", document.querySelector("#incidentReport").value);
|
||||||
|
formData.append("incidentDate", document.querySelector("#incidentDate").value);
|
||||||
|
if (document.querySelector("#owner").value === "new")
|
||||||
|
{
|
||||||
|
formData.append("name", document.querySelector("#name").value);
|
||||||
|
formData.append("address", document.querySelector("#address").value);
|
||||||
|
formData.append("licence", document.querySelector("#licence").value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
formData.append("peopleID", document.querySelector("#owner").value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.querySelector("#vehicle").value === "new")
|
||||||
|
{
|
||||||
|
formData.append("type", document.querySelector("#type").value);
|
||||||
|
formData.append("colour", document.querySelector("#colour").value);
|
||||||
|
formData.append("plateNumber", document.querySelector("#plateNum").value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
formData.append("vehicleID", document.querySelector("#vehicle").value);
|
||||||
|
}
|
||||||
|
formData.append("offenceID", document.querySelector("#offence").value);
|
||||||
|
|
||||||
|
fetch("newReport.php",{
|
||||||
|
method: "POST",
|
||||||
|
body: formData
|
||||||
|
}).then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert("Error adding report");
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
@@ -1,13 +1,4 @@
|
|||||||
// document.addEventListener("DOMContentLoaded", () =>
|
//Search stuff
|
||||||
// {
|
|
||||||
// fetch("isLoggedIn.php").then(res => res.json().then(json =>
|
|
||||||
// {
|
|
||||||
// if (json.message !== "ok")
|
|
||||||
// {
|
|
||||||
// window.location.href = "index.html";
|
|
||||||
// }
|
|
||||||
// }));
|
|
||||||
// });
|
|
||||||
|
|
||||||
document.querySelector("#searchType").addEventListener("change", e =>
|
document.querySelector("#searchType").addEventListener("change", e =>
|
||||||
{
|
{
|
||||||
@@ -37,23 +28,25 @@ document.querySelector("#searchForm").addEventListener("submit", e =>
|
|||||||
{
|
{
|
||||||
document.querySelector("#searchResults thead tr").innerHTML = "";
|
document.querySelector("#searchResults thead tr").innerHTML = "";
|
||||||
document.querySelector("#searchResults tbody").innerHTML = "";
|
document.querySelector("#searchResults tbody").innerHTML = "";
|
||||||
console.log(Object.keys(json.data[0]));
|
|
||||||
Object.keys(json.data[0]).forEach(key =>
|
for (const key of Object.keys(json.data[0]))
|
||||||
{
|
{
|
||||||
let header = key.substring(key.indexOf("_") + 1)
|
let header = key.substring(key.indexOf("_") + 1)
|
||||||
header = header.charAt(0).toUpperCase() + header.slice(1);
|
header = header.charAt(0).toUpperCase() + header.slice(1);
|
||||||
document.querySelector("#searchResults thead tr").innerHTML += `<th>${header}</th>`;
|
document.querySelector("#searchResults thead tr").innerHTML += `<th>${header}</th>`;
|
||||||
});
|
}
|
||||||
|
|
||||||
let body = "";
|
let body = "";
|
||||||
json.data.forEach(row =>
|
for (const row of json.data)
|
||||||
{
|
{
|
||||||
body += "<tr>";
|
body += "<tr>";
|
||||||
Object.keys(row).forEach(key =>
|
for (const key of Object.keys(row))
|
||||||
{
|
{
|
||||||
body += `<td>${(row[key] === "null" || row[key] === null) ? "N/A" : row[key]}</td>`;
|
body += `<td>${(row[key] === "null" || row[key] === null) ? "N/A" : row[key]}</td>`;
|
||||||
});
|
}
|
||||||
body += "</tr>";
|
body += "</tr>";
|
||||||
});
|
}
|
||||||
|
|
||||||
document.querySelector("#searchResults tbody").innerHTML = body;
|
document.querySelector("#searchResults tbody").innerHTML = body;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () =>
|
||||||
|
{
|
||||||
|
fetch("isAdmin.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message !== "ok")
|
||||||
|
{
|
||||||
|
window.location.href = "./search.html";
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
fetch("viewLog.php").then(res => res.json().then(json =>
|
||||||
|
{
|
||||||
|
if (json.message === "ok")
|
||||||
|
{
|
||||||
|
for (const key of Object.keys(json.logs[0]))
|
||||||
|
{
|
||||||
|
let header = key.substring(key.indexOf("_") + 1)
|
||||||
|
header = header.charAt(0).toUpperCase() + header.slice(1);
|
||||||
|
document.querySelector("#logTable thead tr").innerHTML += `<th>${header}</th>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
let body = "";
|
||||||
|
for (const row of json.logs)
|
||||||
|
{
|
||||||
|
body += "<tr>";
|
||||||
|
for (const key of Object.keys(row))
|
||||||
|
{
|
||||||
|
body += `<td>${row[key]}</td>`;
|
||||||
|
}
|
||||||
|
body += "</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelector("#logTable tbody").innerHTML = body;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
session_start();
|
||||||
require_once 'config.php';
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
$username = $_POST["username"];
|
$username = $_POST["username"];
|
||||||
$password = $_POST["password"];
|
$password = $_POST["password"];
|
||||||
|
|
||||||
@@ -11,10 +11,12 @@ $stmt = $conn->prepare("SELECT * FROM Users WHERE Users_username = :username AND
|
|||||||
$stmt->bindParam(":username", $username);
|
$stmt->bindParam(":username", $username);
|
||||||
$stmt->bindParam(":password", $password);
|
$stmt->bindParam(":password", $password);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
if (count($stmt->fetchAll(PDO::FETCH_ASSOC)) > 0)
|
if (count($result) > 0)
|
||||||
{
|
{
|
||||||
$_SESSION["username"] = $username;
|
$_SESSION["username"] = $username;
|
||||||
|
$_SESSION["admin"] = $result[0]["Users_admin"] === "1";
|
||||||
echo json_encode(array("message" => "ok"));
|
echo json_encode(array("message" => "ok"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
session_destroy();
|
||||||
|
echo json_encode(array("message" => "ok"));
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
if (isset($_SESSION["username"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$incidentReport = $_POST["incidentReport"];
|
||||||
|
$incidentDate = $_POST["incidentDate"];
|
||||||
|
$peopleID = $_POST["peopleID"];
|
||||||
|
$vehicleID = $_POST["vehicleID"];
|
||||||
|
$offenceID = $_POST["offenceID"];
|
||||||
|
|
||||||
|
if (isset($_POST["type"]) && isset($_POST["colour"]) && isset($_POST["plateNum"]))
|
||||||
|
{
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Vehicle (Vehicle_type, Vehicle_colour, Vehicle_licence) VALUES (:type, :colour, :plateNum)");
|
||||||
|
$stmt->bindParam(":type", $_POST["type"]);
|
||||||
|
$stmt->bindParam(":colour", $_POST["colour"]);
|
||||||
|
$stmt->bindParam(":plateNum", $_POST["plateNum"]);
|
||||||
|
$stmt->execute();
|
||||||
|
$vehicleID = $conn->lastInsertId();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST["name"]) && isset($_POST["address"]) && isset($_POST["licence"]))
|
||||||
|
{
|
||||||
|
$stmtPeople = $conn->prepare("INSERT INTO People (People_name, People_address, People_licence) VALUES (:name, :address, :licence)");
|
||||||
|
$stmtPeople->bindParam(":name", $_POST["name"]);
|
||||||
|
$stmtPeople->bindParam(":address", $_POST["address"]);
|
||||||
|
$stmtPeople->bindParam(":licence", $_POST["licence"]);
|
||||||
|
$stmtPeople->execute();
|
||||||
|
$peopleID = $conn->lastInsertId();
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmtOwner = $conn->prepare("INSERT INTO Ownership (Vehicle_ID, People_ID) VALUES (:vehicleID, :peopleID)");
|
||||||
|
$stmtOwner->bindParam(":vehicleID", $vehicleID);
|
||||||
|
$stmtOwner->bindParam(":peopleID", $peopleID);
|
||||||
|
$stmtOwner->execute();
|
||||||
|
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Incident (Incident_report, Incident_date, People_ID, Vehicle_ID, Offence_ID) VALUES (:incidentReport, :incidentDate, :peopleID, :vehicleID, :offenceID)");
|
||||||
|
$stmt->bindParam(":incidentReport", $incidentReport);
|
||||||
|
$stmt->bindParam(":incidentDate", $incidentDate);
|
||||||
|
$stmt->bindParam(":peopleID", $peopleID);
|
||||||
|
$stmt->bindParam(":vehicleID", $vehicleID);
|
||||||
|
$stmt->bindParam(":offenceID", $offenceID);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Add Report', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
$logStmt->execute();
|
||||||
|
|
||||||
|
echo json_encode(array("message" => "ok"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in"));
|
||||||
|
}
|
||||||
@@ -2,9 +2,56 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Title</title>
|
<title>Create New User</title>
|
||||||
|
<link rel="stylesheet" href="css/nav.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn active">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<form method="POST" id="createUser">
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="username">Username</label>
|
||||||
|
<input type="text" name="username" id="username">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="pass">Password</label>
|
||||||
|
<input type="password" name="pass" id="pass">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="rePass">Retype Password</label>
|
||||||
|
<input type="password" name="rePass" id="rePass">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="isAdmin" class="checkContainer">Is Admin
|
||||||
|
<input type="checkbox" name="isAdmin" id="isAdmin">
|
||||||
|
<span class="checkmark"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Create New User" class="btn btnPrimary" style="margin-top: 1em;">
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/newUser.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]) && isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
$username = $_POST["username"];
|
||||||
|
$password = $_POST["password"];
|
||||||
|
$admin = $_POST["admin"];
|
||||||
|
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("INSERT INTO Users (Users_username, Users_password, Users_admin) VALUES (:username, :password, :admin)");
|
||||||
|
$stmt->bindParam(":username", $username);
|
||||||
|
$stmt->bindParam(":password", $password);
|
||||||
|
$isAdmin = $admin ? 1 : 0;
|
||||||
|
$stmt->bindParam(":admin", $isAdmin);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES (:type, :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$type = !$admin ? "Add user" : "Add admin";
|
||||||
|
$logStmt->bindParam(":type", $type);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
$logStmt->execute();
|
||||||
|
|
||||||
|
echo json_encode(array("message" => "ok", "admin" => $admin));
|
||||||
|
}
|
||||||
|
else if (isset($_SESSION["username"]) && !isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "not logged in as admin"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Reports</title>
|
||||||
|
<link rel="stylesheet" href="css/reports.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn active">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<div class="formGroup">
|
||||||
|
<div class="formSpace">
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="type">Incident Report</label>
|
||||||
|
<input type="text" name="type" id="incidentReport" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="colour">Incident Date</label>
|
||||||
|
<input type="date" name="colour" id="incidentDate" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="owner">Owner</label>
|
||||||
|
<div class="selectDiv">
|
||||||
|
<select name="owner" id="owner" required>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="vehicle">Vehicle</label>
|
||||||
|
<div class="selectDiv">
|
||||||
|
<select name="owner" id="vehicle" required>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="offence">Offence</label>
|
||||||
|
<div class="selectDiv">
|
||||||
|
<select name="owner" id="offence" required>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" id="reports" value="Add new report" class="btn btnPrimary">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formSpace" id="addOwner">
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="name">Name</label>
|
||||||
|
<input type="text" name="name" id="name">
|
||||||
|
</div>
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="address">Address</label>
|
||||||
|
<input type="text" name="address" id="address">
|
||||||
|
</div>
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="licence">Licence number</label>
|
||||||
|
<input type="text" name="licence" id="licence" maxlength="16" max="16">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formSpace" id="addVehicle">
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="type">Type</label>
|
||||||
|
<input type="text" name="type" id="type" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="colour">Colour</label>
|
||||||
|
<input type="text" name="colour" id="colour" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="formControl">
|
||||||
|
<label for="plateNum">Plate Number</label>
|
||||||
|
<input type="text" name="plateNum" id="plateNum" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<table id="reportsResults">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/reports.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -10,16 +10,20 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="search.html" class="btn active">Search</a></li>
|
<li><a href="search.html" class="btn active">Search</a></li>
|
||||||
<li><a href="newVehicle.html" class="btn">Add new vehicle</a></li>
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
<li><a href="newReport.html" class="btn">Create new report</a></li>
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
<li><a href="newUser.html" class="btn">Create new user</a></li>
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
<li><a href="addFines.html" class="btn">Add Fines</a></li>
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
<li><a href="viewLog.html" class="btn">View log</a></li>
|
<li class="admin"><a href="viewLog.html" class="btn">View log</a></li>
|
||||||
<li><a href="changePassword.html">Change password</a></li>
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
<li><a href="#" class="btn">Logout</a></li>
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<main id="search">
|
<main id="search">
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
<div class="searchContainer">
|
<div class="searchContainer">
|
||||||
<form method="POST" id="searchForm">
|
<form method="POST" id="searchForm">
|
||||||
<div class="selectDiv">
|
<div class="selectDiv">
|
||||||
@@ -28,8 +32,9 @@
|
|||||||
<option value="pn">Plate Number</option>
|
<option value="pn">Plate Number</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="searchBtnContainer">
|
<div class="searchBtnContainer">
|
||||||
<input type="text" id="searchField" name="searchField" placeholder="Find owner">
|
<input type="text" id="searchField" name="searchField" placeholder="Find owner" required>
|
||||||
<button type="submit"><i class="fa-solid fa-magnifying-glass"></i></button>
|
<button type="submit"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -47,6 +52,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
<script src="js/search.js"></script>
|
<script src="js/search.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
session_start();
|
||||||
require_once 'config.php';
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
if (isset($_SESSION["username"]))
|
if (isset($_SESSION["username"]))
|
||||||
{
|
{
|
||||||
$searchType = $_POST["searchType"];
|
$searchType = $_POST["searchType"];
|
||||||
@@ -13,10 +13,20 @@ if (isset($_SESSION["username"]))
|
|||||||
$stmt = $conn->prepare("SELECT People_name, People_address, People_licence FROM People WHERE People_name LIKE :name OR People_licence = :searchField");
|
$stmt = $conn->prepare("SELECT People_name, People_address, People_licence FROM People WHERE People_name LIKE :name OR People_licence = :searchField");
|
||||||
$name = "%" . $searchField . "%";
|
$name = "%" . $searchField . "%";
|
||||||
$stmt->bindParam(":name", $name);
|
$stmt->bindParam(":name", $name);
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Search by driving licence number', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
|
$logStmt->execute();
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$stmt = $conn->prepare("SELECT P.People_name, Vehicle_type, Vehicle_colour, Vehicle_licence FROM Vehicle LEFT JOIN Ownership O on Vehicle.Vehicle_ID = O.Vehicle_ID LEFT JOIN People P on O.People_ID = P.People_ID WHERE Vehicle_licence = :searchField");
|
$stmt = $conn->prepare("SELECT P.People_name, Vehicle_type, Vehicle_colour, Vehicle_licence FROM Vehicle LEFT JOIN Ownership O on Vehicle.Vehicle_ID = O.Vehicle_ID LEFT JOIN People P on O.People_ID = P.People_ID WHERE Vehicle_licence = :searchField");
|
||||||
|
|
||||||
|
$logSQL = "INSERT INTO Logs (Logs_type, Users_username, Logs_date) VALUES ('Search by plate number', :username, NOW())";
|
||||||
|
$logStmt = $conn->prepare($logSQL);
|
||||||
|
$logStmt->bindParam(":username", $_SESSION["username"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt->bindParam(":searchField", $searchField);
|
$stmt->bindParam(":searchField", $searchField);
|
||||||
|
|||||||
@@ -2,9 +2,41 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Title</title>
|
<title>View Log</title>
|
||||||
|
<link rel="stylesheet" href="css/nav.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="search.html" class="btn">Search</a></li>
|
||||||
|
<li><a href="addVehicle.html" class="btn">Add new vehicle</a></li>
|
||||||
|
<li><a href="reports.html" class="btn">Reports</a></li>
|
||||||
|
<li class="admin"><a href="newUser.html" class="btn">Create new user</a></li>
|
||||||
|
<li class="admin"><a href="addFine.html" class="btn">Add Fines</a></li>
|
||||||
|
<li class="admin"><a href="viewLog.html" class="btn active">View log</a></li>
|
||||||
|
<li><a href="changePassword.html" class="btn">Change password</a></li>
|
||||||
|
<li><a id="logout" class="btn">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<main id="search">
|
||||||
|
<header id="title">
|
||||||
|
<h1></h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<table id="logTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
|
||||||
|
<script src="js/checkUser.js"></script>
|
||||||
|
<script src="js/viewLog.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once 'config.php';
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if (isset($_SESSION["username"]) && isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
$conn = dbConn();
|
||||||
|
$stmt = $conn->prepare("SELECT Logs_type, Users_username, Logs_date FROM Logs");
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo json_encode(array("message" => "ok", "logs" => $result));
|
||||||
|
}
|
||||||
|
else if (isset($_SESSION["username"]) && !isset($_SESSION["admin"]))
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "not logged in as admin"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo json_encode(array("message" => "Not logged in "));
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
username: psxrp11
|
||||||
|
student id: 20450011
|
||||||
|
url: http://mersey.cs.nott.ac.uk/~psxrp11/DIS-COMP4039-CW2-psxrp11-20450011/psxrp11-20450011_InstallationFiles/
|
||||||
|
|
||||||
|
List of Files
|
||||||
|
└── DIS-COMP4039-CW2-psxrp11-20450011
|
||||||
|
├── psxrp11-20450011_cover.txt
|
||||||
|
└── psxrp11-20450011_InstallationFiles
|
||||||
|
├── addFine.html
|
||||||
|
├── addFine.php
|
||||||
|
├── addVehicle.html
|
||||||
|
├── addVehicle.php
|
||||||
|
├── changePassword.html
|
||||||
|
├── changePassword.php
|
||||||
|
├── config.php
|
||||||
|
├── css
|
||||||
|
│ ├── login.css
|
||||||
|
│ ├── nav.css
|
||||||
|
│ ├── newVehicle.css
|
||||||
|
│ ├── normalize.css
|
||||||
|
│ ├── reports.css
|
||||||
|
│ ├── search.css
|
||||||
|
│ └── template.css
|
||||||
|
├── final.sql
|
||||||
|
├── getIncidents.php
|
||||||
|
├── getOffences.php
|
||||||
|
├── getOwners.php
|
||||||
|
├── getVehicles.php
|
||||||
|
├── index.html
|
||||||
|
├── isAdmin.php
|
||||||
|
├── isLoggedIn.php
|
||||||
|
├── js
|
||||||
|
│ ├── addFine.js
|
||||||
|
│ ├── changePassword.js
|
||||||
|
│ ├── checkUser.js
|
||||||
|
│ ├── login.js
|
||||||
|
│ ├── newUser.js
|
||||||
|
│ ├── newVehicle.js
|
||||||
|
│ ├── reports.js
|
||||||
|
│ ├── search.js
|
||||||
|
│ └── viewLog.js
|
||||||
|
├── login.php
|
||||||
|
├── logout.php
|
||||||
|
├── newReport.php
|
||||||
|
├── newUser.html
|
||||||
|
├── newUser.php
|
||||||
|
├── reports.html
|
||||||
|
├── search.html
|
||||||
|
├── search.php
|
||||||
|
├── viewLog.html
|
||||||
|
└── viewLog.php
|
||||||
|
|
||||||
|
4 directories, 42 files
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user