Guest User

Untitled

a guest
Jan 12th, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. <?php
  2. class Table {
  3. public $connect;
  4. public $dbHost;
  5. public $dbUsername;
  6. public $dbPassword;
  7. public $dbName;
  8.  
  9. public function __construct() {
  10. $this->dbHost = "localhost";
  11. $this->dbUsername = "root";
  12. $this->dbPassword = "";
  13. $this->dbName = "44tem";
  14. $this->connect = mysqli_connect(
  15. $this->dbHost,
  16. $this->dbUsername,
  17. $this->dbPassword,
  18. $this->dbName
  19. ) or die("Não foi possível estabelecer uma conexão ao banco de dados!");
  20. }
  21.  
  22. public function generateTable(array $parameters) {
  23. if (array_key_exists("tableName", $parameters) || !empty($parameters("tableName"))) {
  24. $tableName = mysqli_real_escape_string($this->connect, $parameters["tableName"]);
  25. try {
  26. if (!mysqli_query($this->connect, "DESCRIBE $tableName")) {
  27. throw new Exception("Erro: a tabela informada não existe!");
  28. }
  29. } catch (Exception $e) {
  30. die($e->getMessage());
  31. }
  32. } else {
  33. die("Erro: é necessário informar o nome da tabela a ser gerada!");
  34. }
  35. if (array_key_exists("displayRows", $parameters) || !empty($parameters["displayRows"])) {
  36. $displayRows = $parameters["displayRows"];
  37. $getColumnNames = mysqli_query($this->connect, "DESCRIBE $tableName");
  38. $tableColumnNames = [];
  39. while ($column = mysqli_fetch_array($getColumnNames)) {
  40. if (array_key_exists($column["Field"], $displayRows)) {
  41. array_push($tableColumnNames, $displayRows[$column["Field"]]);
  42. } else if (in_array($column["Field"], $displayRows)) {
  43. array_push($tableColumnNames, $column["Field"]);
  44. }
  45. }
  46. if (empty($tableColumnNames)) {
  47. echo "Erro: nenhuma coluna válida foi informada!";
  48. }
  49. } else {
  50. die("Erro: é necessário informar no mínimo uma coluna a ser mostrada!");
  51. }
  52. if (array_key_exists("searchTerm", $parameters)) {
  53. $searchTerm = mysqli_real_escape_string($this->connect, $parameters["searchTerm"]);
  54. if (array_key_exists("searchColumn", $parameters)) {
  55. $searchColumn = mysqli_real_escape_string($this->connect, $parameters["searchColumn"]);
  56. $sql = "SELECT * FROM $tableName WHERE $searchColumn LIKE '%".$searchTerm."%'";
  57. } else {
  58. die("Erro: é necessário informar o nome da coluna de referência para buscas!");
  59. }
  60. } else {
  61. $sql = "SELECT * FROM $tableName";
  62. }
  63. $query = mysqli_query($this->connect, $sql);
  64. $totalRows = mysqli_num_rows($query);
  65. if (array_key_exists("rowsPerPage", $parameters)) {
  66. $rowsPerPage = mysqli_real_escape_string($this->connect, $parameters["rowsPerPage"]);
  67. if ($rowsPerPage > $totalRows) {
  68. $rowsPerPage = $totalRows;
  69. } else if ($rowsPerPage < 1) {
  70. $rowsPerPage = 1;
  71. }
  72. } else {
  73. $rowsPerPage = 10;
  74. }
  75. $totalPages = ceil($totalRows / $rowsPerPage);
  76. if ($totalPages < 1) {
  77. $totalPages = 1;
  78. }
  79. if (array_key_exists("pageNumber", $parameters)) {
  80. $pageNumber = preg_replace(
  81. "#[^0-9]#",
  82. "",
  83. mysqli_real_escape_string($this->connect, $parameters["pageNumber"])
  84. );
  85. if ($pageNumber < 1) {
  86. $pageNumber = 1;
  87. } else if ($pageNumber > $totalPages) {
  88. $pageNumber = $totalPages;
  89. }
  90. } else {
  91. $pageNumber = 1;
  92. }
  93. $pageLimit = "LIMIT " . ($pageNumber - 1) * $rowsPerPage . "," . $rowsPerPage;
  94. if (isset($searchTerm)) {
  95. $sql = "SELECT * FROM $tableName WHERE $searchColumn LIKE $searchTerm $pageLimit";
  96. } else {
  97. $sql = "SELECT * FROM $tableName $pageLimit";
  98. }
  99. $query = mysqli_query($this->connect, $sql);
  100. $paginationInfo = "Total (<b>$totalRows</b>), Página <b>$pageNumber</b> de <b>$totalPages</b>";
  101. $paginationCtrls = "";
  102. if ($totalPages != 1) {
  103. if ($pageNumber > 1) {
  104. $previousPage = $pageNumber - 1;
  105. // Check if we aren't on the first page, and then generate the "Previous"
  106. $paginationCtrls .= '
  107. <li class="page-item" data-page="'.$previousPage.'">
  108. <a class="page-link">&laquo;</a>
  109. </li>';
  110. // Render clickable number links that should appear on the left of the actual page number
  111. for ($i = $pageNumber - 4; $i < $pageNumber; $i++) {
  112. if ($i > 0) {
  113. $paginationCtrls .= '
  114. <li class="page-item" data-page="'.$i.'">
  115. <a class="page-link">'.$i.'</a>
  116. </li>';
  117. }
  118. }
  119. }
  120.  
  121. // Render the actual page number, but without it being a link
  122. $paginationCtrls .= '
  123. <li class="page-item active" data-page="'.$pageNumber.'">
  124. <a class="page-link">'.$pageNumber.'</a>
  125. </li>';
  126.  
  127. // Render the clickable number links that should appear on the right of the actual page number
  128. for ($i = $pageNumber + 1; $i < $totalPages; $i++) {
  129. $paginationCtrls .= '
  130. <li class="page-item" data-page="'.$i.'">
  131. <a class="page-link">'.$i.'</a>
  132. </li>';
  133. if ($i >= $pageNumber + 4) {
  134. break;
  135. }
  136. }
  137.  
  138. // This checks if we aren't on the last page, and then generate the "Next"
  139. if ($pageNumber != $totalPages) {
  140. $nextPage = $pageNumber + 1;
  141. $paginationCtrls .= '
  142. <li class="page-item" data-page="'.$nextPage.'">
  143. <a class="page-link">&raquo;</a>
  144. </li>';
  145. }
  146. }
  147. // Generate the table
  148. ?>
  149. <table>
  150. <thead>
  151. <tr>
  152. <?php foreach ($displayRows as $tableRow) { ?>
  153. <th data-scope="col"><?php echo $tableRow ?></th>
  154. <?php } ?>
  155. </tr>
  156. </thead>
  157. <tbody>
  158. <?php
  159. while ($row = mysqli_fetch_array($query)) {
  160. echo "<tr>";
  161. foreach (array_keys($displayRows) as $tableRow) {
  162. if (array_key_exists($tableRow, $row)) {
  163. echo "<td data-label=".$displayRows[$tableRow].">".$row[$tableRow]."</td>";
  164. } else {
  165. echo "<td>---</td>";
  166. }
  167. }
  168. echo "</tr>";
  169. }
  170. ?>
  171. </tbody>
  172. </table>
  173. <p class="mt-3 text-center"><?php echo $paginationInfo ?></p>
  174. <ul class="pagination justify-content-center"><?php echo $paginationCtrls ?></ul>
  175. <?php
  176. }
  177. }
  178. ?>
Add Comment
Please, Sign In to add comment