Разделение между именем и фамилией с использованием данных

Я использую DataList хранить все имена и фамилии, которые я получаю из таблицы базы данных MySQL.

Когда кто-то вводит имя а также фамилия репетитора и нажимает «показать репетитора», вызывается showTutor ().

<input list="tutorData" name="tutors" id="tutorToShow">
<datalist id="tutorData">
<?php
$sql = "SELECT name, surname FROM tutors ORDER BY surname ASC";
if (!$res = $link->query($sql)) {
trigger_error('error in query ' . $link->error);
} else {
while ($row = $res->fetch_assoc()) {
$name = $row['surname'];
$sName = $row['name'];
?>

<option value="<?php echo "$sName $name" ?>" >
<?php
}
}
?>
</datalist>
<input type="button" value="Weergeven" onclick="showTutor();">

Мой специалист заполняется и работает отлично. Теперь: когда вызывается showTutor, поэтому, когда кнопка была нажата:

function showTutor(){
var tut = document.getElementById("tutorToShow").value;
}

Это дает мне что-то вроде Джона Смита или Мэри Джейн Дау.

В чем проблема, хотя, когда я перезагружаю показанный div репетитора с помощью ajax, мне нужно извлечь идентификатор этого репетитора из базы данных.

Так что мне определенно понадобится этот SQL:

SELECT ID
FROM tutors
WHERE name LIKE '$name%'
AND surname LIKE '$surname%'

Теперь мне просто нужно отделить имя.

Другими словами, как мне получить идентификатор из таблицы с идентификатором столбца, именем, фамилией, не зная разделения между именем или фамилией?

Джон Смит: легко, первое слово это имя, второе слово это фамилия

Мэри Джейн Тесто: что теперь?

Я думал о добавлении запятой, которая разделяет оба имени, но это не очень стильно.

Другой вариант — добавить в мою базу данных столбец с обоими именами в одной записи, но это затрудняет необходимость добавления новых преподавателей.

0

Решение

Сделайте это, прежде чем назначить данные в ваши элементы

if (strpos($sName, ' ') != false) {
// if above string position of space isn't false,
// explode the string at the space into an array of
// individual names.
$sName = explode(' ', $sName);
echo $sNames[0];
echo $sNames[1];
// you will need to look at foreach loop and counting the array length
}

Попробуй это.

<datalist id="tutorData">
<?php
$sql = "SELECT name, surname FROM tutors ORDER BY surname ASC";
if (!$res = $link->query($sql)) {
trigger_error('error in query ' . $link->error);
} else {
while ($row = $res->fetch_assoc()) {
$surname = $row['surname'];
$first_names = $row['name'];
if (strpos($first_names, ' ') != false) {
/*
if above string position of space isn't false,
explode the string at the space into an array of
individual names.
*/
$first_name = explode(' ', $first_names); // EG: Paul John
$name1 = $first_name[0]; // Paul
$name2 = $first_name[1]; // John
/*
you will need to look at foreach loop and counting
the array length
*/
}

?>
<option value="<?php echo $name1 . ' ' . $name2 . ' ' . $surname" ?>" >
<?php
}
}
?>
</datalist>
0

Другие решения

Я извиняюсь за задержку, @Oli помог мне в чате несколько недель назад.

<input list="tutorData" name="tutors" id="tutorToShow">
<datalist id="tutorData">
<?php
$sql = "SELECT name, surname, id FROM tutors ORDER BY surname ASC";
if (!$res = $link->query($sql)) {
trigger_error('error in query ' . $link->error);
} else {
while ($row = $res->fetch_assoc()) {
$name = $row['surname'];
$sName = $row['name'];
$id = $row['id'];
?>

<option value="<?php echo "$sName $name" ?>" data-id="<?php echo $id; ?>">
<?php
}
}
?>
</datalist>
<input type="button" value="Show" onclick="showTutor();">

Таким образом, в основном я только добавил идентификатор данных, затем я написал этот javascript:

<script>
function showTutor() {
var tut = document.getElementById("tutorToShow").value;
var list = document.getElementById("tutorData");
var length = list.options.length;
var id;
for (var i = 0; i < length; i++) {
var eachTutor = list.options[i].value.toLowerCase();
if (tut === eachTutor) {
id = list.options[i].getAttribute('data-id');
}
}
}
</script>

Теперь у меня есть идентификатор преподавателя, без разделения имени. Я также публикую его на странице php с помощью ajax, но это не имеет отношения к вопросу.

Еще раз спасибо тем, кто помог.

0