使用datalists分隔名称和姓氏

时间:2015-03-19 11:34:06

标签: php mysql datalist

我使用datalist来存储我从MySQL数据库表中检索的所有名称和姓氏。

当有人输入导师的姓名姓氏并点击" 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,名称,姓氏的表中检索ID?

约翰史密斯:简单,第一个词是姓名,第二个词是姓氏

Mary Jane Dough:现在是什么?

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

另一个选择是在我的数据库中添加一个列,在一个记录中同时包含两个名称,但是当需要添加新的教师时,这是一个麻烦。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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();">

所以基本上我只添加了一个数据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,没有分隔任何名字。我也将它发布到带有ajax的php页面,但这与问题无关。

再次感谢帮助过的人。