使用数据列表分隔姓名和姓氏

Separation between name and surname using datalists

我正在使用 datalist 来存储我从 MySQL 数据库 table.

中检索到的所有姓名和姓氏

当有人输入导师的姓名 姓氏并单击 "show tutor" 时,将调用 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;
}

这给了我像 John Smith 或 Mary Jane Dough 的东西。

问题是什么,当我用 ajax 重新加载显示的导师 div 时,我需要从数据库中检索该导师的 ID。

所以我绝对需要的是这个 SQL:

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

现在我只需要分开名字就可以了

换句话说,如何在不知道名字或姓氏分隔的情况下从具有 ID、姓名、姓氏列的 table 中检索 ID?

John Smith:简单,第一个词是名字,第二个词是姓氏

玛丽珍面团:现在怎么办?

我想添加一个逗号来分隔两个名字,但这不是很时尚。

另一种选择是在我的数据库中添加一个列,该列在一条记录中包含两个名字,但是当需要添加新导师时,这会很麻烦。

在将数据分配到元素之前执行此操作

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();">

所以基本上我只添加了一个data-id,然后我写了这个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>

我现在有了导师的id,没有分开任何名字。我也 post 它到 php 页面 ajax,但这与问题无关。

再次感谢提供帮助的人。