n.osennij
18.08.2015, 11:59
нашёл код живого поиск:
index.php
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html">
<meta charset="utf-8">
<title>Поиск</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="js/search.js"></script>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<input type="text" name="referal" placeholder="Введите фамилию" value="" class="who" autocomplete="off">
<ul class="search_result"></ul>
</body>
</html>
style.css
.search{
position:relative;
}
.search_result{
background: #FFF;
border: 1px #ccc solid;
width: 350px;
border-radius: 4px;
max-height:100px;
overflow-y:scroll;
display:none;
}
.search_result li{
list-style: none;
padding: 5px 10px;
margin: 0 0 0 -40px;
color: #0896D3;
border-bottom: 1px #ccc solid;
cursor: pointer;
transition:0.3s;
}
.search_result li:hover{
background: #F9FF00;
}
search.php
<?php
define("DB_HOST","localhost");
define("DB_NAME","rtss"); //Имя базы
define("DB_USER","rtss"); //Пользователь
define("DB_PASSWORD","12345"); //Пароль
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$mysqli -> query("SET NAMES 'utf8'") or die ("Ошибка соединения с базой!");
if(!empty($_POST["referal"])){ //Принимаем данные
$referal = trim(strip_tags(stripcslashes(htmlspecialchars($_P OST["referal"]))));
$db_referal = $mysqli -> query("SELECT * from passport WHERE surname LIKE '%$referal%'")
or die('Ошибка №'.__LINE__.'<br>Обратитесь к администратору сайта пожалуйста, сообщив номер ошибки.');
while ($row = $db_referal -> fetch_array()) {
echo "\n<li>".$row["surname"].' '.$row["name"].' '.$row["middle_name"].' ('.$row["birth_year"].')';"</li>";
}
}
?>
search.js
$(function(){
//Живой поиск
$('.who').bind("change keyup input click", function() {
if(this.value.length >= 2){
$.ajax({
type: 'post',
url: "search.php", //Путь к обработчику
data: {'referal':this.value},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn(); //Выводим полученые данные в списке
}
})
}
})
$(".search_result").hover(function(){
$(".who").blur(); //Убираем фокус с input
})
//При выборе результата поиска, прячем список и заносим выбранный результат в input
$(".search_result").on("click", "li", function(){
s_user = $(this).text();
$(".who").val(s_user).attr('disabled', 'disabled'); //деактивируем input, если нужно
$(".search_result").fadeOut();
})
})
А теперь в чём суть вопроса\проблемы.
Этот живой поиск часть того, что нужно.
Есть таблица passport, содержащая паспортные данные человека.
Поиск проходит по фамилии, выводит ФИО+дату рождения.
Есть таблица участником мероприятия (похода) - hike_member. В таблицу нужно добавлять участников из таблицы passport по id_passport.
И сразу же для участника каждого нужно добавить его роль в походе (из таблицы справочника выпадающий списком запросов к базе - hike_post). Выводить такой выпадающий список я умею.
Я думал, что в поле осуществляется поиск живой участника. При выборе фамилии она заносится в поисковое поле и сама строчка блокируется. В скрытое поле заносится id_passport. И правее в выпадающем списке (кооторый появляется после выбора фамилии) выбирается роль (id_hike_post уже есть в самом выпадающем списке).
<?php
$query = "SELECT * FROM hike_post"; //заносим в переменную текст запроса
$result = $connection->query($query); //заносим в переменную результат запроса
if (!$result) die($connection->error) & mysqli_close() & exit(); //если ошибка, то выводим текст ошибки, закрываем соединение с базой и завершаем выполнение
$myrow = $result->fetch_array(MYSQLI_ASSOC); //извлекаем из переменной result первую строчку данных в виде массива
echo "<select name = 'hike_post'>";
do {
echo "<option value = '".$myrow['id_hike_post']."'>".$myrow['hike_post']."</option>"; //из переменной myrow извлекаем нужное поле d цикле и формируем значения выпадающего списка
} while ($myrow = $result->fetch_array(MYSQLI_ASSOC)); //цикл до тех пор, пока в переменной result есть строчки
echo "</select>";?>
После передать все значения (Кнопка Отправить) методом POST на обработчик, который занесёт эти данные (id_passport из скрытого поля и id_hike_post из выпадающего списка) в базу.
После отправки обработчик возвращает на страницу поиска (или поиск и обработчик на одной странице оставить..). И добавляется новый участник похода.
Скрин кусочка базы:
2807
Помогите, пожалуйста, как это лучше реализовать. Может другой схемой как-то... Просто я в javascript не разбираюсь совсем...
Help, словом.
P.S. Сначала была идея с массивом. Но передумал. Мне бы хоть с этим разобраться...
index.php
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html">
<meta charset="utf-8">
<title>Поиск</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="js/search.js"></script>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<input type="text" name="referal" placeholder="Введите фамилию" value="" class="who" autocomplete="off">
<ul class="search_result"></ul>
</body>
</html>
style.css
.search{
position:relative;
}
.search_result{
background: #FFF;
border: 1px #ccc solid;
width: 350px;
border-radius: 4px;
max-height:100px;
overflow-y:scroll;
display:none;
}
.search_result li{
list-style: none;
padding: 5px 10px;
margin: 0 0 0 -40px;
color: #0896D3;
border-bottom: 1px #ccc solid;
cursor: pointer;
transition:0.3s;
}
.search_result li:hover{
background: #F9FF00;
}
search.php
<?php
define("DB_HOST","localhost");
define("DB_NAME","rtss"); //Имя базы
define("DB_USER","rtss"); //Пользователь
define("DB_PASSWORD","12345"); //Пароль
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$mysqli -> query("SET NAMES 'utf8'") or die ("Ошибка соединения с базой!");
if(!empty($_POST["referal"])){ //Принимаем данные
$referal = trim(strip_tags(stripcslashes(htmlspecialchars($_P OST["referal"]))));
$db_referal = $mysqli -> query("SELECT * from passport WHERE surname LIKE '%$referal%'")
or die('Ошибка №'.__LINE__.'<br>Обратитесь к администратору сайта пожалуйста, сообщив номер ошибки.');
while ($row = $db_referal -> fetch_array()) {
echo "\n<li>".$row["surname"].' '.$row["name"].' '.$row["middle_name"].' ('.$row["birth_year"].')';"</li>";
}
}
?>
search.js
$(function(){
//Живой поиск
$('.who').bind("change keyup input click", function() {
if(this.value.length >= 2){
$.ajax({
type: 'post',
url: "search.php", //Путь к обработчику
data: {'referal':this.value},
response: 'text',
success: function(data){
$(".search_result").html(data).fadeIn(); //Выводим полученые данные в списке
}
})
}
})
$(".search_result").hover(function(){
$(".who").blur(); //Убираем фокус с input
})
//При выборе результата поиска, прячем список и заносим выбранный результат в input
$(".search_result").on("click", "li", function(){
s_user = $(this).text();
$(".who").val(s_user).attr('disabled', 'disabled'); //деактивируем input, если нужно
$(".search_result").fadeOut();
})
})
А теперь в чём суть вопроса\проблемы.
Этот живой поиск часть того, что нужно.
Есть таблица passport, содержащая паспортные данные человека.
Поиск проходит по фамилии, выводит ФИО+дату рождения.
Есть таблица участником мероприятия (похода) - hike_member. В таблицу нужно добавлять участников из таблицы passport по id_passport.
И сразу же для участника каждого нужно добавить его роль в походе (из таблицы справочника выпадающий списком запросов к базе - hike_post). Выводить такой выпадающий список я умею.
Я думал, что в поле осуществляется поиск живой участника. При выборе фамилии она заносится в поисковое поле и сама строчка блокируется. В скрытое поле заносится id_passport. И правее в выпадающем списке (кооторый появляется после выбора фамилии) выбирается роль (id_hike_post уже есть в самом выпадающем списке).
<?php
$query = "SELECT * FROM hike_post"; //заносим в переменную текст запроса
$result = $connection->query($query); //заносим в переменную результат запроса
if (!$result) die($connection->error) & mysqli_close() & exit(); //если ошибка, то выводим текст ошибки, закрываем соединение с базой и завершаем выполнение
$myrow = $result->fetch_array(MYSQLI_ASSOC); //извлекаем из переменной result первую строчку данных в виде массива
echo "<select name = 'hike_post'>";
do {
echo "<option value = '".$myrow['id_hike_post']."'>".$myrow['hike_post']."</option>"; //из переменной myrow извлекаем нужное поле d цикле и формируем значения выпадающего списка
} while ($myrow = $result->fetch_array(MYSQLI_ASSOC)); //цикл до тех пор, пока в переменной result есть строчки
echo "</select>";?>
После передать все значения (Кнопка Отправить) методом POST на обработчик, который занесёт эти данные (id_passport из скрытого поля и id_hike_post из выпадающего списка) в базу.
После отправки обработчик возвращает на страницу поиска (или поиск и обработчик на одной странице оставить..). И добавляется новый участник похода.
Скрин кусочка базы:
2807
Помогите, пожалуйста, как это лучше реализовать. Может другой схемой как-то... Просто я в javascript не разбираюсь совсем...
Help, словом.
P.S. Сначала была идея с массивом. Но передумал. Мне бы хоть с этим разобраться...