Понемного изучаю PHP, ну и mySQL заодно. Проштудировал теорию, в качестве практики решаю задачки с одного сайта. Дошёл до более менее сложной (по моим меркам) задачи, и самостоятельно решил её. Всё работает, вроде как надо. Но понимаю, что код новичка не может быть хорошим, не говоря об идеальном. Поэтому хотелось бы попросить гуру и не очень оценить способ решения задачи и вообще выразить обоснованную критику по всему коду в целом. Буду благодарен за ответы ;)
Задача:
Решение:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Фамилии</title>
<style>
a.alph,
span.alph {
display: inline-block;
font-size: 30px;
color:
padding: 10px;
}
a.lastname {
font-size: 20px;
padding: 10px;
color:
}
a.page_num {
display: inline-block;
font-size: 18px;
color:
padding: 10px;
}
a:hover {
font-weight: bold;
}
span.card {
display: block;
margin-top: 30px;
font-size: 20px;
}
</style>
</head>
<body>
<?
$alph = ['А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я'];
$num = 3;
$link = mysqli_connect('localhost', 'root', '', 'web');
if (!$link) {
printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
exit;
}
$query = "SELECT name FROM name";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_array($result, MYSQL_NUM)) {
$lastnames[] = $row[0];
}
}
foreach($alph as $letter) {
foreach ($lastnames as $lastname) {
$printed = '';
$res = preg_match("/^$letter.+/i", $lastname, $matches);
if ($res) {
echo "<a class='alph' href='?letter=$letter'>$letter</a>";
$printed = "yes";
break;
}
}
if (!$printed) {
echo "<span class='alph'>$letter</span>";
}
}
echo "<hr>";
$get_let = $_GET["letter"];
if ($get_let && array_search($get_let, $alph) === FALSE) {
echo "Неверная буква!";
} elseif ($get_let) {
foreach ($lastnames as $lastname) {
$res = preg_match("/^$get_let.+/iu", $lastname, $matches);
if ($res) {
$good[] = $matches[0];
}
}
$good = array_chunk($good, $num);
$cnt = count($good);
if (is_numeric($_GET["page"])) {
$page_num = $_GET["page"];
} else {
$page_num = 1;
}
if ($page_num <= $cnt) {
foreach ($good[$page_num - 1] as $ln) {
echo "<a class='lastname' href='?letter=$get_let&page=$page_num&lastname=$ln'>$ln</a><br>";
}
}
echo "<hr>";
if ($cnt > 1) {
for ($i = 1; $i <= $cnt; $i++) {
if ($page_num == $i) echo "<b>";
echo "<a class='page_num' href='?letter=$get_let&page=$i'>$i</a>";
if ($page_num == $i) echo "</b>";
}
}
$name = $_GET["lastname"];
if ($name && array_search($name, $lastnames) === FALSE) {
echo "Неверная фамилия!";
} else {
$get_info = "SELECT * FROM name WHERE name='$name'";
if ($res = mysqli_query($link, $get_info)) {
while ($row = mysqli_fetch_array($res)) {
printf("<span class='card'> ID: %d<br>
Фамилия: %s<br>
Дополнительно: %s</span>", $row["id_name"], $row["name"], $row["description"]);
}
}
}
}
?>
</body>
</html>