PHP | LDAP | Живой поиск в AD - PullRequest
       5

PHP | LDAP | Живой поиск в AD

0 голосов
/ 21 января 2020

Я использую функцию поиска в реальном времени для моих MySQL данных базы данных. Но к go непосредственно к источнику я не хочу, чтобы между ними был файл или дБ, и я пошел непосредственно к самой Active Directory.

Поиск работает, но после того, как вы искали что-то вроде имени пользователя, он дает правильный вывод, данные сбрасываются через 2/3 секунды. Таким образом, текст ввода типа по-прежнему заполнен, но он показывает все результаты.

Кто-нибудь может мне помочь с этим или может оптимизировать код?

INDEX. PHP

<!DOCTYPE html>
<?php
    session_start();
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Live Search</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
    </head>
    <body>
        <div class="container">
            <br />
            <br />
            <br />
            <h2 align="center">Live Data Search Active Directory</h2><br />
            <div class="form-group">
                <div class="input-group">
                    <span class="input-group-addon">Search</span>
                    <input type="text" name="search_text" id="search_text" placeholder="Search by Customer Details" class="form-control" />
                </div>
            </div>
            <br />
            <div id="result"></div>
        </div>
        <div style="clear:both"></div>
        <br />

        <br />
        <br />
        <br />
    </body>
</html>
<script>
$(document).ready(function(){
    load_data();
    function load_data(query)
    {
        $.ajax({
            url:"fetch.php",
            method:"post",
            data:{query:query},
            success:function(data)
            {
                $('#result').html(data);
            }
        });
    }

    $('#search_text').keyup(function(){
        var search = $(this).val();
        if(search != '')
        {
            load_data(search);
        }
        else
        {
            load_data();            
        }
    });
});
</script>

My fetch. php файл со всеми ссылками на AD. Конечно, учетные данные и сервер заполнены, и привязка работает.

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <div style="overflow-x:auto;">
    </head>
</html>
<?php

$output = "";

$ldap_password = "<username>";
$ldap_username = "<password>";
$ldap_connection = ldap_connect("<ldapserver>");

if (FALSE === $ldap_connection){
    echo "Unable to connect to the ldap server";
}

ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Unable to set LDAP protocol version");
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);

if (TRUE === ldap_bind($ldap_connection, $ldap_username, $ldap_password))
{
    if (isset($_POST["query"]))
    {
        $search = $_POST["query"];
        $search_filter = "(&(objectCategory=person)(|(sAMAccountName=*".$search.")(sAMAccountName=".$search."*)(l=*".$search."*)))";
    }
    else
    {
        $search_filter = "(&(objectCategory=person)(|(sAMAccountName=*)))";
    }

    $output .= '<table id="customers"><tr><th>Username</th><th>Last Name</th><th>First Name</th><th>Company</th><th>Office</th><th>Department</th><th>Mobile</th><th>Telephone</th><th>E-Mail Address</th></tr>';

    $ldap_base_dn = "OU=NL,DC=global,DC=com";
    $result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter);

    if (FALSE !== $result){
        $entries = ldap_get_entries($ldap_connection, $result);

    //var_dump($entries);

    //For each account returned by the search
    for ($x=0; $x<$entries["count"]; $x++){

        //Windows Username
        $LDAP_samaccountname = "";

        if (!empty($entries[$x]["samaccountname"][0])) {
        $LDAP_samaccountname = $entries[$x]["samaccountname"][0];
        if ($LDAP_samaccountname == "NULL"){
        $LDAP_samaccountname= "";
        }
        } else {
        //#There is no samaccountname s0 assume this is an AD contact record so generate a unique username

        $LDAP_uSNCreated = $entries[$x]["usncreated"][0];
        $LDAP_samaccountname= "CONTACT_" . $LDAP_uSNCreated;
        }

        //Last Name
        $LDAP_LastName = "";

        if (!empty($entries[$x]["sn"][0])) {
        $LDAP_LastName = $entries[$x]["sn"][0];
        if ($LDAP_LastName == "NULL"){
        $LDAP_LastName = "";
        }
        }

        //First Name
        $LDAP_FirstName = "";

        if (!empty($entries[$x]["givenname"][0])) {
        $LDAP_FirstName = $entries[$x]["givenname"][0];
        if ($LDAP_FirstName == "NULL"){
        $LDAP_FirstName = "";
        }
        }

        //Company
        $LDAP_CompanyName = "";

        if (!empty($entries[$x]["company"][0])) {
        $LDAP_CompanyName = $entries[$x]["company"][0];
        if ($LDAP_CompanyName == "NULL"){
        $LDAP_CompanyName = "";
        }
        }

        //Department
        $LDAP_Department = "";

        if (!empty($entries[$x]["department"][0])) {
        $LDAP_Department = $entries[$x]["department"][0];
        if ($LDAP_Department == "NULL"){
        $LDAP_Department = "";
        }
        }

        //Office
        $LDAP_Office = "";

        if (!empty($entries[$x]["l"][0])) {
        $LDAP_Office = $entries[$x]["l"][0];
        if ($LDAP_Office == "NULL"){
        $LDAP_Office = "";
        }
        }

        //Job Title
        $LDAP_JobTitle = "";

        if (!empty($entries[$x]["title"][0])) {
        $LDAP_JobTitle = $entries[$x]["title"][0];
        if ($LDAP_JobTitle == "NULL"){
        $LDAP_JobTitle = "";
        }
        }

        //Mobile Number
        $LDAP_CellPhone = "";

        if (!empty($entries[$x]["mobile"][0])) {
        $LDAP_CellPhone = $entries[$x]["mobile"][0];
        if ($LDAP_CellPhone == "NULL"){
        $LDAP_CellPhone = "";
        }
        }

        //Telephone Number
        $LDAP_DDI = "";

        if (!empty($entries[$x]["telephonenumber"][0])) {
        $LDAP_DDI = $entries[$x]["telephonenumber"][0];
        if ($LDAP_DDI == "NULL"){
        $LDAP_DDI = "";
        }
        }

        //Email address
        $LDAP_InternetAddress = "";

        if (!empty($entries[$x]["mail"][0])) {
        $LDAP_InternetAddress = $entries[$x]["mail"][0]; 
        if ($LDAP_InternetAddress == "NULL"){
        $LDAP_InternetAddress = "";
        }
        }

        $output .= '<tr><td><strong>' . $LDAP_samaccountname .'</strong></td><td>' .$LDAP_LastName.'</td><td>'.$LDAP_FirstName.'</td><td>'.$LDAP_CompanyName.'</td><td>'.$LDAP_Office.'</td><td>'.$LDAP_Department.'</td><td>'.$LDAP_CellPhone.'</td><td>'.$LDAP_DDI.'</td><td>'.$LDAP_InternetAddress.'</td></tr>';


        } //END for loop
        echo $output;
        } //END FALSE !== $result
        echo("</table>"); //close the table     
} 
?>

l oop - отображение нескольких результатов.

Как видите, результат хороший, но после 2/3 se c он сбрасывает и показывает все данные вместо значения "sbx". (данные являются конфиденциальными, поэтому не отображаются, но они являются основными)

Привет, Стеф

...