Я использую 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%'
Теперь мне просто нужно отделить имя.
Другими словами, как мне получить идентификатор из таблицы с идентификатором столбца, именем, фамилией, не зная разделения между именем или фамилией?
Джон Смит: легко, первое слово это имя, второе слово это фамилия
Мэри Джейн Тесто: что теперь?
Я думал о добавлении запятой, которая разделяет оба имени, но это не очень стильно.
Другой вариант — добавить в мою базу данных столбец с обоими именами в одной записи, но это затрудняет необходимость добавления новых преподавателей.
Сделайте это, прежде чем назначить данные в ваши элементы
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>
Я извиняюсь за задержку, @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, но это не имеет отношения к вопросу.
Еще раз спасибо тем, кто помог.