Показать сообщение отдельно
  #1 (permalink)  
Старый 18.08.2015, 11:59
Новичок на форуме
Отправить личное сообщение для n.osennij Посмотреть профиль Найти все сообщения от n.osennij
 
Регистрация: 18.08.2015
Сообщений: 1

AJAX живой поиск и запись в массив с обработкой
нашёл код живого поиск:

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($_POST["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 из выпадающего списка) в базу.

После отправки обработчик возвращает на страницу поиска (или поиск и обработчик на одной странице оставить..). И добавляется новый участник похода.

Скрин кусочка базы:

Image 6.jpg

Помогите, пожалуйста, как это лучше реализовать. Может другой схемой как-то... Просто я в javascript не разбираюсь совсем...

Help, словом.

P.S. Сначала была идея с массивом. Но передумал. Мне бы хоть с этим разобраться...
Ответить с цитированием