Размер:
AAA
Цвет: CCC
Изображения: Вкл.Выкл.
Обычная версия сайта

Search

Search:

Search by
Query string
Your query is empty'; return; } // Разрешаем только известные поля поиска. if (!in_array($sp, array('aut', 'nazv', 'doi', 'keyw'), true)) { $sp = 'aut'; } $params = array(); $sql = " SELECT art.*, years.tom AS year_tom, years.year AS year_value, years.vip AS year_vip, years.doi AS year_doi FROM art LEFT JOIN years ON years.id_y = art.id_y "; switch ($sp) { case 'aut': $sql .= " WHERE art.avtors_en LIKE ?"; $params[] = '%' . $str . '%'; break; case 'doi': $sql .= " WHERE art.doi LIKE ?"; $params[] = '%' . $str . '%'; break; case 'nazv': $words = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY); $conditions = array(); foreach ($words as $word) { $conditions[] = "art.name_en LIKE ?"; $params[] = '%' . $word . '%'; } $sql .= " WHERE (" . implode(' OR ', $conditions) . ")"; break; case 'keyw': $words = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY); $conditions = array(); foreach ($words as $word) { $conditions[] = "keyw.keyword LIKE ?"; $params[] = '%' . $word . '%'; } // Предполагается, что keyw.id_kw связан с art.id_st. $sql .= " WHERE EXISTS ( SELECT 1 FROM keyw WHERE keyw.id_kw = art.id_st AND (" . implode(' OR ', $conditions) . ") ) "; break; } $sql .= " ORDER BY art.id_y DESC, art.id_st ASC"; $stmt = $mysqli->prepare($sql); if (!$stmt) { error_log('Search prepare failed: ' . $mysqli->error); http_response_code(500); echo 'Search is temporarily unavailable.'; return; } // Динамическая привязка параметров к подготовленному запросу. if (!empty($params)) { $types = str_repeat('s', count($params)); $bindParams = array($types); foreach ($params as $key => $value) { $bindParams[] = &$params[$key]; } if (!call_user_func_array(array($stmt, 'bind_param'), $bindParams)) { error_log('Search bind_param failed'); $stmt->close(); http_response_code(500); echo 'Search is temporarily unavailable.'; return; } } if (!$stmt->execute()) { error_log('Search execute failed: ' . $stmt->error); $stmt->close(); http_response_code(500); echo 'Search is temporarily unavailable.'; return; } $result = $stmt->get_result(); if ($result && $result->num_rows > 0) { echo '

Results:

'; while ($z = $result->fetch_assoc()) { $idYear = (int)$z['id_y']; $idArticle = (int)$z['id_st']; $tom = $h($z['year_tom'] ?? ''); $year = $h($z['year_value'] ?? ''); $vip = $h($z['year_vip'] ?? ''); $yearDoi = trim((string)($z['year_doi'] ?? '')); $doiText = $yearDoi !== '' ? ', DOI: ' . $h($yearDoi) : ''; $lang = (($z['lang'] ?? '') === 'ru') ? 'in Russian' : 'in English'; $authors = $h($z['avtors_en'] ?? ''); $shortTitle = $h($z['name_e'] ?? ''); $title = $h($z['name_en'] ?? ''); $annotation = $h($z['annot_en'] ?? ''); // Ссылка на файл должна оставаться локальной. $file = trim((string)($z['link'] ?? '')); $file = ltrim($file, '/'); if ( $file === '' || preg_match('~^(?:[a-z][a-z0-9+.-]*:|//)~i', $file) || strpos($file, '..') !== false ) { $fileUrl = ''; } else { $fileUrl = '/' . $file; } echo '

' . 'Vol. ' . $tom . ' (' . $year . ' year), No. ' . $vip . $doiText . '

'; echo '

' . $authors . ' ' . $shortTitle . '
' . $title . ''; echo '

' . $annotation . '

'; if ($fileUrl !== '') { echo '(' . $h($lang) . ', pages ' . $h($z['kolpage'] ?? ''); $figures = (int)($z['ris'] ?? 0); if ($figures !== 0) { echo ', fig. ' . $figures; } // В старом коде использовались разные имена talb/tabl. $tables = (int)($z['tabl'] ?? ($z['talb'] ?? 0)); if ($tables !== 0) { echo ', tables: ' . $tables; } $links = (int)($z['nlinks'] ?? 0); if ($links !== 0) { echo ', references: ' . $links; } $format = (string)($z['fformat'] ?? ''); $size = $h($z['fsiz'] ?? ''); echo ', ' . $h($format); if ($format !== '' && $format !== 'wo') { echo ' ' . $h($format); } echo ' ' . $size . ' Kb)'; } echo '

'; } $result->free(); } else { echo 'No results'; } $stmt->close(); } ?>