Текстовое поле «Друзья» со сценарием автозаполнения (который поддерживает множественное завершение слов из столбца «полное имя пользователя») в форме регистрации. Теперь вопрос 1. Как получить массив имен из поля ввода текста и найти идентификаторы этих полных имен с помощью php? Вопрос 2: Каким образом форма регистрации будет помещать эти идентификаторы во вторую (друзья) таблицу, если новые пользователи идентифицируют неизвестных во время регистрации?
Например, если посетитель пишет «Tu», скрипт находит из таблицы пользователей «Tural Teyyuboglu», дополняет ее, добавляет запятую, пользователь может добавить столько имен, сколько ему нужно. Каждый раз, когда скрипт работает. Я хочу, чтобы эти имена пользователей были разделены запятыми в массиве php, искать эти имена один за другим по идентификаторам и добавлять в таблицу друзей. Но возникает ли вторая мысль? Но как в регистрационной форме эти идентификаторы будут помещены во вторую (друзья) таблицу, если новые пользователи будут неизвестны во время регистрации?
Извините за мой плохой английский. Моя идея: у меня есть база данных пользователей, у каждого пользователя есть поле идентификатора с автоинкрементом и различные другие поля с их подробностями. Я хотел бы сохранить в записи пользователя поле с массивом друзей. Я хотел бы найти наиболее эффективный способ хранения и возможности поиска в поле «массив идентификаторов друзей» каждого пользователя и перечисления идентификаторов друзей по каждому запросу пользователя. если предположить, что в какой-то момент может существовать миллион пользователей, у каждого из которых по миллиону «идентификаторов друзей», я не думаю, что разделение их запятыми будет эффективным, какие-либо решения? может ли он быть сохранен в BLOB-объекте и найден по битам? (например, немного на человека, так что 1K-блоб может хранить до 1024 возможных комбинаций друзей). Я думаю, что другой стол - лучшее решение. Это отношение многие ко многим, я построил отдельную таблицу для друзей пользователей: usrfrnd_tbl со столбцами UserFriendID (уникальный ключ), UserID, FriendID. Я применил автозаполнение Jquery к друзьям в поле формы регистрации: когда посетитель вводит имя Существующий пользователь в это поле ввода, прежде всего, скрипт ищет существование имени, дополняет его (если существует), добавляет запятую. Пользователь может ввести второе, третье ... существующие имена пользователей в это поле, и сценарий будет выполняться автоматически каждый раз. Теперь я хочу создать php-файл, который будет искать идентификаторы этих имен пользователей, создавать массив идентификаторов, добавлять его в таблицу «usrfrnd_tbl» поля «Идентификатор друга» новых пользователей в таблице базы данных. Вопрос: 1. Как это сделать? Теперь, как получить массив идентификаторов написанных имен и поместить в поле «друзья» usr_table после отправки формы регистрации? 2. Мне нужен только идентификатор написанного имени и полное имя. Мне не нужно значение. Как я могу удалить его из кода JQuery?
HTML
<form action="index.php" method="post">
<input class="std" type="text" name="friends" id="friends"/>
<input type="submit" name="submit">
</form>
Jquery
$(function() {
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$( "#friends" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
source: function( request, response ) {
$.getJSON( "search.php", {
term: extractLast( request.term )
}, response );
},
search: function() {
// custom minLength
var term = extractLast( this.value );
if ( term.length < 2 ) {
return false;
}
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});
search.php
$db = new mysqli('localhost', 'user' ,'pass', 'db') or die(mysqli_errno());
$q = strtolower($_GET["term"]);
if (!$q) return;
$query = $db->query("select id, fullname from usr_table where fullname like '$q%'") or die(mysqli_errno());
$results = array();
while ($row = mysqli_fetch_array($query)) {$results[] = array ( "id" => $row[0] , "label" => $row[1], "value" => $row[1] );}
echo json_encode($results);