SELECT tbl_client.client_name, tbl_client.client_id
FROM tbl_client
INNER JOIN tbl_therapist_client
ON tbl_therapist_client.client_id=tbl_client.client_id
WHERE tbl_therapist_client.therapist_id = 1
AND tbl_client.client_status = "Active"
JOIN tbl_session
WHERE tbl_session.session_status = "Invoiced"
ORDER BY tbl_client.client_name ASC;
I believe my JOINS are wrong.
SELECT tbl_client.client_name, tbl_client.client_id
FROM tbl_client
JOIN tbl_therapist_client
ON tbl_therapist_client.client_id=tbl_client.client_id
JOIN tbl_session
ON tbl_session.client_id=tbl_client.client_id
WHERE tbl_therapist_client.therapist_id = $therapist_id
AND tbl_client.client_status = "Active"
AND tbl_session.session_status = "Invoiced"
ORDER BY tbl_client.client_name ASC;
$sql = <<< EOT
SELECT tbl_client.client_name, tbl_client.client_id
FROM tbl_client
JOIN tbl_therapist_client
ON tbl_therapist_client.client_id=tbl_client.client_id
JOIN tbl_session
ON tbl_session.client_id=tbl_client.client_id
WHERE tbl_therapist_client.therapist_id = $therapist_id
AND tbl_session.session_status = "Invoiced"
GROUP BY tbl_client.client_id
ORDER BY tbl_client.client_name ASC;
EOT;
<?php
require_once('includes/common.php');
require_once('includes/secure.php');
require_once('includes/pdo_connection.php');
// Extract POST and bug out if not present
$data = isset($_POST['cancel']) ? $_POST['cancel'] : false;
if (!$data) die();
$qmarks = str_pad("?", (count($data) * 2)- 1, ',?');
$query = <<< QUERY
UPDATE tbl_session SET `session_status` = 'Paid' WHERE session_id IN ({$qmarks})
QUERY;
$stmt = $db->prepare($query);
$msg = '';
if ($stmt->execute(array_values($data))) {
$total = $stmt->rowCount();
if ($total) {
$msg = "{$total} Paid";
} else {
$msg = "No Sessions Paid";
}
} else {
$msg = "There was an error processing this request.";
}
die(json_encode(['msg' => $msg]));
$sql = <<< EOT
SELECT tbl_client.client_name, tbl_client.client_id
FROM tbl_client
JOIN tbl_therapist_client ON tbl_therapist_client.client_id=tbl_client.client_id
JOIN tbl_session ON tbl_session.client_id=tbl_client.client_id
WHERE tbl_therapist_client.therapist_id = $therapist_id
AND tbl_session.session_status = "Invoiced"
GROUP BY tbl_client.client_id
ORDER BY tbl_client.client_name ASC;
EOT;
$results = $db->query($sql);
echo "<select name='myClients'>";
echo "<option value='0'>Show All</option>";
while ($row = $results->fetch(PDO::FETCH_OBJ)) {
printf("<option value='%s'>%s</option>", $row->client_id, $row->client_name);
}
echo "</select>";
Right at the very top of your script, you have a different query that is used to populate the table:$sql = <<<EOT
SELECT tbl_session.session_id AS ID, DATE_FORMAT(tbl_session.session_date,"%W, %M, %d, %Y") AS DATE,
TIME_FORMAT(CONCAT(tbl_session.time_slot_id, ":00:00"), "%h:%i %p") AS TIME,
tbl_session.session_type AS TYPE, tbl_client.client_name as CLIENT, tbl_session.session_status AS STATUS
FROM tbl_session
INNER JOIN tbl_client ON tbl_client.client_id=tbl_session.client_id
WHERE tbl_session.therapist_id = :therapist_id
AND tbl_session.session_status = "Invoiced"
ORDER BY session_date DESC
EOT;
$stmt = $db->prepare($sql);
$stmt->execute([':therapist_id' => $therapist_id]);
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
That loads the results into the $rows variable and then you output it with the following:foreach($rows as $row): ?>
<tr>
<td><?= $row->ID; ?></td>
<td><input type="checkbox" name="cancel[]" value="<?= $row->ID?>"></td>
<td><?= $row->DATE; ?></td>
<td><?= $row->TIME; ?></td>
<td><?= $row->TYPE; ?></td>
<td><?= $row->CLIENT; ?></td>
<td><?= $row->STATUS; ?></td>
</tr>
<?php endforeach; ?>
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('includes/common.php');
require_once('includes/secure.php');
require_once('includes/practice.php');
require_once('includes/pdo_connection.php');
$clientWhere = null;
$params = ['therapist' => $therapist->id];
if ($clientId = (int)($_GET['client'] ?? 0)) {
$params['client'] = $clientId;
$clientWhere = "AND tbl_client.client_id = :client";
}
$sql = <<<EOT
SELECT tbl_session.session_id AS ID, DATE_FORMAT(tbl_session.session_date,"%W, %M, %d, %Y") AS DATE, TIME_FORMAT(CONCAT(tbl_session.time_slot_id, ":00:00"), "%h:%i %p") AS TIME, tbl_session.session_type AS TYPE, tbl_client.client_name as CLIENT, tbl_session.session_status AS STATUS
FROM tbl_session
INNER JOIN tbl_client
ON tbl_client.client_id=tbl_session.client_id
WHERE tbl_session.therapist_id = :therapist $clientWhere
AND tbl_session.session_status ='Booked'
ORDER BY session_date ASC
EOT;
$stmt = $db->prepare($sql);
$stmt->execute([':therapist_id' => $therapist_id]);
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
while ($row = $results->fetch(PDO::FETCH_OBJ)) {
printf("<option value='%s'>%s</option>", $row->client_id, $row->client_name);
<table id="myTable" class="topics" style="width:100%">
<colgroup>
<col style="width: 10%;">
<col style="width: 25%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 25%;">
<col style="width: 15%;">
</colgroup>
<thead>
<tr>
<th> </th>
<th>SELECT</th>
<th>DATE</th>
<th>TIME</th>
<th>TYPE</th>
<th>CLIENT</th>
<th>STATUS</th>
</tr>
</thead>
<tbody id="results">
<?php
foreach($rows as $row):
?>
<tr>
<td><?= $row->ID; ?></td>
<td><input type="checkbox" name="cancel[]" value="<?= $row->ID?>"></td>
<td><?= $row->DATE; ?></td>
<td><?= $row->TIME; ?></td>
<td><?= $row->TYPE; ?></td>
<td><?= $row->CLIENT; ?></td>
<td><?= $row->STATUS; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
);
}
<?php
require_once('includes/common.php');
require_once('includes/secure.php');
require_once('includes/practice.php');
require_once('includes/pdo_connection.php');
$clientWhere = null;
$params = ['therapist' => $therapist->id];
if ($clientId = (int)($_GET['client'] ?? 0)) {
$params['client'] = $clientId;
$clientWhere = "AND tbl_client.client_id = :client";
}
$sql = <<<EOT
SELECT tbl_session.session_id AS ID, DATE_FORMAT(tbl_session.session_date,"%W, %M, %d, %Y") AS DATE, TIME_FORMAT(CONCAT(tbl_session.time_slot_id, ":00:00"), "%h:%i %p") AS TIME, tbl_session.session_type AS TYPE, tbl_client.client_name as CLIENT, tbl_session.session_status AS STATUS
FROM tbl_session
INNER JOIN tbl_client
ON tbl_client.client_id=tbl_session.client_id
WHERE tbl_session.therapist_id = :therapist $clientWhere
AND tbl_session.session_status = "Booked"
ORDER BY session_date ASC;
EOT;
$clients = $db->prepare($sql);
$clients->execute($params);
while ($client = $clients->fetch(PDO::FETCH_OBJ)) {
printf('<tr><td>%s</td><td><input type="checkbox"></td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
$client->ID,
$client->DATE,
$client->TIME,
$client->TYPE,
$client->CLIENT,
$client->STATUS
);
}
Thank you for your help!
You need your JOINS before your WHEREs
Open in new window