-
Notifications
You must be signed in to change notification settings - Fork 0
/
question_1.php
98 lines (86 loc) · 2.44 KB
/
question_1.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
namespace SoftwareEngineerTest;
// Question 1a
$DB_HOST = 'localhost';
$DB_NAME = 'test';
$DB_USER = 'test';
$DB_PASS = 'test';
// write your sql to get customer_data here
$sql = "
SELECT customer.*, occupation_name
FROM customer
LEFT JOIN customer_occupation USING (customer_occupation_id)
";
?>
<h2>Customer List</h2>
<table>
<tr>
<th>Customer ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Occupation</th>
</tr>
<!-- Write your code here -->
<?php
/** Connects to the database using the global credentials.
*
* @return PDO object
*/
function connectDb() {
global $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS;
$conn_str = sprintf( "mysql:host=%s;dbname=%s", $DB_HOST, $DB_NAME );
$dbh = new \PDO( $conn_str, $DB_USER, $DB_PASS );
$dbh -> setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
return $dbh;
}
/** Reads customer records from the database.
*
* @param PDO obejct database handler PDO object
* @param string the basic SQL command, without filtering
* @return array list of customers
*/
function fetchCustomers( $dbh, $sql ) {
if ( isset( $_GET[ "occupation_name" ] ) ) {
$pattern = "/^[a-zA-Z0-9]{1,100}$/";
if ( !preg_match( $pattern, $_GET[ "occupation_name" ] ) ) {
throw new \Exception( "The occupation_name parameter must contain 1...100 alphanumerical characters." );
}
$sql .= "WHERE occupation_name = ?";
$params = array( $_GET[ "occupation_name" ] );
} else {
$params = array();
}
$sth = $dbh -> prepare($sql);
$sth -> execute( $params );
$results = $sth -> fetchAll();
return $results;
}
/** returns the table rows as html string.
*
* @param array the list of the customers
* @return string the html representation of the table rows.
*/
function getTableBody( $results ) {
$ret = "";
foreach ( $results as $row ) {
$ret .= sprintf( "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><tr>",
$row[ "customer_id" ],
$row[ "first_name" ],
$row[ "last_name" ],
( $row[ "occupation_name" ] === NULL ) ? "un-employed" : $row[ "occupation_name" ] // in PHP7 it can be shorter
);
}
return $ret;
}
try {
$dbh = connectDb();
$results = fetchCustomers( $dbh, $sql );
$tbody = getTableBody( $results );
print $tbody;
} catch (\Exception $e) {
print( "<pre>" );
print "Fatal error: ". $e -> getMessage();
die();
}
?>
</table>