|
 32.7 Кб |
|
| Здравствуйте! У меня есть бд с учеными и информацией о них. Я делаю поиск по базе через форму и на экран выводится таблица со списком соответствующих людей. Так вот теперь я хочу сделать так, чтобы при нажатии на фамилию ученого в этой таблице, мне открывалась страничка с данными об этом человеке. Подскажите пожалуйста как это можно реализовать? Просто я даже не могу представить как обратиться к базе с таким вот запросом...
В приложении таблица с ссылками, которые должны переходить на страничку с данными об ученом, причем эти данные должны быть взяты из базы данных | |
|
|
|
|
|
|
|
для: bool
(27.05.2014 в 21:42)
| | а как вы выводите список ученых, это ок, тут всё понятно? | |
|
|
|
|
|
|
|
для: psychomc
(27.05.2014 в 23:22)
| | да, с этим я разобралась, всё работает как надо
вот сам код, если нужен
<form class="search_form" method="POST" action="auth.php" >
<p> Фамилия ученого <input type="text" name="LN" placeholder="Введите фамилию..." required>
<p> Сортировка
<select name=sort size=1>
<option value="last_name">Фамилия</option>
<option value="publications">Публикации</option>
<option value="ciitation_index">Индекс цитирования</option>
<option value="h_index">Индекс Хирша</option>
</select> <br><br>
<input type=reset value=Очистить>
<input type=submit name="submit" value=Поиск ></p>
</form>
<?php
$link = mysql_connect('localhost','root','1111');
mysql_select_db('chdu');
mysql_query("SET NAMES 'cp1251'");
$LN = $_POST['LN'];
$sort = $_POST['sort'];
$i=0;
$query = "SELECT DISTINCT authors.id_author, authors.last_name,authors.name,authors.patronymic,authors.publications,indexes.ciitation_index,indexes.h_index
FROM authors,indexes
WHERE `last_name` like '%".$LN."%' AND authors.id_author=indexes.author order by ".$sort." desc";
$result = mysql_query($query);
if (isset($_POST['LN'])) {
echo '<table>';
echo '<tr>';
echo '<th>ФИО</th>';
echo '<th>Фамилия</th>';
echo '<th>Имя</th>';
echo '<th>Отчество</th>';
echo '<th>Публикации</th>';
echo '<th>Индекс цитирования</th>';
echo '<th>Индекс Хирша</th>';
echo '</tr>';
while ($row = mysql_fetch_assoc($result)){
$i++;
echo '<tr>';
echo '<td><a href=info.html>'.$row['id_author'].'</a></td>';
echo '<td>'.$row['last_name'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['patronymic'].'</td>';
echo '<td>'.$row['publications'].'</td>';
echo '<td>'.$row['ciitation_index'].'</td>';
echo '<td>'.$row['h_index'].'</td>';
echo '</tr>';
}
echo '</table>';
echo 'Найдено ученых: '.$i.'.';
}
?>
|
| |
|
|
|
|
|
|
|
для: bool
(28.05.2014 в 00:02)
| |
$LN = $_POST['LN'];
$sort = $_POST['sort'];
|
и сразу в запрос:
like '%".$LN."%' AND authors.id_author=indexes.author order by ".$sort."
|
это инъекция. Необходимо экранировать:
<?
$LN = mysql_real_escape_string($_POST['LN']);
$sort = mysql_real_escape_string($_POST['sort']);
|
Для информации: оператор LIKE использует "_" и "%" как спецсимволы, и если таковые будут присутствовать в запросе, то поиск будет некорректным. Более корректно выглядит так:
<?
$LN = addcslashes(mysql_real_escape_string($_POST['LN']), '%_');
|
Только не перепутайте эту функцию с функцией addslashes
Чтобы иметь возможность получения содержания по выбору из списка, необходимо добавить не просто ссылку (info.html), а с параметром позволяющим сделать этот выбор в базе, то есть ссылка должна содержать идентификатор записи
<?
'<a href=info.html?id='.$row['id_author'].'>'.$row['а_тут_ключ_значения_содержащего_имя_автора'].'</a>';
//тогда
if($id = (int)$_GET['id']) {
//запрос по $id к соответствующей таблице вернет информацию о...
}
|
| |
|
|
|
|
|
|
|
для: confirm
(28.05.2014 в 05:52)
| | спасибо большое, попробую так сделать... | |
|
|
|
|
|
|
|
для: confirm
(28.05.2014 в 05:52)
| | Премного благодарна, всё работает в лучшем виде)) | |
|
|
|