Created
December 3, 2013 21:28
-
-
Save fesor/7777780 to your computer and use it in GitHub Desktop.
Sort table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// подключение нам не интересно | |
$link = new mysqli ($host, $username, $password, $db); | |
if ($mysqli->connect_errno) { | |
die ('Ошибка! Не удалось подключиться к базе данных!' . $mysqli->connect_errno); | |
} | |
/** | |
* Простенький провайдер данных | |
* если вы используете php5.5 то можно даже генератор соорудить | |
* но для 5-ти записей это не имеет смысла, | |
* хотя тогда можно было бы не париться по поводу количества элементов | |
* | |
* @param array $options нашего запроса | |
* @return array | |
*/ | |
function dataProvider(array $options, $link) | |
{ | |
// подготавливаем лимиты | |
$start_from = (options['page'] - 1) * $options['perPage']; | |
$sql = "SELECT `username`, `email`, `homepage`, `msg`, `send_time` | |
FROM `user_data` | |
ORDER BY $options['perPage'] $d LIMIT $start_from, {$options['perPage']}"; | |
$result = mysqli_query($link, $sql); | |
if (!$result) { | |
// тут просто скопипащу но вообще это нехорошо | |
die('Error: ' . mysqli_error($mysqli)); | |
} | |
// так как после die уже точно ничего не будет отрабатывать, лишний else можно выпилить | |
$data = []; | |
while ($row = mysqli_fetch_array($result)) { | |
// что бы переделать под генератор, достаточно вместо сборки массива | |
// добавить строку | |
// yield $row; | |
// и при каждом вызове функции вам будет возвращаться очередной ряд, | |
// код останется красивым и не будет жрать лишнюю память | |
$data[] = $row; | |
} | |
return $data; | |
} | |
function getSoftLink($field, $currentDirection) { | |
$direction = 'ASC' === $currentDirection ? 'DESC' : 'ASC'; | |
// тут еще по феншую если нужно бы переменные эти | |
// через urlencode прогнать но в нашем случае не обязательно... | |
return sprintf('?sortBy=%s&dir=%s', $field, $direction); | |
} | |
// собираем данные из запроса | |
// эта куча проверок нужны только что бы ничего не поломать | |
// если вам нужно это для, то так заморачиваться не обязательно | |
// но хорошо бы | |
$options = [ | |
// задаем текущую страницу | |
'page' => empty($_GET['page']) ? | |
// если страница не найдена - задаем страницу по умолчанию, | |
// если переменная содержит треш и на выходе у нас 0 или отрицательное число | |
// то вернем опять же дефолтное значение | |
1 : max(1, intval($_GET['page'])), | |
// тут стоит прогнать через mysql_real_escape_string или что-то в этом духе | |
// хотя достаточно проверять какие именно поля нам доступны для сортировки | |
'sortBy' => empty($_GET['sortBy']) || in_array(strtolower($_GET['sortBy']), ['username', 'email', 'homepage', 'send_time']) ? | |
'' : $_GET['sortBy'], | |
// принимаем от клиента только два возможных значения, доверять этим клиентам нельзя... | |
'direction' => empty($_GET['dir']) || strtolower($_GET['dir']) == 'ask' ? 'ASС' : 'DESС', | |
'perPage' => 5 | |
]; | |
// отображаем | |
include __DIR__ . '/view.php'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<table border = '1'> | |
<thead> | |
<tr> | |
<th><a href="index.php<?= getSortLink('username', $options['direction']); ?>">имя пользователя</a></th> | |
<th><a href="index.php<?= getSortLink('email', $options['direction']); ?>">E-mail</a></th> | |
<th><a href="index.php<?= getSortLink('homepage', $options['direction']); ?>">Homepage</a></th> | |
<th>Комментарий</th> | |
<th><a href="index.php<?= getSortLink('send_time', $options['direction']); ?>">Дата добавления</a></th> | |
</tr> | |
<thead> | |
<tbody> | |
<?php foreach (dataProvider($options) as $row) { ?> | |
<tr> | |
<td><?= $row['username']; ?></td> | |
<td><?= $row['email']; ?></td> | |
<td><?= $row['homepage']; ?></td> | |
<td><?= $row['msg']; ?></td> | |
<td><?= $row['send_time']; ?></td> | |
</tr> | |
<?php } ?> | |
</tbody> | |
</table> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment