Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Table {
- public $connect;
- public $dbHost;
- public $dbUsername;
- public $dbPassword;
- public $dbName;
- public function __construct() {
- $this->dbHost = "localhost";
- $this->dbUsername = "root";
- $this->dbPassword = "";
- $this->dbName = "44tem";
- $this->connect = mysqli_connect(
- $this->dbHost,
- $this->dbUsername,
- $this->dbPassword,
- $this->dbName
- ) or die("Não foi possível estabelecer uma conexão ao banco de dados!");
- }
- public function generateTable(array $parameters) {
- if (array_key_exists("tableName", $parameters) || !empty($parameters("tableName"))) {
- $tableName = mysqli_real_escape_string($this->connect, $parameters["tableName"]);
- try {
- if (!mysqli_query($this->connect, "DESCRIBE $tableName")) {
- throw new Exception("Erro: a tabela informada não existe!");
- }
- } catch (Exception $e) {
- die($e->getMessage());
- }
- } else {
- die("Erro: é necessário informar o nome da tabela a ser gerada!");
- }
- if (array_key_exists("displayRows", $parameters) || !empty($parameters["displayRows"])) {
- $displayRows = $parameters["displayRows"];
- $getColumnNames = mysqli_query($this->connect, "DESCRIBE $tableName");
- $tableColumnNames = [];
- while ($column = mysqli_fetch_array($getColumnNames)) {
- if (array_key_exists($column["Field"], $displayRows)) {
- array_push($tableColumnNames, $displayRows[$column["Field"]]);
- } else if (in_array($column["Field"], $displayRows)) {
- array_push($tableColumnNames, $column["Field"]);
- }
- }
- if (empty($tableColumnNames)) {
- echo "Erro: nenhuma coluna válida foi informada!";
- }
- } else {
- die("Erro: é necessário informar no mínimo uma coluna a ser mostrada!");
- }
- if (array_key_exists("searchTerm", $parameters)) {
- $searchTerm = mysqli_real_escape_string($this->connect, $parameters["searchTerm"]);
- if (array_key_exists("searchColumn", $parameters)) {
- $searchColumn = mysqli_real_escape_string($this->connect, $parameters["searchColumn"]);
- $sql = "SELECT * FROM $tableName WHERE $searchColumn LIKE '%".$searchTerm."%'";
- } else {
- die("Erro: é necessário informar o nome da coluna de referência para buscas!");
- }
- } else {
- $sql = "SELECT * FROM $tableName";
- }
- $query = mysqli_query($this->connect, $sql);
- $totalRows = mysqli_num_rows($query);
- if (array_key_exists("rowsPerPage", $parameters)) {
- $rowsPerPage = mysqli_real_escape_string($this->connect, $parameters["rowsPerPage"]);
- if ($rowsPerPage > $totalRows) {
- $rowsPerPage = $totalRows;
- } else if ($rowsPerPage < 1) {
- $rowsPerPage = 1;
- }
- } else {
- $rowsPerPage = 10;
- }
- $totalPages = ceil($totalRows / $rowsPerPage);
- if ($totalPages < 1) {
- $totalPages = 1;
- }
- if (array_key_exists("pageNumber", $parameters)) {
- $pageNumber = preg_replace(
- "#[^0-9]#",
- "",
- mysqli_real_escape_string($this->connect, $parameters["pageNumber"])
- );
- if ($pageNumber < 1) {
- $pageNumber = 1;
- } else if ($pageNumber > $totalPages) {
- $pageNumber = $totalPages;
- }
- } else {
- $pageNumber = 1;
- }
- $pageLimit = "LIMIT " . ($pageNumber - 1) * $rowsPerPage . "," . $rowsPerPage;
- if (isset($searchTerm)) {
- $sql = "SELECT * FROM $tableName WHERE $searchColumn LIKE $searchTerm $pageLimit";
- } else {
- $sql = "SELECT * FROM $tableName $pageLimit";
- }
- $query = mysqli_query($this->connect, $sql);
- $paginationInfo = "Total (<b>$totalRows</b>), Página <b>$pageNumber</b> de <b>$totalPages</b>";
- $paginationCtrls = "";
- if ($totalPages != 1) {
- if ($pageNumber > 1) {
- $previousPage = $pageNumber - 1;
- // Check if we aren't on the first page, and then generate the "Previous"
- $paginationCtrls .= '
- <li class="page-item" data-page="'.$previousPage.'">
- <a class="page-link">«</a>
- </li>';
- // Render clickable number links that should appear on the left of the actual page number
- for ($i = $pageNumber - 4; $i < $pageNumber; $i++) {
- if ($i > 0) {
- $paginationCtrls .= '
- <li class="page-item" data-page="'.$i.'">
- <a class="page-link">'.$i.'</a>
- </li>';
- }
- }
- }
- // Render the actual page number, but without it being a link
- $paginationCtrls .= '
- <li class="page-item active" data-page="'.$pageNumber.'">
- <a class="page-link">'.$pageNumber.'</a>
- </li>';
- // Render the clickable number links that should appear on the right of the actual page number
- for ($i = $pageNumber + 1; $i < $totalPages; $i++) {
- $paginationCtrls .= '
- <li class="page-item" data-page="'.$i.'">
- <a class="page-link">'.$i.'</a>
- </li>';
- if ($i >= $pageNumber + 4) {
- break;
- }
- }
- // This checks if we aren't on the last page, and then generate the "Next"
- if ($pageNumber != $totalPages) {
- $nextPage = $pageNumber + 1;
- $paginationCtrls .= '
- <li class="page-item" data-page="'.$nextPage.'">
- <a class="page-link">»</a>
- </li>';
- }
- }
- // Generate the table
- ?>
- <table>
- <thead>
- <tr>
- <?php foreach ($displayRows as $tableRow) { ?>
- <th data-scope="col"><?php echo $tableRow ?></th>
- <?php } ?>
- </tr>
- </thead>
- <tbody>
- <?php
- while ($row = mysqli_fetch_array($query)) {
- echo "<tr>";
- foreach (array_keys($displayRows) as $tableRow) {
- if (array_key_exists($tableRow, $row)) {
- echo "<td data-label=".$displayRows[$tableRow].">".$row[$tableRow]."</td>";
- } else {
- echo "<td>---</td>";
- }
- }
- echo "</tr>";
- }
- ?>
- </tbody>
- </table>
- <p class="mt-3 text-center"><?php echo $paginationInfo ?></p>
- <ul class="pagination justify-content-center"><?php echo $paginationCtrls ?></ul>
- <?php
- }
- }
- ?>
Add Comment
Please, Sign In to add comment